summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm/miscregs.cc53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/arch/arm/miscregs.cc b/src/arch/arm/miscregs.cc
index e14be7fd4..81ce43e29 100644
--- a/src/arch/arm/miscregs.cc
+++ b/src/arch/arm/miscregs.cc
@@ -2387,6 +2387,11 @@ ISA::initializeMiscRegMetadata()
if (completed)
return;
+ // This boolean variable specifies if the system is running in aarch32 at
+ // EL3 (aarch32EL3 = true). It is false if EL3 is not implemented, or it
+ // is running in aarch64 (aarch32EL3 = false)
+ bool aarch32EL3 = haveSecurity && !highestELIs64;
+
/**
* Some registers alias with others, and therefore need to be translated.
* When two mapping registers are given, they are the 32b lower and
@@ -2449,6 +2454,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_PRRR_MAIR0_NS)
.mutex()
+ .privSecure(!aarch32EL3)
.bankedChild();
InitReg(MISCREG_PRRR_MAIR0_S)
.mutex()
@@ -2458,6 +2464,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_NMRR_MAIR1_NS)
.mutex()
+ .privSecure(!aarch32EL3)
.bankedChild();
InitReg(MISCREG_NMRR_MAIR1_S)
.mutex()
@@ -2669,6 +2676,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_CSSELR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_CSSELR_S)
.bankedChild()
@@ -2681,6 +2689,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_SCTLR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_SCTLR_S)
.bankedChild()
@@ -2689,6 +2698,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_ACTLR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_ACTLR_S)
.bankedChild()
@@ -2723,6 +2733,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TTBR0_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_TTBR0_S)
.bankedChild()
@@ -2731,6 +2742,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TTBR1_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_TTBR1_S)
.bankedChild()
@@ -2739,6 +2751,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TTBCR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_TTBCR_S)
.bankedChild()
@@ -2751,6 +2764,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_DACR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_DACR_S)
.bankedChild()
@@ -2759,6 +2773,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_DFSR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_DFSR_S)
.bankedChild()
@@ -2767,6 +2782,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_IFSR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_IFSR_S)
.bankedChild()
@@ -2779,6 +2795,7 @@ ISA::initializeMiscRegMetadata()
.unimplemented()
.warnNotFail()
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_ADFSR_S)
.unimplemented()
@@ -2793,6 +2810,7 @@ ISA::initializeMiscRegMetadata()
.unimplemented()
.warnNotFail()
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_AIFSR_S)
.unimplemented()
@@ -2809,6 +2827,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_DFAR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_DFAR_S)
.bankedChild()
@@ -2817,6 +2836,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_IFAR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_IFAR_S)
.bankedChild()
@@ -2839,6 +2859,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_PAR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_PAR_S)
.bankedChild()
@@ -3011,6 +3032,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_PRRR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_PRRR_S)
.bankedChild()
@@ -3019,6 +3041,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_MAIR0_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_MAIR0_S)
.bankedChild()
@@ -3027,6 +3050,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_NMRR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_NMRR_S)
.bankedChild()
@@ -3035,6 +3059,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_MAIR1_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_MAIR1_S)
.bankedChild()
@@ -3043,6 +3068,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_AMAIR0_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_AMAIR0_S)
.bankedChild()
@@ -3051,6 +3077,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_AMAIR1_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_AMAIR1_S)
.bankedChild()
@@ -3071,6 +3098,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_VBAR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_VBAR_S)
.bankedChild()
@@ -3092,6 +3120,7 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_CONTEXTIDR_NS)
.bankedChild()
+ .privSecure(!aarch32EL3)
.nonSecure().exceptUserMode();
InitReg(MISCREG_CONTEXTIDR_S)
.bankedChild()
@@ -3100,7 +3129,9 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TPIDRURW_NS)
.bankedChild()
- .allPrivileges().monSecure(0).privSecure(0);
+ .allPrivileges()
+ .privSecure(!aarch32EL3)
+ .monSecure(0);
InitReg(MISCREG_TPIDRURW_S)
.bankedChild()
.secure();
@@ -3108,7 +3139,10 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TPIDRURO_NS)
.bankedChild()
- .allPrivileges().secure(0).userNonSecureWrite(0).userSecureRead(1);
+ .allPrivileges()
+ .userNonSecureWrite(0).userSecureRead(1)
+ .privSecure(!aarch32EL3)
+ .monSecure(0);
InitReg(MISCREG_TPIDRURO_S)
.bankedChild()
.secure().userSecureWrite(0);
@@ -3116,7 +3150,8 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_TPIDRPRW_NS)
.bankedChild()
- .nonSecure().exceptUserMode();
+ .nonSecure().exceptUserMode()
+ .privSecure(!aarch32EL3);
InitReg(MISCREG_TPIDRPRW_S)
.bankedChild()
.secure().exceptUserMode();
@@ -3131,7 +3166,9 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_CNTP_TVAL_NS)
.bankedChild()
- .allPrivileges().monSecure(0).privSecure(0);
+ .allPrivileges()
+ .privSecure(!aarch32EL3)
+ .monSecure(0);
InitReg(MISCREG_CNTP_TVAL_S)
.unimplemented()
.bankedChild()
@@ -3140,7 +3177,9 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_CNTP_CTL_NS)
.bankedChild()
- .allPrivileges().monSecure(0).privSecure(0);
+ .allPrivileges()
+ .privSecure(!aarch32EL3)
+ .monSecure(0);
InitReg(MISCREG_CNTP_CTL_S)
.unimplemented()
.bankedChild()
@@ -3207,7 +3246,9 @@ ISA::initializeMiscRegMetadata()
.banked();
InitReg(MISCREG_CNTP_CVAL_NS)
.bankedChild()
- .allPrivileges().monSecure(0).privSecure(0);
+ .allPrivileges()
+ .privSecure(!aarch32EL3)
+ .monSecure(0);
InitReg(MISCREG_CNTP_CVAL_S)
.unimplemented()
.bankedChild()