arch-arm: Fix KVM Failed to set register (0x603000000013808c) (#486)

Some debug registers were incorrectly tagged
(e.g. as being writeable). This was causing a bug in some gem5-KVM runs
where gem5 was trying to initialize the state of those registers
(OSLSR_EL1) [1] but KVM was returning an error (as the registers were
RO).

[1]: https://github.com/gem5/gem5/blob/stable/\
    src/arch/arm/kvm/armv8_cpu.cc#L408
This commit is contained in:
Giacomo Travaglini
2023-10-20 19:30:19 +01:00
committed by GitHub
parent 8b78e87f1b
commit 6ddf8c94ee

View File

@@ -3916,18 +3916,18 @@ ISA::initializeMiscRegMetadata()
InitReg(MISCREG_MDCCINT_EL1)
.fault(EL1, faultMdccsrEL1)
.fault(EL2, faultMdccsrEL2)
.allPrivileges();
.allPrivileges().exceptUserMode();
InitReg(MISCREG_OSDTRRX_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGDTRRXext);
InitReg(MISCREG_MDSCR_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGDSCRext);
InitReg(MISCREG_OSDTRTX_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGDTRTXext);
InitReg(MISCREG_OSECCR_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGOSECCR);
InitReg(MISCREG_DBGBVR0_EL1)
.allPrivileges().exceptUserMode()
@@ -4266,28 +4266,28 @@ ISA::initializeMiscRegMetadata()
.fault(EL2, faultDebugEL2)
.mapsTo(MISCREG_DBGVCR);
InitReg(MISCREG_MDRAR_EL1)
.allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
.allPrivileges().exceptUserMode().writes(0)
.mapsTo(MISCREG_DBGDRAR);
InitReg(MISCREG_OSLAR_EL1)
.allPrivileges().monSecureRead(0).monNonSecureRead(0)
.allPrivileges().exceptUserMode().reads(0)
.mapsTo(MISCREG_DBGOSLAR);
InitReg(MISCREG_OSLSR_EL1)
.allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
.allPrivileges().exceptUserMode().writes(0)
.mapsTo(MISCREG_DBGOSLSR);
InitReg(MISCREG_OSDLR_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGOSDLR);
InitReg(MISCREG_DBGPRCR_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGPRCR);
InitReg(MISCREG_DBGCLAIMSET_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGCLAIMSET);
InitReg(MISCREG_DBGCLAIMCLR_EL1)
.allPrivileges()
.allPrivileges().exceptUserMode()
.mapsTo(MISCREG_DBGCLAIMCLR);
InitReg(MISCREG_DBGAUTHSTATUS_EL1)
.allPrivileges().monSecureWrite(0).monNonSecureWrite(0)
.allPrivileges().exceptUserMode().writes(0)
.mapsTo(MISCREG_DBGAUTHSTATUS);
InitReg(MISCREG_TEECR32_EL1);
InitReg(MISCREG_TEEHBR32_EL1);