Provides configuration controls for virtualization, including defining whether various operations are trapped to EL2.
This register is present only when FEAT_HCX is implemented. Otherwise, direct accesses to HCRX_EL2 are UNDEFINED.
If EL2 is not implemented, this register is RES0 from EL3.
The bits in this register behave as if they are 0 for all purposes other than direct reads of the register if:
HCRX_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 | PACMEn | EnFPM | GCSEn | EnIDCP128 | EnSDERR | TMEA | EnSNERR | D128En | PTTWI | SCTLR2En | TCR2En | RES0 | MSCEn | MCE2 | CMOW | VFNMI | VINMI | TALLINT | SMPME | FGTnXS | FnXS | EnASR | EnALS | EnAS0 |
Reserved, RES0.
PACM Enable. Controls the effect of a PACM instruction at EL1 and EL0.
PACMEn | Meaning |
---|---|
0b0 |
The effects of PACM are disabled at EL1 and EL0, regardless of the value in any other controls. |
0b1 |
This control does not disable the effect of PACM at EL1 and EL0. |
The Effective value of this field is 1 when EL2 is disabled in the current Security state or the Effective value of HCR_EL2.{E2H, TGE} is {1, 1}.
The Effective value of this field is 0 when EL2 is enabled in the current Security state and the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1} and SCR_EL3.HXEn == 0.
The reset behavior of this field is:
Reserved, RES0.
Enables the following accesses to FPMR from EL0 and EL1 to EL2:
EnFPM | Meaning |
---|---|
0b0 |
EL1 and EL0 accesses to FPMR are disabled and trapped to EL2. |
0b1 |
This control does not cause any instructions to be trapped. |
Traps are not taken if there is a higher priority exception generated by the access.
The Effective value of this field is 1 when any of the following are true:
EL2 is not implemented or is disabled in the current Security state.
The Effective value of HCR_EL2.{E2H, TGE} is {1, 1}.
The Effective value of this field is 0 when all of the following are true:
EL3 is implemented and SCR_EL3.HXEn is 0.
EL2 is implemented and enabled in the current Security state.
The Effective value of HCR_EL2.{E2H, TGE} is not {1, 1}.
The reset behavior of this field is:
Reserved, RES0.
Guarded Control Stack enable. Controls Guarded Control Stack behavior at EL1 and EL0.
GCSEn | Meaning |
---|---|
0b0 |
The Guarded Control Stack is disabled at EL1 and EL0. |
0b1 |
Guarded Control Stack behavior at EL1 and EL0 is not affected by mechanism. |
This field is ignored by the PE and treated as 1 when EL2 is disabled in the current Security state or the Effective value of HCR_EL2.{E2H, TGE} is {1, 1}.
This field is ignored by the PE and treated as 0 when EL2 is enabled in the current Security state and the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1} and SCR_EL3.HXEn == 0.
The reset behavior of this field is:
Reserved, RES0.
Enables access to IMPLEMENTATION DEFINED 128-bit System registers.
EnIDCP128 | Meaning |
---|---|
0b0 | If EL2 is implemented and enabled in the current Security state, accesses at EL1, 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 1 when EL2 is disabled in the current Security state or the Effective value of HCR_EL2.{E2H, TGE} is {1, 1}.
This field is ignored by the PE and treated as 0 when EL2 is enabled in the current Security state and the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1} and SCR_EL3.HXEn == 0.
The reset behavior of this field is:
Reserved, RES0.
Enable Synchronous Device Read Error. Override SCTLR2_EL1.EnADERR.
EnSDERR | Meaning |
---|---|
0b0 |
This field has no effect on External aborts on Device memory reads in the EL1&0 translation regime. |
0b1 |
External abort on Device memory reads generate synchronous Data Abort exceptions in the EL1&0 translation regime. |
It is implementation-specific whether this field applies to memory reads generated by each of the following:
Setting this field to 1 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 1 might have a performance impact for Device memory reads.
This field is ignored by the PE and treated as 0 when any of the following are true:
The reset behavior of this field is:
Reserved, RES0.
Trap Masked External Aborts. Controls whether a masked error exception at a lower Exception level is taken to EL2.
TMEA | Meaning |
---|---|
0b0 | Synchronous External abort exceptions, physical SError exceptions, and delegated SError exceptions at EL1 and EL0 are unaffected by this mechanism. That is, these exceptions are not taken to EL2 unless routed to EL2 by another control. Virtual SError exceptions are not enabled by this mechanism. |
0b1 | When executing at Exception levels below EL2, if EL2 is enabled in the current Security state, then all of the following apply:
|
This field is ignored by the PE and treated as 0 when any of the following are true:
Virtual SError exceptions are disabled when the Effective value of HCR_EL2.AMO is 0 and the Effective value of HCRX_EL2.TMEA is 0.
The reset behavior of this field is:
Reserved, RES0.
Enable Synchronous Normal Read Error. Override SCTLR2_EL1.EnANERR.
EnSNERR | Meaning |
---|---|
0b0 |
This field has no effect on External aborts on Normal memory reads in the EL1&0 translation regime. |
0b1 |
External abort on Normal memory reads generate synchronous Data Abort exceptions in the EL1&0 translation regime. |
It is implementation-specific whether this field applies to memory reads generated by each of the following:
Setting this field to 1 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 1 might have a performance impact for Normal memory reads.
This field is ignored by the PE and treated as 0 when any of the following are true:
The reset behavior of this field is:
Reserved, RES0.
128-bit System Register trap control. Enable access to 128-bit System Registers via MRRS, MSRR instructions.
If EL1 is using AArch64 state, accesses to the following registers are trapped to EL2 and reported using EC syndrome value 0x14:
If FEAT_THE is implemented, RCWMASK_EL1, RCWSMASK_EL1.
D128En | Meaning |
---|---|
0b0 |
EL1 accesses to the specified registers are disabled, and trapped to EL2. |
0b1 |
This control does not cause any instructions to be trapped. |
The reset behavior of this field is:
Reserved, RES0.
Permit Translation Table Walk Incoherence.
Permits RCWS instructions to generate writes that have the Reduced Coherence property.
PTTWI | Meaning |
---|---|
0b0 |
If EL2 is implemented and enabled in the current Security state, write accesses generated by RCWS at EL1&0 do not have the Reduced Coherence property. |
0b1 |
Write accesses generated by RCWS at EL1&0 have the Reduced Coherence property, if enabled by TCR2_EL1.PTTWI. |
This bit is permitted to be cached in TLB.
This bit is permitted to be implemented as a read-only bit with a fixed value of 0.
The reset behavior of this field is:
Reserved, RES0.
SCTLR2_EL1 Enable. In AArch64 state, accesses to SCTLR2_EL1 are trapped to EL2 and reported using EC syndrome value 0x18.
SCTLR2En | Meaning |
---|---|
0b0 |
Accesses to SCTLR2_EL1 at EL1 are trapped to EL2, unless the access generates a higher priority exception. The value in SCTLR2_EL1 is treated as 0. |
0b1 |
This control does not cause any instructions to be trapped. |
The reset behavior of this field is:
Reserved, RES0.
TCR2_EL1 Enable. In AArch64 state, accesses to TCR2_EL1 are trapped to EL2 and reported using EC syndrome value 0x18.
TCR2En | Meaning |
---|---|
0b0 |
Accesses to TCR2_EL1 at EL1 are trapped to EL2, unless the access generates a higher priority exception. The value in TCR2_EL1 is treated as 0. |
0b1 |
This control does not cause any instructions to be trapped. |
The reset behavior of this field is:
Reserved, RES0.
Reserved, RES0.
Memory Set and Memory Copy instructions Enable. Enables execution of the CPY*, SETG*, SETP*, SETM*, and SETE* instructions at EL1 or EL0.
MSCEn | Meaning |
---|---|
0b0 |
Execution of the Memory Copy and Memory Set instructions is UNDEFINED at EL1 or EL0. |
0b1 |
This control does not cause any instructions to be UNDEFINED. |
This bit behaves as if it is 1 if any of the following are true:
The reset behavior of this field is:
Reserved, RES0.
Controls Memory Copy and Memory Set exceptions generated as part of attempting to execute the Memory Copy and Memory Set instructions from EL1.
MCE2 | Meaning |
---|---|
0b0 |
Memory Copy and Memory Set exceptions generated from EL1 are taken to EL1. |
0b1 |
Memory Copy and Memory Set exceptions generated from EL1 are taken to EL2. |
When the Effective value of HCR_EL2.{E2H, TGE} is {1, 1}, this control does not affect any exceptions due to the higher priority SCTLR_EL2.MSCEn control.
The reset behavior of this field is:
Reserved, RES0.
Controls cache maintenance instruction permission for the following instructions executed at EL1 or EL0.
CMOW | Meaning |
---|---|
0b0 |
These instructions executed at EL1 or EL0 with stage 2 read permission, but without stage 2 write permission do not generate a stage 2 permission fault. |
0b1 |
These instructions executed at EL1 or EL0, if enabled as a result of SCTLR_EL1.UCI==1, with stage 2 read permission, but without stage 2 write permission generate a stage 2 permission fault. |
For this control, stage 2 has write permission if S2AP[1] is 1 or DBM is 1 in the stage 2 descriptor. The instructions do not cause an update to the dirty state.
This bit is permitted to be cached in a TLB.
The reset behavior of this field is:
Reserved, RES0.
Virtual FIQ Interrupt with Superpriority. Enables signaling of virtual FIQ interrupts with Superpriority.
VFNMI | Meaning |
---|---|
0b0 |
When HCR_EL2.VF is 1, a signaled pending virtual FIQ interrupt does not have Superpriority. |
0b1 |
When HCR_EL2.VF is 1, a signaled pending virtual FIQ interrupt has Superpriority. |
When HCR_EL2.VF is 0, this bit has no effect.
The reset behavior of this field is:
Reserved, RES0.
Virtual IRQ Interrupt with Superpriority. Enables signaling of virtual IRQ interrupts with Superpriority.
VINMI | Meaning |
---|---|
0b0 |
When HCR_EL2.VI is 1, a signaled pending virtual IRQ interrupt does not have Superpriority. |
0b1 |
When HCR_EL2.VI is 1, a signaled pending virtual IRQ interrupt has Superpriority. |
When HCR_EL2.VI is 0, this bit has no effect.
The reset behavior of this field is:
Reserved, RES0.
Traps the following writes at EL1 using AArch64 to EL2, when EL2 is implemented and enabled:
TALLINT | Meaning |
---|---|
0b0 |
This control does not cause any instructions to be trapped. |
0b1 |
The specified MSR accesses at EL1 using AArch64 are trapped to EL2. |
The reset behavior of this field is:
Reserved, RES0.
Streaming Mode Priority Mapping Enable.
Controls mapping of the value of SMPRI_EL1.Priority for streaming execution priority at EL0 or EL1.
SMPME | Meaning |
---|---|
0b0 |
The effective priority value is taken from SMPRI_EL1.Priority. |
0b1 | The effective priority value is:
|
When SMIDR_EL1.SMPS is '0', this field is RES0.
The reset behavior of this field is:
Reserved, RES0.
Determines if the fine-grained traps in HFGITR_EL2 that apply to each of the TLBI maintenance instructions that are accessible at EL1 also apply to the corresponding TLBI maintenance instructions with the nXS qualifier.
FGTnXS | Meaning |
---|---|
0b0 |
The fine-grained trap in the HFGITR_EL2 that applies to a TLBI maintenance instruction at EL1 also applies to the corresponding TLBI instruction with the nXS qualifier at EL1. |
0b1 |
The fine-grained trap in the HFGITR_EL2 that applies to a TLBI maintenance instruction at EL1 does not apply to the corresponding TLBI instruction with the nXS qualifier at EL1. |
The reset behavior of this field is:
Reserved, RES0.
Determines the behavior of TLBI instructions affected by the XS attribute.
This control bit also determines whether an AArch64 DSB instruction behaves as a DSB instruction with an nXS qualifier when executed at EL0 and EL1.
FnXS | Meaning |
---|---|
0b0 |
This control does not have any effect on the behavior of the TLBI maintenance instructions. |
0b1 | A TLBI maintenance instruction without the nXS qualifier executed at EL1 behaves in the same way as the corresponding TLBI maintenance instruction with the nXS qualifier. An AArch64 DSB instruction executed at EL1 or EL0 behaves in the same way as the corresponding DSB instruction with the nXS qualifier executed at EL1 or EL0. |
This bit is permitted to be cached in a TLB.
The reset behavior of this field is:
Reserved, RES0.
When the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1}, traps execution of an ST64BV instruction at EL0 or EL1 to EL2.
EnASR | Meaning |
---|---|
0b0 | Execution of an ST64BV instruction at EL0 is trapped to EL2 if the execution is not trapped by SCTLR_EL1.EnASR. Execution of an ST64BV instruction at EL1 is trapped to EL2. |
0b1 |
This control does not cause any instructions to be trapped. |
A trap of an ST64BV instruction is reported using an ESR_ELx.EC value of 0x0A, with an ISS code of 0x0000000.
The reset behavior of this field is:
Reserved, RES0.
When the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1}, traps execution of an LD64B or ST64B instruction at EL0 or EL1 to EL2.
EnALS | Meaning |
---|---|
0b0 | Execution of an LD64B or ST64B instruction at EL0 is trapped to EL2 if the execution is not trapped by SCTLR_EL1.EnALS. Execution of an LD64B or ST64B instruction at EL1 is trapped to EL2. |
0b1 |
This control does not cause any instructions to be trapped. |
A trap of an LD64B or ST64B instruction is reported using an ESR_ELx.EC value of 0x0A, with an ISS code of 0x0000002.
The reset behavior of this field is:
Reserved, RES0.
When the Effective value of HCR_EL2.{E2H, TGE} is not {1, 1}, traps execution of an ST64BV0 instruction at EL0 or EL1 to EL2.
EnAS0 | Meaning |
---|---|
0b0 | Execution of an ST64BV0 instruction at EL0 is trapped to EL2 if the execution is not trapped by SCTLR_EL1.EnAS0. Execution of an ST64BV0 instruction at EL1 is trapped to EL2. |
0b1 |
This control does not cause any instructions to be trapped. |
A trap of an ST64BV0 instruction is reported using an ESR_ELx.EC value of 0x0A, with an ISS code of 0x0000001.
The reset behavior of this field is:
Reserved, RES0.
Accesses to this register use the following encodings in the System register encoding space:
MRS <Xt>, HCRX_EL2
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b100 | 0b0001 | 0b0010 | 0b010 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'1x1'} then X[t, 64] = NVMem[0xA0]; elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64.SystemAccessTrap(EL2, 0x18); else UNDEFINED; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.HXEn == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.HXEn == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); else X[t, 64] = HCRX_EL2; elsif PSTATE.EL == EL3 then X[t, 64] = HCRX_EL2;
MSR HCRX_EL2, <Xt>
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b100 | 0b0001 | 0b0010 | 0b010 |
if PSTATE.EL == EL0 then UNDEFINED; elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'1x1'} then NVMem[0xA0] = X[t, 64]; elsif EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64.SystemAccessTrap(EL2, 0x18); else UNDEFINED; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && EL3SDDUndefPriority() && SCR_EL3.HXEn == '0' then UNDEFINED; elsif HaveEL(EL3) && SCR_EL3.HXEn == '0' then if EL3SDDUndef() then UNDEFINED; else AArch64.SystemAccessTrap(EL3, 0x18); else HCRX_EL2 = X[t, 64]; elsif PSTATE.EL == EL3 then HCRX_EL2 = X[t, 64];