]> git.sur5r.net Git - u-boot/commitdiff
efi_loader: AArch64: Run EFI payloads in EL2 if U-Boot runs in EL3
authorAlexander Graf <agraf@suse.de>
Thu, 17 Nov 2016 00:02:58 +0000 (01:02 +0100)
committerAlexander Graf <agraf@suse.de>
Thu, 17 Nov 2016 10:52:21 +0000 (11:52 +0100)
Some boards decided not to run ATF or other secure firmware in EL3, so
they instead run U-Boot there. The uEFI spec doesn't know what EL3 is
though - it only knows about EL2 and EL1. So if we see that we're running
in EL3, let's get into EL2 to make payloads happy.

Signed-off-by: Alexander Graf <agraf@suse.de>
Reviewed-by: York Sun <york.sun@nxp.com>
cmd/bootefi.c

index ae1b713197cbc91a06d6b072660a30941937614f..ca411702baed83b49c31186926d57bb963f8b2bc 100644 (file)
@@ -226,6 +226,17 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt)
                return status == EFI_SUCCESS ? 0 : -EINVAL;
        }
 
+#ifdef CONFIG_ARM64
+       /* On AArch64 we need to make sure we call our payload in < EL3 */
+       if (current_el() == 3) {
+               smp_kick_all_cpus();
+               dcache_disable();       /* flush cache before switch to EL2 */
+               armv8_switch_to_el2();
+               /* Enable caches again */
+               dcache_enable();
+       }
+#endif
+
        return entry(&loaded_image_info, &systab);
 }