ArmVirtPkg/ArmPlatformLibQemu: Ensure that VFP is on before running C code

Now that we build the early code without strict alignment and without
suppressing the use of SIMD registers, ensure that the VFP unit is on
before entering C code.

While at it, simplyify the mov_i macro, which is only used for 32-bit
quantities.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: dann frazier <dann.frazier@canonical.com>
This commit is contained in:
Ard Biesheuvel 2023-01-05 14:43:14 +01:00 committed by mergify[bot]
parent 717f35a9f2
commit 5ee17c5418
1 changed files with 5 additions and 7 deletions

View File

@ -8,9 +8,7 @@
#include <AsmMacroIoLibV8.h>
.macro mov_i, reg:req, imm:req
movz \reg, :abs_g3:\imm
movk \reg, :abs_g2_nc:\imm
movk \reg, :abs_g1_nc:\imm
movz \reg, :abs_g1:\imm
movk \reg, :abs_g0_nc:\imm
.endm
@ -45,10 +43,9 @@
ASM_FUNC(ArmPlatformPeiBootAction)
mrs x0, CurrentEL // check current exception level
tbz x0, #3, 0f // bail if above EL1
ret
tbnz x0, #3, 0f // omit early ID map if above EL1
0:mov_i x0, mairval
mov_i x0, mairval
mov_i x1, tcrval
adrp x2, idmap
orr x2, x2, #0xff << 48 // set non-zero ASID
@ -87,7 +84,8 @@ ASM_FUNC(ArmPlatformPeiBootAction)
msr sctlr_el1, x3 // enable MMU and caches
isb
ret
0:b ArmEnableVFP // enable SIMD before entering C code
//UINTN
//ArmPlatformGetCorePosition (