mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 12:00:22 +09:00
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:
committed by
Quentin Perret
parent
5748592d14
commit
8302ed7fba
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user