[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