[PATCH][AArch64][SVE][Newlib] Initialize SVE system registers.

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Wed Oct 31 12:40:00 GMT 2018


On 26/10/2018 10:27, Tamar Christina wrote:
> Hi All,
> 
> This patch initializes the SVE system registers if available
> and initializes the vector length to the maximum supported.
> 
> This is done according to the SVE specification [1].
> 
> [1] https://developer.arm.com/docs/ddi0584/latest/arm-architecture-reference-manual-supplement-the-scalable-vector-extension-sve-for-armv8-a
> 
> Compiled aarch64-none-elf and no issues.
> 
> Ok for master?
> 
> PS. I don't have commit rights so if OK can someone commit for me?
> 

Pushed.

R.

> Thanks,
> Tamar
> 
> 
> 0001-AArch64-SVE-Initialize-SVE-system-registers.patch
> 
> From 4cb00e8cc316d309cb3a380feb1f07f8406c7a0d Mon Sep 17 00:00:00 2001
> From: Tamar Christina <tamar.christina@arm.com>
> Date: Fri, 26 Oct 2018 10:18:17 +0100
> Subject: [PATCH] [AArch64][SVE] Initialize SVE system registers.
> 
> This patch initializes the SVE system registers if available
> and initializes the vector length to the maximum supported.
> 
> This is done according to the SVE specification [1].
> 
> [1] https://developer.arm.com/docs/ddi0584/latest/arm-architecture-reference-manual-supplement-the-scalable-vector-extension-sve-for-armv8-a
> ---
>  libgloss/aarch64/cpu-init/rdimon-aem-el3.S | 27 ++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
> index 9edbccde5d..e00f0b2c8e 100644
> --- a/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
> +++ b/libgloss/aarch64/cpu-init/rdimon-aem-el3.S
> @@ -145,6 +145,33 @@ _flat_map:
>  	dsb	sy
>  	msr	sctlr_el3, x0
>  	isb
> +
> +	/* Determine if SVE is available.  */
> +       mrs      x0, id_aa64pfr0_el1
> +       tbz      x0, 32, .Lnosve
> +
> +       /* set up CPTR_EL3.TZ to 1.  */
> +       mrs     x0, cptr_el3
> +
> +       /* TZ is bit 8 of CPTR_EL3.  */
> +       orr     x0, x0, #0x100
> +       msr     cptr_el3, x0
> +       isb
> +
> +       /* set up vector lenght in ZCR_EL3 (4 LSB).  */
> +       mov     x2, #0xF
> +
> +       /* Try to set the maximum value supported by the architecture (2048).
> +	  SVE Arch.
> +
> +	    "If this field is set to a value that is not supported by the
> +	    implementation then reading the register must return the highest
> +	    supported vector length that is less than the value written."  */
> +       mrs     x1, s3_6_c1_c2_0                /* mrs  x1, zcr_el3.  */
> +       bfi     x1, x2, 0, 4
> +       msr     s3_6_c1_c2_0, x1                /* msr  zcr_el3, x1.  */
> +       isb
> +.Lnosve:
>  	ret
>  
>  	.data
> 



More information about the Newlib mailing list