Changeset 106476 in vbox
- Timestamp:
- Oct 18, 2024 12:57:36 PM (4 months ago)
- svn:sync-xref-src-repo-rev:
- 165303
- Location:
- trunk
- Files:
-
- 4 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/log.h
r106346 r106476 171 171 /** Generic Platform Device group. */ 172 172 LOG_GROUP_DEV_PLATFORM, 173 /** PMU Device group. */ 174 LOG_GROUP_DEV_PMU, 173 175 /** QEMU firmware config Device group. */ 174 176 LOG_GROUP_DEV_QEMUFWCFG, … … 927 929 "DEV_PIT", \ 928 930 "DEV_PLATFORM", \ 931 "DEV_PMU", \ 929 932 "DEV_QEMUFWCFG", \ 930 933 "DEV_RTC", \ -
trunk/include/VBox/vmm/cpum-armv8.h
r106381 r106476 72 72 /** Read from the OSLSR_EL1 syste register. */ 73 73 kCpumSysRegRdFn_OslsrEl1, 74 /** Read from a PMU system register. */ 75 kCpumSysRegRdFn_Pmu, 74 76 75 77 /** End of valid system register read function indexes. */ … … 98 100 /** Write to the OSLAR_EL1 syste register. */ 99 101 kCpumSysRegWrFn_OslarEl1, 102 /** Write to a PMU system register. */ 103 kCpumSysRegWrFn_Pmu, 100 104 101 105 /** End of valid system register write function indexes. */ -
trunk/src/VBox/Main/src-client/ConsoleImplConfigArmV8.cpp
r106388 r106476 499 499 vrc = RTFdtNodeFinalize(hFdt); VRC(); 500 500 501 /* 502 * Configure the perofrmance monitoring unit. 503 */ 504 /** @todo Make this configurable and enable as default for Windows VMs because they assume a working PMU 505 * (which is not available in hardware on AppleSilicon). 506 */ 507 InsertConfigNode(pDevices, "pmu", &pDev); 508 InsertConfigNode(pDev, "0", &pInst); 509 InsertConfigInteger(pInst, "Trusted", 1); 510 InsertConfigNode(pInst, "Config", &pCfg); 511 501 512 RTGCPHYS GCPhysMmioStart; 502 513 RTGCPHYS cbMmio; -
trunk/src/VBox/VMM/Makefile.kmk
r106475 r106476 470 470 VMMR3/PGMSavedState.cpp \ 471 471 VMMR3/PGMSharedPage.cpp \ 472 VMMR3/PMUR3.cpp \ 472 473 VMMR3/SSM.cpp \ 473 474 VMMR3/STAM.cpp \ … … 503 504 VMMAll/GICAll.cpp \ 504 505 VMMAll/GIMAll.cpp \ 506 VMMAll/PMUAll.cpp \ 505 507 VMMAll/TMAll.cpp \ 506 508 VMMAll/TMAllCpu.cpp \ -
trunk/src/VBox/VMM/VMMAll/CPUMAllSysRegs-armv8.cpp
r106061 r106476 34 34 #include "CPUMInternal-armv8.h" 35 35 #include <VBox/vmm/gic.h> 36 #include <VBox/vmm/pmu.h> 36 37 #include <VBox/vmm/vmcc.h> 37 38 #include <VBox/err.h> … … 182 183 183 184 185 186 /** @callback_method_impl{FNCPUMRDSYSREG} */ 187 static DECLCALLBACK(VBOXSTRICTRC) cpumSysRegRd_Pmu(PVMCPUCC pVCpu, uint32_t idSysReg, PCCPUMSYSREGRANGE pRange, uint64_t *puValue) 188 { 189 RT_NOREF_PV(pRange); 190 return PMUReadSysReg(pVCpu, idSysReg, puValue); 191 } 192 193 194 /** @callback_method_impl{FNCPUMWRSYSREG} */ 195 static DECLCALLBACK(VBOXSTRICTRC) cpumSysRegWr_Pmu(PVMCPUCC pVCpu, uint32_t idSysReg, PCCPUMSYSREGRANGE pRange, uint64_t uValue, uint64_t uRawValue) 196 { 197 RT_NOREF_PV(pRange); RT_NOREF_PV(uRawValue); 198 return PMUWriteSysReg(pVCpu, idSysReg, uValue); 199 } 200 201 184 202 /** 185 203 * System register read function table. … … 193 211 { cpumSysRegRd_GicV3Icc }, 194 212 { cpumSysRegRd_OslsrEl1 }, 213 { cpumSysRegRd_Pmu } 195 214 }; 196 215 … … 207 226 { cpumSysRegWr_GicV3Icc }, 208 227 { cpumSysRegWr_OslarEl1 }, 228 { cpumSysRegWr_Pmu } 209 229 }; 210 230 -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp
r106463 r106476 1731 1731 { 1732 1732 RT_NOREF(pVM); 1733 1734 /** @todo Windows assumes a working PMU which is not available on AppleSilicon. It uses it 1735 * to determine the base frequency it seems (because without the * 100 multiplier the frequency 1736 * is detetcted as 24MHz. This needs to be moved into a separate PMU emulation (to be created) for 1737 * all backends to share (Linux/KVM when running on AppleSilicon hardware). */ 1738 if ( idSysReg == ARMV8_AARCH64_SYSREG_PMCR_EL0 1739 || idSysReg == ARMV8_AARCH64_SYSREG_PMCCNTR_EL0 1740 || idSysReg == ARMV8_AARCH64_SYSREG_PMCNTENCLR_EL0) 1741 { 1742 if (idSysReg == ARMV8_AARCH64_SYSREG_PMCCNTR_EL0) 1743 { 1744 u64Val = ASMReadTSC() * 100; 1745 } 1746 else 1747 u64Val = 0; 1748 } 1749 else 1750 rcStrict = CPUMQueryGuestSysReg(pVCpu, idSysReg, &u64Val); 1733 rcStrict = CPUMQueryGuestSysReg(pVCpu, idSysReg, &u64Val); 1751 1734 Log4(("SysInsnExit/%u: %08RX64: READ %u:%u:%u:%u:%u -> %#RX64 rcStrict=%Rrc\n", 1752 1735 pVCpu->idCpu, pVCpu->cpum.GstCtx.Pc.u64, uOp0, uOp1, uCRn, uCRm, uOp2, u64Val, … … 1757 1740 else 1758 1741 { 1759 if ( idSysReg != ARMV8_AARCH64_SYSREG_PMCNTENCLR_EL0 1760 && idSysReg != ARMV8_AARCH64_SYSREG_PMOVSCLR_EL0 1761 && idSysReg != ARMV8_AARCH64_SYSREG_PMINTENCLR_EL1 1762 && idSysReg != ARMV8_AARCH64_SYSREG_PMCR_EL0 1763 && idSysReg != ARMV8_AARCH64_SYSREG_PMCCFILTR_EL0 1764 && idSysReg != ARMV8_AARCH64_SYSREG_PMCNTENSET_EL0 1765 && idSysReg != ARMV8_AARCH64_SYSREG_PMUSERENR_EL0 1766 && idSysReg != ARMV8_AARCH64_SYSREG_PMCCNTR_EL0) 1767 { 1768 u64Val = nemR3DarwinGetGReg(pVCpu, uReg); 1769 rcStrict = CPUMSetGuestSysReg(pVCpu, idSysReg, u64Val); 1770 } 1742 u64Val = nemR3DarwinGetGReg(pVCpu, uReg); 1743 rcStrict = CPUMSetGuestSysReg(pVCpu, idSysReg, u64Val); 1771 1744 Log4(("SysInsnExit/%u: %08RX64: WRITE %u:%u:%u:%u:%u %#RX64 -> rcStrict=%Rrc\n", 1772 1745 pVCpu->idCpu, pVCpu->cpum.GstCtx.Pc.u64, uOp0, uOp1, uCRn, uCRm, uOp2, u64Val, -
trunk/src/VBox/VMM/VMMR3/PDMDevice.cpp
r106061 r106476 36 36 #if defined(VBOX_VMM_TARGET_ARMV8) 37 37 # include <VBox/vmm/gic.h> 38 # include <VBox/vmm/pmu.h> 38 39 #else 39 40 # include <VBox/vmm/apic.h> … … 704 705 */ 705 706 rc = pdmR3DevReg_Register(&RegCB.Core, &g_DeviceGICNem); 707 AssertRCReturn(rc, rc); 708 709 /* 710 * Register the internal VMM PMU device. 711 */ 712 rc = pdmR3DevReg_Register(&RegCB.Core, &g_DevicePMU); 706 713 AssertRCReturn(rc, rc); 707 714 #else
Note:
See TracChangeset
for help on using the changeset viewer.