FROMGIT: arm64: head.S: Initialise MPAM EL2 registers and disable traps

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.

Signed-off-by: James Morse <james.morse@arm.com>

Bug: 221768437
(cherry picked from commit fa0ff38f06b397d8a92d88eb8083c2c5a20ac87f
 git://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git mpam/snapshot/v5.16)
Change-Id: I2758f7f7b236d09a207e13d1165efb6887e8611a
Signed-off-by: Valentin Schneider <Valentin.Schneider@arm.com>
[bm: amended commit msg, dropped config option and switched to named labels]
Signed-off-by: Beata Michalska <beata.michalska@arm.com>
This commit is contained in:
James Morse
2018-07-02 11:15:31 +01:00
committed by Quentin Perret
parent 5748592d14
commit 8302ed7fba

View File

@@ -149,6 +149,20 @@
msr spsr_el2, x0
.endm
.macro __init_el2_mpam
/* Memory Partioning And Monitoring: disable EL2 traps */
mrs x1, id_aa64pfr0_el1
ubfx x0, x1, #ID_AA64PFR0_MPAM_SHIFT, #4
cbz x0, .Lskip_mpam_\@ // skip if no MPAM
msr_s SYS_MPAM0_EL1, xzr // use the default partition..
msr_s SYS_MPAM2_EL2, xzr // ..and disable lower traps
msr_s SYS_MPAM1_EL1, xzr
mrs_s x0, SYS_MPAMIDR_EL1
tbz x0, #17, .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
@@ -165,6 +179,7 @@
__init_el2_stage2
__init_el2_gicv3
__init_el2_hstr
__init_el2_mpam
__init_el2_nvhe_idregs
__init_el2_nvhe_cptr
__init_el2_nvhe_sve