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
This commit is contained in:
parent
2bbe8697d8
commit
9a7f131e0e
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue