[PATCH v1 15/18] arm64: disable EL2 traps for PIE
Suzuki K Poulose
suzuki.poulose at arm.com
Thu Mar 9 08:27:39 PST 2023
On 09/03/2023 14:52, Joey Gouly wrote:
> Disable trapping of TCR2_EL1 and PIRx_EL1 registers, so they can be
> accessed from by EL1.
>
> Signed-off-by: Joey Gouly <joey.gouly at arm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Will Deacon <will at kernel.org>
> ---
> arch/arm64/include/asm/el2_setup.h | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
> index 037724b19c5c..6e6675fae194 100644
> --- a/arch/arm64/include/asm/el2_setup.h
> +++ b/arch/arm64/include/asm/el2_setup.h
> @@ -22,6 +22,21 @@
> isb
> .endm
>
> +.macro __init_el2_hcrx
> + mrs x1, id_aa64mmfr1_el1
> + ubfx x0, x1, #ID_AA64MMFR1_EL1_HCX_SHIFT, 4
> + cbz x0, .Lskip_hcrx_\@
If TCR2 is available, HCX must also be supported ?
> +
> + mrs_s x1, SYS_ID_AA64MMFR2_EL1
MMFR3 ?
> + ubfx x0, x1, #ID_AA64MMFR3_EL1_TCRX_SHIFT, 4
> + cbz x0, .Lskip_hcrx_\@
Suzuki
> +
> + mrs_s x0, SYS_HCRX_EL2
> + orr x0, x0, #HCRX_EL2_TCR2En
> + msr_s SYS_HCRX_EL2, x0
> +.Lskip_hcrx_\@:
> +.endm
> +
> /*
> * Allow Non-secure EL1 and EL0 to access physical timer and counter.
> * This is not necessary for VHE, since the host kernel runs in EL2,
> @@ -150,12 +165,21 @@
> mov x0, xzr
> mrs x1, id_aa64pfr1_el1
> ubfx x1, x1, #ID_AA64PFR1_EL1_SME_SHIFT, #4
> - cbz x1, .Lset_fgt_\@
> + cbz x1, .Lset_pie_fgt_\@
>
> /* Disable nVHE traps of TPIDR2 and SMPRI */
> orr x0, x0, #HFGxTR_EL2_nSMPRI_EL1_MASK
> orr x0, x0, #HFGxTR_EL2_nTPIDR2_EL0_MASK
>
> +.Lset_pie_fgt_\@:
> + mrs_s x1, SYS_ID_AA64MMFR3_EL1
> + ubfx x1, x1, #ID_AA64MMFR3_EL1_S1PIE_SHIFT, #4
> + cbz x1, .Lset_fgt_\@
> +
> + /* Disable trapping of PIR_EL1 / PIRE0_EL1 */
> + orr x0, x0, #HFGxTR_EL2_nPIR_EL0_MASK
> + orr x0, x0, #HFGxTR_EL2_nPIREO_EL0_MASK
> +
> .Lset_fgt_\@:
> msr_s SYS_HFGRTR_EL2, x0
> msr_s SYS_HFGWTR_EL2, x0
> @@ -184,6 +208,7 @@
> */
> .macro init_el2_state
> __init_el2_sctlr
> + __init_el2_hcrx
> __init_el2_timers
> __init_el2_debug
> __init_el2_lor
More information about the linux-arm-kernel
mailing list