Message ID | 20241030160317.2528209-3-joey.gouly@arm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | KVM: arm64: Hide unsupported MPAM from the guest | expand |
On Wed, Oct 30, 2024 at 04:03:12PM +0000, Joey Gouly wrote: > From: James Morse <james.morse@arm.com> > > Add code to head.S's el2_setup to detect MPAM and disable any EL2 traps. > This register resets to an unknown value, setting it to the default > parititons/pmg before we enable the MMU is the best thing to do. > > Kexec/kdump will depend on this if the previous kernel left the CPU > configured with a restrictive configuration. > > If linux is booted at the highest implemented exception level el2_setup > will clear the enable bit, disabling MPAM. > > This code can't be enabled until a subsequent patch adds the Kconfig > and cpufeature boiler plate. > > Signed-off-by: James Morse <james.morse@arm.com> > Signed-off-by: Joey Gouly <joey.gouly@arm.com> > Reviewed-by: Gavin Shan <gshan@redhat.com> > Tested-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com>
diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h index e0ffdf13a18b..4cd41464be3f 100644 --- a/arch/arm64/include/asm/el2_setup.h +++ b/arch/arm64/include/asm/el2_setup.h @@ -220,6 +220,19 @@ msr spsr_el2, x0 .endm +.macro __init_el2_mpam + /* Memory Partitioning And Monitoring: disable EL2 traps */ + mrs x1, id_aa64pfr0_el1 + ubfx x0, x1, #ID_AA64PFR0_EL1_MPAM_SHIFT, #4 + cbz x0, .Lskip_mpam_\@ // skip if no MPAM + msr_s SYS_MPAM2_EL2, xzr // use the default partition + // and disable lower traps + mrs_s x0, SYS_MPAMIDR_EL1 + tbz x0, #MPAMIDR_EL1_HAS_HCR_SHIFT, .Lskip_mpam_\@ // skip if no MPAMHCR reg + msr_s SYS_MPAMHCR_EL2, xzr // clear TRAP_MPAMIDR_EL1 -> EL2 +.Lskip_mpam_\@: +.endm + /** * Initialize EL2 registers to sane values. This should be called early on all * cores that were booted in EL2. Note that everything gets initialised as @@ -237,6 +250,7 @@ __init_el2_stage2 __init_el2_gicv3 __init_el2_hstr + __init_el2_mpam __init_el2_nvhe_idregs __init_el2_cptr __init_el2_fgt