Changeset 108758 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 26, 2025 4:05:20 PM (6 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168185
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/CPUM-armv8.cpp
r107650 r108758 416 416 }; 417 417 418 /** 419 * Additional fields for v2 420 */ 421 static const SSMFIELD g_aCpumCtxFieldsV2[] = 422 { 423 SSMFIELD_ENTRY( CPUMCTX, Actlr.u64), 424 SSMFIELD_ENTRY_TERM() 425 }; 426 418 427 419 428 /** … … 641 650 642 651 SSMR3PutStructEx(pSSM, pGstCtx, sizeof(*pGstCtx), 0, g_aCpumCtxFields, NULL); 652 SSMR3PutStructEx(pSSM, pGstCtx, sizeof(*pGstCtx), 0, g_aCpumCtxFieldsV2, NULL); 643 653 644 654 SSMR3PutU32(pSSM, pVCpu->cpum.s.fChanged); … … 669 679 * Validate version. 670 680 */ 671 if (uVersion != CPUM_SAVED_STATE_VERSION) 681 if ( uVersion != CPUM_SAVED_STATE_VERSION 682 && uVersion != CPUM_SAVED_STATE_VERSION_ARMV8_V1) 672 683 { 673 684 AssertMsgFailed(("cpumR3LoadExec: Invalid version uVersion=%d!\n", uVersion)); … … 695 706 rc = SSMR3GetStructEx(pSSM, pGstCtx, sizeof(*pGstCtx), 0, g_aCpumCtxFields, NULL); 696 707 AssertRCReturn(rc, rc); 708 709 if (uVersion == CPUM_SAVED_STATE_VERSION_ARMV8_V2) 710 { 711 rc = SSMR3GetStructEx(pSSM, pGstCtx, sizeof(*pGstCtx), 0, g_aCpumCtxFieldsV2, NULL); 712 AssertRCReturn(rc, rc); 713 } 697 714 698 715 /* -
trunk/src/VBox/VMM/VMMR3/CPUMDbg-armv8.cpp
r107113 r108758 313 313 CPU_REG_RW_AS("elr_el1", ELR_EL1, U64, Elr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), 314 314 CPU_REG_RW_AS("vbar_el1", VBAR_EL1, U64, VBar, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), 315 CPU_REG_RW_AS("actlr_el1", ACTLR_EL1, U64, Actlr, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), 315 316 316 317 CPU_REG_RW_AS("cnthctl_el2", CNTHCTL_EL2, U64, CntHCtlEl2, cpumR3RegGet_Generic, cpumR3RegSet_Generic, NULL, NULL ), -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin-armv8.cpp
r108414 r108758 142 142 HV_GIC_INT_PERFORMANCE_MONITOR = 30 143 143 } hv_gic_intid_t; 144 145 # define HV_SYS_REG_ACTLR_EL1 (hv_sys_reg_t)0xc081 144 146 145 147 #else … … 533 535 { HV_SYS_REG_MDCCINT_EL1, CPUMCTX_EXTRN_SYSREG_MISC, RT_UOFFSETOF(CPUMCTX, MDccInt.u64) } 534 536 537 }; 538 /** Additional System registers to sync when on at least macOS Sequioa 15.0. */ 539 static const struct 540 { 541 hv_sys_reg_t enmHvReg; 542 uint32_t fCpumExtrn; 543 uint32_t offCpumCtx; 544 } s_aCpumSysRegsSequioa[] = 545 { 546 { HV_SYS_REG_ACTLR_EL1, CPUMCTX_EXTRN_SYSREG_MISC, RT_UOFFSETOF(CPUMCTX, Actlr.u64) } 535 547 }; 536 548 /** EL2 support system registers. */ … … 905 917 "sctlr_el1=%016VR{sctlr_el1} tcr_el1=%016VR{tcr_el1}\n" 906 918 "ttbr0_el1=%016VR{ttbr0_el1} ttbr1_el1=%016VR{ttbr1_el1}\n" 907 "vbar_el1=%016VR{vbar_el1} \n"919 "vbar_el1=%016VR{vbar_el1} actlr_el1=%016VR{actlr_el1}\n" 908 920 ); 909 921 if (pVM->nem.s.fEl2Enabled) … … 998 1010 } 999 1011 1012 if ( pVM->nem.s.fMacOsSequia 1013 && (fWhat & CPUMCTX_EXTRN_SYSREG_MISC)) 1014 { 1015 for (uint32_t i = 0; i < RT_ELEMENTS(s_aCpumSysRegsSequioa); i++) 1016 { 1017 uint64_t *pu64 = (uint64_t *)((uint8_t *)&pVCpu->cpum.GstCtx + s_aCpumSysRegsSequioa[i].offCpumCtx); 1018 hrc |= hv_vcpu_get_sys_reg(pVCpu->nem.s.hVCpu, s_aCpumSysRegsSequioa[i].enmHvReg, pu64); 1019 1020 /* Make sure only the TOS bit is kept as this seems to return 0x0000000000000c00 which fails during writes. */ 1021 /** @todo r=aeichner Need to find out where the value comes from, some bits were reverse engineered here 1022 * https://github.com/AsahiLinux/docs/blob/main/docs/hw/cpu/system-registers.md#actlr_el1-arm-standard-not-standard 1023 * But the ones being set are not documented. Maybe they are always set by the Hypervisor... 1024 */ 1025 if (s_aCpumSysRegsSequioa[i].enmHvReg == HV_SYS_REG_ACTLR_EL1) 1026 *pu64 &= RT_BIT_64(1); 1027 } 1028 } 1029 1000 1030 if ( hrc == HV_SUCCESS 1001 1031 && (fWhat & CPUMCTX_EXTRN_SYSREG_EL2) … … 1098 1128 hrc |= hv_vcpu_set_sys_reg(pVCpu->nem.s.hVCpu, s_aCpumSysRegs[i].enmHvReg, *pu64); 1099 1129 } 1130 } 1131 } 1132 1133 if ( pVM->nem.s.fMacOsSequia 1134 && !(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_SYSREG_MISC)) 1135 { 1136 for (uint32_t i = 0; i < RT_ELEMENTS(s_aCpumSysRegsSequioa); i++) 1137 { 1138 uint64_t *pu64 = (uint64_t *)((uint8_t *)&pVCpu->cpum.GstCtx + s_aCpumSysRegsSequioa[i].offCpumCtx); 1139 hrc |= hv_vcpu_set_sys_reg(pVCpu->nem.s.hVCpu, s_aCpumSysRegsSequioa[i].enmHvReg, *pu64); 1140 Assert(hrc == HV_SUCCESS); 1100 1141 } 1101 1142 } … … 1288 1329 && hv_vm_config_get_el2_supported) 1289 1330 { 1331 pVM->nem.s.fMacOsSequia = true; /* hv_vm_config_get_el2_supported is only available on Sequioa 15.0. */ 1332 1290 1333 hVmCfg = hv_vm_config_create(); 1291 1334 -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win-armv8.cpp
r108757 r108758 1412 1412 ADD_SYSREG64(WHvArm64RegisterTpidrEl0, pVCpu->cpum.GstCtx.aTpIdr[0]); 1413 1413 ADD_SYSREG64(WHvArm64RegisterTpidrEl1, pVCpu->cpum.GstCtx.aTpIdr[1]); 1414 ADD_SYSREG64(WHvArm64RegisterActlrEl1, pVCpu->cpum.GstCtx.Actlr); 1414 1415 } 1415 1416 … … 1601 1602 aenmNames[iReg++] = WHvArm64RegisterTpidrEl0; 1602 1603 aenmNames[iReg++] = WHvArm64RegisterTpidrEl1; 1604 aenmNames[iReg++] = WHvArm64RegisterActlrEl1; 1603 1605 } 1604 1606 … … 1798 1800 GET_SYSREG64(pVCpu->cpum.GstCtx.aTpIdr[0], WHvArm64RegisterTpidrEl0); 1799 1801 GET_SYSREG64(pVCpu->cpum.GstCtx.aTpIdr[1], WHvArm64RegisterTpidrEl1); 1802 GET_SYSREG64(pVCpu->cpum.GstCtx.Actlr, WHvArm64RegisterActlrEl1); 1800 1803 } 1801 1804 -
trunk/src/VBox/VMM/include/CPUMInternal.h
r107854 r108758 116 116 # define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_HWVIRT_VMX_4 117 117 #elif defined(VBOX_VMM_TARGET_ARMV8) 118 # define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_ARMV8_V 1118 # define CPUM_SAVED_STATE_VERSION CPUM_SAVED_STATE_VERSION_ARMV8_V2 119 119 #endif 120 120 … … 163 163 164 164 #if defined(VBOX_VMM_TARGET_ARMV8) 165 /** Adds ACTLR_EL1 to the ARMv8 saved state. */ 166 # define CPUM_SAVED_STATE_VERSION_ARMV8_V2 2 165 167 /** The initial ARMv8 saved state. */ 166 168 # define CPUM_SAVED_STATE_VERSION_ARMV8_V1 1 -
trunk/src/VBox/VMM/include/NEMInternal.h
r108434 r108758 337 337 /** Set if EL2 is enabled. */ 338 338 bool fEl2Enabled : 1; 339 /** Set if we are running at least on macOS Sequioa 15.0. */ 340 bool fMacOsSequia : 1; 339 341 # ifdef VBOX_VMM_TARGET_ARMV8 340 342 /** @name vTimer related state.
Note:
See TracChangeset
for help on using the changeset viewer.