__deactivate_fgt(hctxt, vcpu, kvm, HAFGRTR_EL2);
 }
 
+static inline void  __activate_traps_mpam(struct kvm_vcpu *vcpu)
+{
+       u64 r = MPAM2_EL2_TRAPMPAM0EL1 | MPAM2_EL2_TRAPMPAM1EL1;
+
+       if (!system_supports_mpam())
+               return;
+
+       /* trap guest access to MPAMIDR_EL1 */
+       if (system_supports_mpam_hcr()) {
+               write_sysreg_s(MPAMHCR_EL2_TRAP_MPAMIDR_EL1, SYS_MPAMHCR_EL2);
+       } else {
+               /* From v1.1 TIDR can trap MPAMIDR, set it unconditionally */
+               r |= MPAM2_EL2_TIDR;
+       }
+
+       write_sysreg_s(r, SYS_MPAM2_EL2);
+}
+
+static inline void __deactivate_traps_mpam(void)
+{
+       if (!system_supports_mpam())
+               return;
+
+       write_sysreg_s(0, SYS_MPAM2_EL2);
+
+       if (system_supports_mpam_hcr())
+               write_sysreg_s(MPAMHCR_HOST_FLAGS, SYS_MPAMHCR_EL2);
+}
+
 static inline void __activate_traps_common(struct kvm_vcpu *vcpu)
 {
        /* Trap on AArch32 cp15 c15 (impdef sysregs) accesses (EL1 or EL0) */
        }
 
        __activate_traps_hfgxtr(vcpu);
+       __activate_traps_mpam(vcpu);
 }
 
 static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu)
                write_sysreg_s(HCRX_HOST_FLAGS, SYS_HCRX_EL2);
 
        __deactivate_traps_hfgxtr(vcpu);
+       __deactivate_traps_mpam();
 }
 
 static inline void ___activate_traps(struct kvm_vcpu *vcpu, u64 hcr)
 
        { SYS_DESC(SYS_LOREA_EL1), trap_loregion },
        { SYS_DESC(SYS_LORN_EL1), trap_loregion },
        { SYS_DESC(SYS_LORC_EL1), trap_loregion },
+       { SYS_DESC(SYS_MPAMIDR_EL1), undef_access },
        { SYS_DESC(SYS_LORID_EL1), trap_loregion },
 
+       { SYS_DESC(SYS_MPAM1_EL1), undef_access },
+       { SYS_DESC(SYS_MPAM0_EL1), undef_access },
        { SYS_DESC(SYS_VBAR_EL1), access_rw, reset_val, VBAR_EL1, 0 },
        { SYS_DESC(SYS_DISR_EL1), NULL, reset_val, DISR_EL1, 0 },
 
 
        EL2_REG(MAIR_EL2, access_rw, reset_val, 0),
        EL2_REG(AMAIR_EL2, access_rw, reset_val, 0),
+       { SYS_DESC(SYS_MPAMHCR_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPMV_EL2), undef_access },
+       { SYS_DESC(SYS_MPAM2_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM0_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM1_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM2_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM3_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM4_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM5_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM6_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM7_EL2), undef_access },
 
        EL2_REG(VBAR_EL2, access_rw, reset_val, 0),
        EL2_REG(RVBAR_EL2, access_rw, reset_val, 0),