- Timestamp:
- Apr 2, 2025 5:36:47 AM (13 days ago)
- svn:sync-xref-src-repo-rev:
- 168268
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId-armv8.cpp
r108405 r108822 38 38 #include "CPUMInternal-armv8.h" 39 39 #include <VBox/vmm/vmcc.h> 40 #include <VBox/gic.h> 40 41 41 42 #include <VBox/err.h> … … 108 109 * @param pCpum The CPUM instance data. 109 110 * @param pConfig The CPUID configuration we've read from CFGM. 110 */ 111 static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig) 111 * @param pCpumCfg The CPUM CFGM config. 112 */ 113 static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig, PCFGMNODE pCpumCfg) 112 114 { 113 115 #define PORTABLE_CLEAR_BITS_WHEN(Lvl, a_pLeafReg, FeatNm, fMask, uValue) \ … … 168 170 /* Write ID_AA64ISAR0_EL1 register back. */ 169 171 pVM->cpum.s.GuestIdRegs.u64RegIdAa64Isar0El1 = u64IdReg; 172 173 /* ID_AA64PFR0_EL1 */ 174 u64IdReg = pVM->cpum.s.GuestIdRegs.u64RegIdAa64Pfr0El1; 175 176 uint8_t uArchRev; 177 int rc = CFGMR3QueryU8(pCpumCfg, "GicArchRev", &uArchRev); 178 AssertRCReturn(rc, rc); 179 if (uArchRev == GIC_DIST_REG_PIDR2_ARCHREV_GICV3) 180 u64IdReg = RT_BF_SET(u64IdReg, ARMV8_ID_AA64PFR0_EL1_GIC, ARMV8_ID_AA64PFR0_EL1_GIC_V3_V4); /* 3.0 */ 181 else if (uArchRev == GIC_DIST_REG_PIDR2_ARCHREV_GICV4) 182 { 183 uint8_t uArchRevMinor = 0; 184 rc = CFGMR3QueryU8Def(pCpumCfg, "GicArchRevMinor", &uArchRevMinor, 0); 185 u64IdReg = uArchRevMinor == 0 186 ? RT_BF_SET(u64IdReg, ARMV8_ID_AA64PFR0_EL1_GIC, ARMV8_ID_AA64PFR0_EL1_GIC_V3_V4) /* 4.0 */ 187 : RT_BF_SET(u64IdReg, ARMV8_ID_AA64PFR0_EL1_GIC, ARMV8_ID_AA64PFR0_EL1_GIC_V4_1); /* 4.1 */ 188 } 189 else 190 Assert(RT_BF_GET(u64IdReg, ARMV8_ID_AA64PFR0_EL1_GIC) == ARMV8_ID_AA64PFR0_EL1_GIC_NOT_IMPL); 191 192 /* Write ID_AA64PFR0_EL1 register back. */ 193 pVM->cpum.s.GuestIdRegs.u64RegIdAa64Pfr0El1 = u64IdReg; 170 194 171 195 /** @todo Other ID and feature registers. */ … … 424 448 */ 425 449 if (RT_SUCCESS(rc)) 426 rc = cpumR3CpuIdSanitize(pVM, pCpum, &Config );450 rc = cpumR3CpuIdSanitize(pVM, pCpum, &Config, pCpumCfg); 427 451 428 452 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.