Provides information about the implemented memory model and memory management support in AArch64 state.
For general information about the interpretation of the ID registers, see 'Principles of the ID scheme for fields in ID registers'.
Prior to the introduction of the features described by this register, this register was unnamed and reserved, RES0 from EL1, EL2, and EL3.
ID_AA64MMFR2_EL1 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 |
E0PD | EVT | BBM | TTL | RES0 | FWB | IDS | AT | ||||||||||||||||||||||||
ST | NV | CCIDX | VARange | IESB | LSM | UAO | CnP |
Indicates support for the E0PD mechanism.
The value of this field is an IMPLEMENTATION DEFINED choice of:
E0PD | Meaning |
---|---|
0b0000 |
E0PDx mechanism is not implemented. |
0b0001 |
E0PDx mechanism is implemented. |
All other values are reserved.
FEAT_E0PD implements the functionality identified by the value 0b0001.
In Armv8.4, the permitted values are 0b0000 and 0b0001.
From Armv8.5, the only permitted value is 0b0001.
If FEAT_E0PD is implemented, FEAT_CSV3 must be implemented.
Access to this field is RO.
Enhanced Virtualization Traps. If EL2 is implemented, indicates support for the HCR_EL2.{TTLBOS, TTLBIS, TOCU, TICAB, TID4} traps.
The value of this field is an IMPLEMENTATION DEFINED choice of:
EVT | Meaning |
---|---|
0b0000 |
HCR_EL2.{TTLBOS, TTLBIS, TOCU, TICAB, TID4} traps are not supported. |
0b0001 |
HCR_EL2.{TOCU, TICAB, TID4} traps are supported. HCR_EL2.{TTLBOS, TTLBIS} traps are not supported. |
0b0010 |
HCR_EL2.{TTLBOS, TTLBIS, TOCU, TICAB, TID4} traps are supported. |
All other values are reserved.
FEAT_EVT implements the functionality identified by the values 0b0001 and 0b0010.
If EL2 is not implemented, the only permitted value is 0b0000.
In Armv8.2, the permitted values are 0b0000, 0b0001, and 0b0010.
From Armv8.5, the permitted values are:
Access to this field is RO.
Allows identification of the requirements of the hardware to have break-before-make sequences when changing block size for a translation.
The value of this field is an IMPLEMENTATION DEFINED choice of:
BBM | Meaning |
---|---|
0b0000 |
Level 0 support for changing block size is supported. |
0b0001 |
Level 1 support for changing block size is supported. |
0b0010 |
Level 2 support for changing block size is supported. |
All other values are reserved.
FEAT_BBM implements the functionality identified by the values 0b0000, 0b0001, and 0b0010.
From Armv8.4, the permitted values are 0b0000, 0b0001, and 0b0010.
Access to this field is RO.
Indicates support for TTL field in address operations.
The value of this field is an IMPLEMENTATION DEFINED choice of:
TTL | Meaning |
---|---|
0b0000 |
TLB maintenance instructions by address have bits[47:44] as RES0. |
0b0001 |
TLB maintenance instructions by address have bits[47:44] holding the TTL field. |
All other values are reserved.
FEAT_TTL implements the functionality identified by the value 0b0001.
This field affects TLBI IPAS2E1, TLBI IPAS2E1IS, TLBI IPAS2E1OS, TLBI IPAS2LE1, TLBI IPAS2LE1IS, TLBI IPAS2LE1OS, TLBI VAAE1, TLBI VAAE1IS, TLBI VAAE1OS, TLBI VAALE1, TLBI VAALE1IS, TLBI VAALE1OS, TLBI VAE1, TLBI VAE1IS, TLBI VAE1OS, TLBI VAE2, TLBI VAE2IS, TLBI VAE2OS, TLBI VAE3, TLBI VAE3IS, TLBI VAE3OS,TLBI VALE1, TLBI VALE1IS, TLBI VALE1OS, TLBI VALE2, TLBI VALE2IS, TLBI VALE2OS, TLBI VALE3, TLBI VALE3IS, TLBI VALE3OS.
From Armv8.4, the only permitted value is 0b0001.
Access to this field is RO.
Reserved, RES0.
Indicates support for HCR_EL2.FWB.
The value of this field is an IMPLEMENTATION DEFINED choice of:
FWB | Meaning |
---|---|
0b0000 |
HCR_EL2.FWB bit is not supported. |
0b0001 |
HCR_EL2.FWB is supported. |
All other values reserved.
FEAT_S2FWB implements the functionality identified by the value 0b0001.
From Armv8.4, the only permitted value is 0b0001.
Access to this field is RO.
Indicates the value of ESR_ELx.EC that reports an exception generated by a read access to the feature ID space.
The value of this field is an IMPLEMENTATION DEFINED choice of:
IDS | Meaning |
---|---|
0b0000 |
An exception which is generated by a read access to the feature ID space, other than a trap caused by HCR_EL2.TIDx, SCTLR_EL1.UCT, or SCTLR_EL2.UCT, is reported by ESR_ELx.EC == 0x0. |
0b0001 |
All exceptions generated by an AArch64 read access to the feature ID space are reported by ESR_ELx.EC == 0x18. |
All other values are reserved.
The Feature ID space is defined as the System register space in AArch64 with op0==3, op1=={0, 1, 3}, CRn==0, CRm=={0-7}, op2=={0-7}.
FEAT_IDST implements the functionality identified by the value 0b0001.
From Armv8.4, the only permitted value is 0b0001.
Access to this field is RO.
Identifies support for unaligned single-copy atomicity and atomic functions.
The value of this field is an IMPLEMENTATION DEFINED choice of:
AT | Meaning |
---|---|
0b0000 |
Unaligned single-copy atomicity and atomic functions are not supported. |
0b0001 |
Unaligned single-copy atomicity and atomic functions with a 16-byte address range aligned to 16-bytes are supported. |
All other values are reserved.
FEAT_LSE2 implements the functionality identified by the value 0b0001.
In Armv8.2, the permitted values are 0b0000 and 0b0001.
From Armv8.4, the only permitted value is 0b0001.
Access to this field is RO.
Identifies support for small translation tables.
The value of this field is an IMPLEMENTATION DEFINED choice of:
ST | Meaning |
---|---|
0b0000 |
The maximum value of the TCR_ELx.{T0SZ,T1SZ} and VTCR_EL2.T0SZ fields is 39. |
0b0001 |
The maximum value of the TCR_ELx.{T0SZ,T1SZ} and VTCR_EL2.T0SZ fields is 48 for 4KB and 16KB granules, and 47 for 64KB granules. |
All other values are reserved.
FEAT_TTST implements the functionality identified by the value 0b0001.
When FEAT_SEL2 is implemented, the value 0b0000 is not permitted.
Access to this field is RO.
Nested Virtualization. If EL2 is implemented, indicates support for the use of nested virtualization.
The value of this field is an IMPLEMENTATION DEFINED choice of:
NV | Meaning |
---|---|
0b0000 |
Nested virtualization is not supported. |
0b0001 |
The HCR_EL2.{AT, NV1, NV} bits are implemented. |
0b0010 |
The VNCR_EL2 register and the HCR_EL2.{NV2, AT, NV1, NV} bits are implemented. |
All other values are reserved.
If EL2 is not implemented, the only permitted value is 0b0000.
FEAT_NV implements the functionality identified by the value 0b0001.
FEAT_NV2 implements the functionality identified by the value 0b0010.
In Armv8.3, if EL2 is implemented, the permitted values are 0b0000 and 0b0001.
From Armv8.4, if EL2 is implemented, the permitted values are 0b0000, 0b0001, and 0b0010.
Access to this field is RO.
Support for the use of revised CCSIDR_EL1 register format.
The value of this field is an IMPLEMENTATION DEFINED choice of:
CCIDX | Meaning |
---|---|
0b0000 |
32-bit format implemented for all levels of the CCSIDR_EL1. |
0b0001 |
64-bit format implemented for all levels of the CCSIDR_EL1. |
All other values are reserved.
FEAT_CCIDX implements the functionality identified by the value 0b0001.
From Armv8.3, the permitted values are 0b0000 and 0b0001.
Access to this field is RO.
Indicates support for a larger virtual address.
The value of this field is an IMPLEMENTATION DEFINED choice of:
VARange | Meaning | Applies when |
---|---|---|
0b0000 |
VMSAv8-64 supports 48-bit VAs. | |
0b0001 |
VMSAv8-64 supports 52-bit VAs when using the 64KB translation granule. The size for other translation granules is not defined by this field. | |
0b0010 |
VMSAv9-128 supports 56-bit VAs. | When FEAT_D128 is implemented |
All other values are reserved.
FEAT_LVA implements the functionality identified by the value 0b0001.
FEAT_LVA3 implements the functionality identified by the value 0b0010.
Access to this field is RO.
Indicates support for the IESB bit in the SCTLR_ELx registers.
The value of this field is an IMPLEMENTATION DEFINED choice of:
IESB | Meaning |
---|---|
0b0000 |
IESB bit in the SCTLR_ELx registers is not supported. |
0b0001 |
IESB bit in the SCTLR_ELx registers is supported. |
All other values are reserved.
FEAT_IESB implements the functionality identified by the value 0b0001.
Access to this field is RO.
Indicates support for LSMAOE and nTLSMD bits in SCTLR_EL1 and SCTLR_EL2.
The value of this field is an IMPLEMENTATION DEFINED choice of:
LSM | Meaning |
---|---|
0b0000 |
LSMAOE and nTLSMD bits not supported. |
0b0001 |
LSMAOE and nTLSMD bits supported. |
All other values are reserved.
FEAT_LSMAOC implements the functionality identified by the value 0b0001.
Access to this field is RO.
User Access Override.
The value of this field is an IMPLEMENTATION DEFINED choice of:
UAO | Meaning |
---|---|
0b0000 |
UAO not supported. |
0b0001 |
UAO supported. |
All other values are reserved.
FEAT_UAO implements the functionality identified by the value 0b0001.
From Armv8.2, the only permitted value is 0b0001.
Access to this field is RO.
Indicates support for Common not Private translations.
The value of this field is an IMPLEMENTATION DEFINED choice of:
CnP | Meaning |
---|---|
0b0000 |
Common not Private translations not supported. |
0b0001 |
Common not Private translations supported. |
All other values are reserved.
FEAT_TTCNP implements the functionality identified by the value 0b0001.
From Armv8.2, the only permitted value is 0b0001.
Access to this field is RO.
Accesses to this register use the following encodings in the System register encoding space:
MRS <Xt>, ID_AA64MMFR2_EL1
op0 | op1 | CRn | CRm | op2 |
---|---|---|---|---|
0b11 | 0b000 | 0b0000 | 0b0111 | 0b010 |
if PSTATE.EL == EL0 then if IsFeatureImplemented(FEAT_IDST) then if EL2Enabled() && HCR_EL2.TGE == '1' then AArch64.SystemAccessTrap(EL2, 0x18); else AArch64.SystemAccessTrap(EL1, 0x18); else UNDEFINED; elsif PSTATE.EL == EL1 then if EL2Enabled() && (IsFeatureImplemented(FEAT_FGT) || !IsZero(ID_AA64MMFR2_EL1) || boolean IMPLEMENTATION_DEFINED "ID_AA64MMFR2_EL1 trapped by HCR_EL2.TID3") && HCR_EL2.TID3 == '1' then AArch64.SystemAccessTrap(EL2, 0x18); else X[t, 64] = ID_AA64MMFR2_EL1; elsif PSTATE.EL == EL2 then X[t, 64] = ID_AA64MMFR2_EL1; elsif PSTATE.EL == EL3 then X[t, 64] = ID_AA64MMFR2_EL1;