Initialise the exception level, which may include dropping to EL1 from EL2, if VHE is not supported. Signed-off-by: Joey Gouly --- arm/efi/crt0-efi-aarch64.S | 5 +++++ lib/arm/asm/setup.h | 2 ++ lib/arm/setup.c | 1 + 3 files changed, 8 insertions(+) diff --git a/arm/efi/crt0-efi-aarch64.S b/arm/efi/crt0-efi-aarch64.S index 71ce2794..5632fee0 100644 --- a/arm/efi/crt0-efi-aarch64.S +++ b/arm/efi/crt0-efi-aarch64.S @@ -147,6 +147,11 @@ _start: 0: ldp x29, x30, [sp], #32 ret +.globl do_init_el +do_init_el: + init_el x16 + ret + .section .data .balign 65536 diff --git a/lib/arm/asm/setup.h b/lib/arm/asm/setup.h index 4e60d552..bf05ffbb 100644 --- a/lib/arm/asm/setup.h +++ b/lib/arm/asm/setup.h @@ -29,8 +29,10 @@ void setup(const void *fdt, phys_addr_t freemem_start); #include #ifdef __aarch64__ +void do_init_el(void); void setup_efi_sctlr(void); #else +static inline void do_init_el(void) {} static inline void setup_efi_sctlr(void) {} #endif diff --git a/lib/arm/setup.c b/lib/arm/setup.c index 0aaa1d3a..5ff40b54 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -349,6 +349,7 @@ efi_status_t setup_efi(efi_bootinfo_t *efi_bootinfo) { efi_status_t status; + do_init_el(); setup_efi_sctlr(); -- 2.25.1