← Home

MPAMCTL_EL2

MPAM Control Register (EL2)

Controls the generation of MPAM information for memory requests when executing at EL2 and at lower ELs.

Configuration

AArch64 System register MPAMCTL_EL2 bit [63] is architecturally mapped to AArch64 System register MPAMCTL_EL3[63] when EL3 is implemented.

AArch64 System register MPAMCTL_EL2 bit [63] is architecturally mapped to AArch64 System register MPAMCTL_EL1[63].

This register is present only when FEAT_MPAMv2 is implemented and FEAT_AA64EL2 is implemented. Otherwise, direct accesses to MPAMCTL_EL2 are UNDEFINED.

This register has no effect if EL2 is not enabled in the current Security state.

Attributes

MPAMCTL_EL2 is a 64-bit register.

Field descriptions

6362616059585756555453525150494847464544434241403938373635343332
313029282726252423222120191817161514131211109876543210
MPAMENRES0EN_ALT_IPMGEN_ALT_IPARTIDEN_ALT_IPMG_EL0EN_ALT_IPARTID_EL0RES0
RES0

MPAMEN, bit [63]:

MPAM Enable. MPAM is enabled when MPAMEN == 1. When disabled, all PARTIDs and PMGs are output as their default value in the corresponding ID space.

MPAMENMeaning
0b0

The default PARTID and default PMG are output in MPAM information from all Exception levels.

0b1

MPAM information is output based on the MPAMn_ELx register for ELn according to the MPAM configuration.

The reset behavior of this field is:

Accessing this field has the following behavior:

Bits [62:53]:

Reserved, RES0.

EN_ALT_IPMG, bit [52] when MPAMIDR_EL1.HAS_INSTR_ALT_ID == '1':

Enables use of the alternative PMG configured in MPAM2_EL2.altPMG for instruction fetch accesses originating at EL2.

EN_ALT_IPMGMeaning
0b0

The alternative PMG configured in MPAM2_EL2.altPMG is not used for generating MPAM information for instruction fetch accesses.

0b1

The alternative PMG configured in MPAM2_EL2.altPMG is used for generating MPAM information for instruction fetch accesses.

The reset behavior of this field is:

Otherwise:

Reserved, RES0.

EN_ALT_IPARTID, bit [51] when MPAMIDR_EL1.HAS_INSTR_ALT_ID == '1':

Enables use of the alternative PARTID configured in MPAM2_EL2.altPARTID for instruction fetch accesses originating at EL2.

EN_ALT_IPARTIDMeaning
0b0

The alternative PARTID configured in MPAM2_EL2.altPARTID is not used for generating MPAM information for instruction fetch accesses.

0b1

The alternative PARTID configured in MPAM2_EL2.altPARTID is used for generating MPAM information for instruction fetch accesses.

The reset behavior of this field is:

Otherwise:

Reserved, RES0.

EN_ALT_IPMG_EL0, bit [50] when MPAMIDR_EL1.HAS_INSTR_ALT_ID == '1' and ELIsInHost(EL2):

Enables use of the alternative PMG configured in MPAM0_EL1.altPMG for instruction fetch accesses originating at EL0.

EN_ALT_IPMG_EL0Meaning
0b0

The alternative PMG configured in MPAM0_EL1.altPMG is not used for generating MPAM information for instruction fetch accesses.

0b1

The alternative PMG configured in MPAM0_EL1.altPMG is used for generating MPAM information for instruction fetch accesses.

If the Effective value of HCR_EL2.TGE is 0, the field is IGNORED for all purposes other than direct reads and writes of the register.

The reset behavior of this field is:

Otherwise:

Reserved, RES0.

EN_ALT_IPARTID_EL0, bit [49] when MPAMIDR_EL1.HAS_INSTR_ALT_ID == '1' and ELIsInHost(EL2):

Enables use of the alternative PARTID configured in MPAM0_EL1.altPARTID for instruction fetch accesses originating at EL0.

EN_ALT_IPARTID_EL0Meaning
0b0

The alternative PARTID configured in MPAM0_EL1.altPARTID is not used for generating MPAM information for instruction fetch accesses.

0b1

The alternative PARTID configured in MPAM0_EL1.altPARTID is used for generating MPAM information for instruction fetch accesses.

If the Effective value of HCR_EL2.TGE is 0, the field is IGNORED for all purposes other than direct reads and writes of the register.

The reset behavior of this field is:

Otherwise:

Reserved, RES0.

Bits [48:0]:

Reserved, RES0.

Access Instructions

When the Effective value of HCR_EL2.E2H is 1, without explicit synchronization, accesses from EL2 using the accessor name MPAMCTL_EL2 or MPAMCTL_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>, MPAMCTL_EL2

(op0 = 0b11, op1 = 0b100, CRn = 0b1010, CRm = 0b0101, op2 = 0b010)

if !(IsFeatureImplemented(FEAT_MPAMv2) && IsFeatureImplemented(FEAT_AA64EL2)) then Undefined(); elsif HaveEL(EL3) && PSTATE.EL == EL2 && EL3SDDUndefPriority() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else AArch64_SystemAccessTrap(EL2, 0x18); end; else Undefined(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else X{64}(t) = MPAMCTL_EL2(); end; elsif PSTATE.EL == EL3 then X{64}(t) = MPAMCTL_EL2(); end;

MSR MPAMCTL_EL2, <Xt>

(op0 = 0b11, op1 = 0b100, CRn = 0b1010, CRm = 0b0101, op2 = 0b010)

if !(IsFeatureImplemented(FEAT_MPAMv2) && IsFeatureImplemented(FEAT_AA64EL2)) then Undefined(); elsif HaveEL(EL3) && PSTATE.EL == EL2 && EL3SDDUndefPriority() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if EffectiveHCR_EL2_NVx() IN {'xx1'} then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else AArch64_SystemAccessTrap(EL2, 0x18); end; else Undefined(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; else MPAMCTL_EL2() = X{64}(t); end; elsif PSTATE.EL == EL3 then MPAMCTL_EL2() = X{64}(t); end;

When FEAT_VHE is implemented:

MRS <Xt>, MPAMCTL_EL1

(op0 = 0b11, op1 = 0b000, CRn = 0b1010, CRm = 0b0101, op2 = 0b010)

if !IsFeatureImplemented(FEAT_MPAMv2) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif EL2Enabled() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMHCR_EL2().nTRAPMPAM1EL1 == '0' then AArch64_SystemAccessTrap(EL2, 0x18); elsif EffectiveHCR_EL2_NVx() IN {'111'} then X{64}(t) = NVMem(0x918); else X{64}(t) = MPAMCTL_EL1(); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif ELIsInHost(EL2) then X{64}(t) = MPAMCTL_EL2(); else X{64}(t) = MPAMCTL_EL1(); end; elsif PSTATE.EL == EL3 then X{64}(t) = MPAMCTL_EL1(); end;

When FEAT_VHE is implemented:

MSR MPAMCTL_EL1, <Xt>

(op0 = 0b11, op1 = 0b000, CRn = 0b1010, CRm = 0b0101, op2 = 0b010)

if !IsFeatureImplemented(FEAT_MPAMv2) then Undefined(); elsif HaveEL(EL3) && !(EffectivelyAtEL0InHost() || EffectivelyAtEL0NotInHost() || PSTATE.EL == EL3) && EL3SDDUndefPriority() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then Undefined(); elsif PSTATE.EL == EL0 then Undefined(); elsif PSTATE.EL == EL1 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif EL2Enabled() && IsFeatureImplemented(FEAT_MPAMv2) && MPAMHCR_EL2().nTRAPMPAM1EL1 == '0' then AArch64_SystemAccessTrap(EL2, 0x18); elsif EffectiveHCR_EL2_NVx() IN {'111'} then NVMem(0x918) = X{64}(t); else MPAMCTL_EL1() = X{64}(t); end; elsif PSTATE.EL == EL2 then if HaveEL(EL3) && IsFeatureImplemented(FEAT_MPAMv2) && MPAMCTL_EL3().nTRAPLOWER == '0' then if EL3SDDUndef() then Undefined(); else AArch64_SystemAccessTrap(EL3, 0x18); end; elsif ELIsInHost(EL2) then MPAMCTL_EL2() = X{64}(t); else MPAMCTL_EL1() = X{64}(t); end; elsif PSTATE.EL == EL3 then MPAMCTL_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.