[PATCH] armv8: Handle EL2 Host mode

Andre Przywara andre.przywara at arm.com
Sat Jan 30 14:41:34 CET 2021


On Sat, 30 Jan 2021 13:12:32 +0100
Mark Kettenis <kettenis at openbsd.org> wrote:

> On implementations that support VHE, the layout of the CPTR_EL2
> register depends on whether HCR_EL2.E2H is set.  Check this bit
> and and set the aprropriate bits to enable access to the FP/SIMD
> registers.  This allows U-Boot to run on systems that pass
> control to U-Boot in EL2 with EL2 Host mode enabled such as
> machine with Apple's M1 SoC.

That looks correct, I compared the bits against the manual.
TCR_EL2 and CNTHCTL_EL2 are also different, have you checked that
U-Boot's usage of it is compatible with E2H=1?

And we should probably allow SVE for non-VHE systems as well, but this
is probably another patch.

One nit below.

> 
> Signed-off-by: Mark Kettenis <kettenis at openbsd.org>
> ---
>  arch/arm/cpu/armv8/start.S | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
> index 662449156b..a259717e67 100644
> --- a/arch/arm/cpu/armv8/start.S
> +++ b/arch/arm/cpu/armv8/start.S
> @@ -133,9 +133,15 @@ pie_fixup_done:
>  #endif
>  	b	0f
>  2:	set_vbar	vbar_el2, x0
> +	mrs	x0, hcr_el2
> +	tbnz	x0, #34, el2_host		/* HCR_EL2.E2H */

el2_host sounds a bit ambiguous, can we use el2_vhe instead? That would
also point to the term "VHE", which is more known (and searchable)
than the "E2H" bit.

Cheers,
Andre

>  	mov	x0, #0x33ff
>  	msr	cptr_el2, x0			/* Enable FP/SIMD */
>  	b	0f
> +el2_host:
> +	mov	x0, #3 << 20
> +	msr	cptr_el2, x0			/* Enable FP/SIMD */
> +	b	0f
>  1:	set_vbar	vbar_el1, x0
>  	mov	x0, #3 << 20
>  	msr	cpacr_el1, x0			/* Enable FP/SIMD */



More information about the U-Boot mailing list