Provides top level control of the system, including its memory system, at EL2.
When the Effective value of HCR_EL2.{E2H, TGE} is {1, 1}, these controls also apply to execution at EL0.
This register is present only when FEAT_SCTLR2 is implemented. Otherwise, direct accesses to SCTLR2_EL2 are UNDEFINED.
This register has no effect if EL2 is not enabled in the current Security state.
SCTLR2_EL2 is a 64-bit register.
63 | 62 | 61 | 60 | 59 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 |
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RES0 | |||||||||||||||||||||||||||||||
RES0 | CPTM0 | CPTM | CPTA0 | CPTA | EnPACM0 | EnPACM | EnIDCP128 | EASE | EnANERR | EnADERR | NMEA | EMEC | RES0 |
Reserved, RES0.
This field controls unprivileged Checked Pointer Arithmetic for Multiplication.
CPTM0 | Meaning |
---|---|
0b0 |
Pointer Arithmetic for Multiplication is not checked. |
0b1 |
Pointer Arithmetic for Multiplication is checked. |
If HCR_EL2.TGE == 0b0, the field is IGNORED for all purposes other than direct reads and writes of the register.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
If the Effective value of SCTLR2_EL2.CPTA0 is 0, then the Effective value of this field is 0.
The reset behavior of this field is:
Reserved, RES0.
This field controls Checked Pointer Arithmetic for Multiplication at EL2.
CPTM | Meaning |
---|---|
0b0 |
Pointer Arithmetic for Multiplication is not checked. |
0b1 |
Pointer Arithmetic for Multiplication is checked. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
If the Effective value of SCTLR2_EL2.CPTA is 0, then the Effective value of this field is 0.
The reset behavior of this field is:
Reserved, RES0.
This field controls unprivileged Checked Pointer Arithmetic for Addition.
CPTA0 | Meaning |
---|---|
0b0 |
Pointer Arithmetic for Addition is not checked. |
0b1 |
Pointer Arithmetic for Addition is checked. |
If HCR_EL2.TGE == 0b0, the field is IGNORED for all purposes other than direct reads and writes of the register.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
This field controls Checked Pointer Arithmetic for Addition at EL2.
CPTA | Meaning |
---|---|
0b0 |
Pointer Arithmetic for Addition is not checked. |
0b1 |
Pointer Arithmetic for Addition is checked. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
PACM Enable at EL0. Controls the effect of a PACM instruction at EL0.
EnPACM0 | Meaning |
---|---|
0b0 |
The effects of PACM are disabled at EL0. |
0b1 |
A PACM instruction at EL0 causes PSTATE.PACM to be set to 0b1. |
If HCR_EL2.TGE == 0b0, the field is IGNORED for all purposes other than direct reads and writes of the register.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
PACM Enable at EL2. Controls the effect of a PACM instruction at EL2.
EnPACM | Meaning |
---|---|
0b0 |
The effects of PACM are disabled at EL2. |
0b1 |
A PACM instruction at EL2 causes PSTATE.PACM to be set to 0b1. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
Enables access to IMPLEMENTATION DEFINED 128-bit System registers.
EnIDCP128 | Meaning |
---|---|
0b0 | Accesses at EL0 to IMPLEMENTATION DEFINED 128-bit System registers are trapped to EL2 using an ESR_EL2.EC value of 0x14, unless the access generates a higher priority exception. Disables the functionality of the 128-bit IMPLEMENTATION DEFINED System registers that are accessible at EL2. |
0b1 |
No accesses are trapped by this control. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
External Aborts to SError exception vector.
EASE | Meaning |
---|---|
0b0 |
Synchronous External abort exceptions taken to EL2 are taken to the appropriate synchronous exception vector offset from VBAR_EL2. |
0b1 |
Synchronous External abort exceptions taken to EL2 are taken to the appropriate SError exception vector offset from VBAR_EL2. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
Enable Asynchronous Normal Read Error.
EnANERR | Meaning |
---|---|
0b0 |
External aborts on Normal memory reads generate synchronous Data Abort exceptions in the EL2 and EL2&0 translation regimes. |
0b1 |
External aborts on Normal memory reads generate synchronous Data Abort or asynchronous SError exceptions in the EL2 and EL2&0 translation regimes. |
It is implementation-specific whether this field applies to memory reads generated by each of the following:
Setting this field to 0 does not guarantee that the PE is able to take a synchronous Data Abort exception for an External abort on a Normal memory read in every case. There might be implementation-specific circumstances when an error on a load cannot be taken synchronously. These circumstances should be rare enough that treating such occurrences as fatal does not cause a significant increase in failure rate.
Setting this field to 0 might have a performance impact for Normal memory reads.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
Otherwise, this field is ignored by the PE and treated as one when all of the following are true:
The reset behavior of this field is:
Reserved, RES0.
Enable Asynchronous Device Read Error.
EnADERR | Meaning |
---|---|
0b0 |
External aborts on Device memory reads generate synchronous Data Abort exceptions in the EL2 and EL2&0 translation regimes. |
0b1 |
External aborts on Device memory reads generate synchronous Data Abort or asynchronous SError exceptions in the EL2 and EL2&0 translation regimes. |
It is implementation-specific whether this field applies to memory reads generated by each of the following:
Setting this field to 0 does not guarantee that the PE is able to take a synchronous Data Abort exception for an External abort on a Device memory read in every case. There might be implementation-specific circumstances when an error on a load cannot be taken synchronously. These circumstances should be rare enough that treating such occurrences as fatal does not cause a significant increase in failure rate.
Setting this field to 0 might have a performance impact for Device memory reads.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
Otherwise, this field is ignored by the PE and treated as one when all of the following are true:
The reset behavior of this field is:
Reserved, RES0.
Non-maskable External Aborts. Controls whether PSTATE.A masks SError exceptions at EL2.
NMEA | Meaning |
---|---|
0b0 |
SError exceptions are not taken at EL2 if PSTATE.A == 1, unless routed to a higher Exception level. |
0b1 |
SError exceptions are taken at EL2 regardless of the value of PSTATE.A, unless routed to a higher Exception level. |
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
Enables MEC. When enabled, memory accesses to the Realm physical address space are associated with a MECID.
EMEC | Meaning |
---|---|
0b0 |
MEC is not enabled for the Realm physical address space. |
0b1 |
MEC is enabled for the Realm physical address space. |
This bit is permitted to be cached in a TLB.
This field is ignored by the PE and treated as zero when EL3 is implemented and SCR_EL3.SCTLR2En == 0.
The reset behavior of this field is:
Reserved, RES0.
Reserved, RES0.
When the Effective value of HCR_EL2.E2H is 1, without explicit synchronization, accesses from EL2 using the register name SCTLR2_EL2 or SCTLR2_EL1 are not guaranteed to be ordered with respect to accesses using the other register name.
Accesses to this register use the following encodings in the System register encoding space:
MRS <Xt>, SCTLR2_EL2
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b100 | 0b0001 | 0b0000 | 0b011 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64.SystemAccessTrap(EL2, 0x18); else UNDEFINED; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); else X[t, 64] = SCTLR2_EL2; elsif PSTATE.EL == EL3 then X[t, 64] = SCTLR2_EL2;
MSR SCTLR2_EL2, <Xt>
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b100 | 0b0001 | 0b0000 | 0b011 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64.SystemAccessTrap(EL2, 0x18); else UNDEFINED; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); else SCTLR2_EL2 = X[t, 64]; elsif PSTATE.EL == EL3 then SCTLR2_EL2 = X[t, 64];
MRS <Xt>, SCTLR2_EL1
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b000 | 0b0001 | 0b0000 | 0b011 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif EL2Enabled() && HCR_EL2.TRVM == '1' then AArch64.SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && IsFeatureImplemented(FEAT_FGT) && (!HaveEL(EL3) || SCR_EL3.FGTEn == '1') && HFGRTR_EL2.SCTLR_EL1 == '1' then AArch64.SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && (!IsHCRXEL2Enabled() || HCRX_EL2.SCTLR2En == '0') then AArch64.SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); elsif EffectiveHCR_EL2_NVx() == '111' then X[t, 64] = NVMem[0x278]; else X[t, 64] = SCTLR2_EL1; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); elsif ELIsInHost(EL2) then X[t, 64] = SCTLR2_EL2; else X[t, 64] = SCTLR2_EL1; elsif PSTATE.EL == EL3 then X[t, 64] = SCTLR2_EL1;
MSR SCTLR2_EL1, <Xt>
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b000 | 0b0001 | 0b0000 | 0b011 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif EL2Enabled() && HCR_EL2.TVM == '1' then AArch64.SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && IsFeatureImplemented(FEAT_FGT) && (!HaveEL(EL3) || SCR_EL3.FGTEn == '1') && HFGWTR_EL2.SCTLR_EL1 == '1' then AArch64.SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && (!IsHCRXEL2Enabled() || HCRX_EL2.SCTLR2En == '0') then AArch64.SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); elsif EffectiveHCR_EL2_NVx() == '111' then NVMem[0x278] = X[t, 64]; else SCTLR2_EL1 = X[t, 64]; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.SCTLR2En == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.SCTLR2En == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); elsif ELIsInHost(EL2) then SCTLR2_EL2 = X[t, 64]; else SCTLR2_EL1 = X[t, 64]; elsif PSTATE.EL == EL3 then SCTLR2_EL1 = X[t, 64];