Translation Control Masking Register (EL2)
Mask register to prevent updates of fields in TCR_EL2 on writes.
This register is present only when FEAT_SRMASK is implemented and FEAT_AA64 is implemented. Otherwise, direct accesses to TCRMASK_EL2 are UNDEFINED.
If EL2 is not implemented, this register is RES0 from EL3.
This register has no effect if EL2 is not enabled in the current Security state.
TCRMASK_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 | MTX1 | MTX0 | DS | TCMA1 | TCMA0 | E0PD1 | E0PD0 | NFD1 | NFD0 | TBID1 | TBID0 | HWU162 | HWU161 | HWU160 | HWU159 | HWU062 | HWU061 | HWU060 | HWU059 | HPD1 | HPD0 | HD | HA | TBI1 | TBI0 | AS | RES0 | IPS | |||
| RES0 | TG1 | RES0 | SH1 | RES0 | ORGN1 | RES0 | IRGN1 | EPD1 | A1 | RES0 | T1SZ | RES0 | TG0 | RES0 | SH0 | RES0 | ORGN0 | RES0 | IRGN0 | EPD0 | RES0 | T0SZ | |||||||||
Reserved, RES0.
Mask bit for MTX1.
| MTX1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.MTX1 is writable. |
| 0b1 |
TCR_EL2.MTX1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for MTX0.
| MTX0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.MTX0 is writable. |
| 0b1 |
TCR_EL2.MTX0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for DS.
| DS | Meaning |
|---|---|
| 0b0 |
TCR_EL2.DS is writable. |
| 0b1 |
TCR_EL2.DS is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TCMA1.
| TCMA1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TCMA1 is writable. |
| 0b1 |
TCR_EL2.TCMA1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TCMA0.
| TCMA0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TCMA0 is writable. |
| 0b1 |
TCR_EL2.TCMA0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for E0PD1.
| E0PD1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.E0PD1 is writable. |
| 0b1 |
TCR_EL2.E0PD1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for E0PD0.
| E0PD0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.E0PD0 is writable. |
| 0b1 |
TCR_EL2.E0PD0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for NFD1.
| NFD1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.NFD1 is writable. |
| 0b1 |
TCR_EL2.NFD1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for NFD0.
| NFD0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.NFD0 is writable. |
| 0b1 |
TCR_EL2.NFD0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TBID1.
| TBID1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TBID1 is writable. |
| 0b1 |
TCR_EL2.TBID1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TBID0.
| TBID0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TBID0 is writable. |
| 0b1 |
TCR_EL2.TBID0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU162.
| HWU162 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU162 is writable. |
| 0b1 |
TCR_EL2.HWU162 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU161.
| HWU161 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU161 is writable. |
| 0b1 |
TCR_EL2.HWU161 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU160.
| HWU160 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU160 is writable. |
| 0b1 |
TCR_EL2.HWU160 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU159.
| HWU159 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU159 is writable. |
| 0b1 |
TCR_EL2.HWU159 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU062.
| HWU062 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU062 is writable. |
| 0b1 |
TCR_EL2.HWU062 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU061.
| HWU061 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU061 is writable. |
| 0b1 |
TCR_EL2.HWU061 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU060.
| HWU060 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU060 is writable. |
| 0b1 |
TCR_EL2.HWU060 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HWU059.
| HWU059 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HWU059 is writable. |
| 0b1 |
TCR_EL2.HWU059 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HPD1.
| HPD1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HPD1 is writable. |
| 0b1 |
TCR_EL2.HPD1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HPD0.
| HPD0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HPD0 is writable. |
| 0b1 |
TCR_EL2.HPD0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HD.
| HD | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HD is writable. |
| 0b1 |
TCR_EL2.HD is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for HA.
| HA | Meaning |
|---|---|
| 0b0 |
TCR_EL2.HA is writable. |
| 0b1 |
TCR_EL2.HA is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TBI1.
| TBI1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TBI1 is writable. |
| 0b1 |
TCR_EL2.TBI1 is not writable. |
The reset behavior of this field is:
Mask bit for TBI0.
| TBI0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TBI0 is writable. |
| 0b1 |
TCR_EL2.TBI0 is not writable. |
The reset behavior of this field is:
Mask bit for AS.
| AS | Meaning |
|---|---|
| 0b0 |
TCR_EL2.AS is writable. |
| 0b1 |
TCR_EL2.AS is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for IPS.
| IPS | Meaning |
|---|---|
| 0b0 |
TCR_EL2.IPS is writable. |
| 0b1 |
TCR_EL2.IPS is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TG1.
| TG1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TG1 is writable. |
| 0b1 |
TCR_EL2.TG1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for SH1.
| SH1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.SH1 is writable. |
| 0b1 |
TCR_EL2.SH1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for ORGN1.
| ORGN1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.ORGN1 is writable. |
| 0b1 |
TCR_EL2.ORGN1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for IRGN1.
| IRGN1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.IRGN1 is writable. |
| 0b1 |
TCR_EL2.IRGN1 is not writable. |
The reset behavior of this field is:
Mask bit for EPD1.
| EPD1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.EPD1 is writable. |
| 0b1 |
TCR_EL2.EPD1 is not writable. |
The reset behavior of this field is:
Mask bit for A1.
| A1 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.A1 is writable. |
| 0b1 |
TCR_EL2.A1 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for T1SZ.
| T1SZ | Meaning |
|---|---|
| 0b0 |
TCR_EL2.T1SZ is writable. |
| 0b1 |
TCR_EL2.T1SZ is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for TG0.
| TG0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.TG0 is writable. |
| 0b1 |
TCR_EL2.TG0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for SH0.
| SH0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.SH0 is writable. |
| 0b1 |
TCR_EL2.SH0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for ORGN0.
| ORGN0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.ORGN0 is writable. |
| 0b1 |
TCR_EL2.ORGN0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for IRGN0.
| IRGN0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.IRGN0 is writable. |
| 0b1 |
TCR_EL2.IRGN0 is not writable. |
The reset behavior of this field is:
Mask bit for EPD0.
| EPD0 | Meaning |
|---|---|
| 0b0 |
TCR_EL2.EPD0 is writable. |
| 0b1 |
TCR_EL2.EPD0 is not writable. |
The reset behavior of this field is:
Reserved, RES0.
Mask bit for T0SZ.
| T0SZ | Meaning |
|---|---|
| 0b0 |
TCR_EL2.T0SZ is writable. |
| 0b1 |
TCR_EL2.T0SZ is not writable. |
The reset behavior of this field is:
When the Effective value of HCR_EL2.E2H is 1, without explicit synchronization, accesses from EL2 using the accessor name TCRMASK_EL2 or TCRMASK_EL1 are not guaranteed to be ordered with respect to accesses using the other accessor name.
Accesses to this register use the following encodings in the System register encoding space:
MRS <Xt>, TCRMASK_EL2
(op0 = 0b11, op1 = 0b100, CRn = 0b0010, CRm = 0b0111, op2 = 0b010)
if !(IsFeatureImplemented(FEAT_SRMASK) && IsFeatureImplemented(FEAT_AA64)) then Undefined(); elsif HaveEL(EL3) && PSTATE.EL == EL2 && EL3SDDUndefPriority() && SCR_EL3().SRMASKEn == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64_SystemAccessTrap(EL2, 0x18); else Undefined(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else X{64}(t) = TCRMASK_EL2(); end; elsif PSTATE.EL == EL3 then X{64}(t) = TCRMASK_EL2(); end;
MSR TCRMASK_EL2, <Xt>
(op0 = 0b11, op1 = 0b100, CRn = 0b0010, CRm = 0b0111, op2 = 0b010)
if !(IsFeatureImplemented(FEAT_SRMASK) && IsFeatureImplemented(FEAT_AA64)) then Undefined(); elsif HaveEL(EL3) && PSTATE.EL == EL2 && EL3SDDUndefPriority() && SCR_EL3().SRMASKEn == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then AArch64_SystemAccessTrap(EL2, 0x18); else Undefined(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif !IsZero(TCRMASK_EL2()) then Undefined(); else TCRMASK_EL2() = X{64}(t); end; elsif PSTATE.EL == EL3 then TCRMASK_EL2() = X{64}(t); end;
MRS <Xt>, TCRMASK_EL1
(op0 = 0b11, op1 = 0b000, CRn = 0b0010, CRm = 0b0111, op2 = 0b010)
if !(IsFeatureImplemented(FEAT_SRMASK) && IsFeatureImplemented(FEAT_AA64)) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && SCR_EL3().SRMASKEn == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EL2Enabled() && IsFeatureImplemented(FEAT_FGT2) && ((HaveEL(EL3) && SCR_EL3().FGTEn2 == '0') || HFGRTR2_EL2().nTCRMASK_EL1 == '0') then AArch64_SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && (!IsHCRXEL2Enabled() || HCRX_EL2().SRMASKEn == '0') then AArch64_SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif EffectiveHCR_EL2_NVx() IN {'111'} then X{64}(t) = NVMem(0x330); else X{64}(t) = TCRMASK_EL1(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif ELIsInHost(EL2) then X{64}(t) = TCRMASK_EL2(); else X{64}(t) = TCRMASK_EL1(); end; elsif PSTATE.EL == EL3 then X{64}(t) = TCRMASK_EL1(); end;
MSR TCRMASK_EL1, <Xt>
(op0 = 0b11, op1 = 0b000, CRn = 0b0010, CRm = 0b0111, op2 = 0b010)
if !(IsFeatureImplemented(FEAT_SRMASK) && IsFeatureImplemented(FEAT_AA64)) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && SCR_EL3().SRMASKEn == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EL2Enabled() && IsFeatureImplemented(FEAT_FGT2) && ((HaveEL(EL3) && SCR_EL3().FGTEn2 == '0') || HFGWTR2_EL2().nTCRMASK_EL1 == '0') then AArch64_SystemAccessTrap(EL2, 0x18); elsif EL2Enabled() && (!IsHCRXEL2Enabled() || HCRX_EL2().SRMASKEn == '0') then AArch64_SystemAccessTrap(EL2, 0x18); elsif HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif EffectiveHCR_EL2_NVx() IN {'111'} then NVMem(0x330) = X{64}(t); elsif !IsZero(TCRMASK_EL1()) then Undefined(); else TCRMASK_EL1() = X{64}(t); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && SCR_EL3().SRMASKEn == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif ELIsInHost(EL2) then if !IsZero(TCRMASK_EL2()) then Undefined(); else TCRMASK_EL2() = X{64}(t); end; else TCRMASK_EL1() = X{64}(t); end; elsif PSTATE.EL == EL3 then TCRMASK_EL1() = X{64}(t); end;
Version 2026.06 — Copyright © 2010-2026 Arm Limited or its affiliates.
This site is provided as a community resource and is NOT affiliated with nor endorsed by Arm Limited.