summaryrefslogtreecommitdiffstats
path: root/arch/arm/lib64/armlinux.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/lib64/armlinux.c')
-rw-r--r--arch/arm/lib64/armlinux.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/arm/lib64/armlinux.c b/arch/arm/lib64/armlinux.c
index 0ba4d30b8e..3b108b21cb 100644
--- a/arch/arm/lib64/armlinux.c
+++ b/arch/arm/lib64/armlinux.c
@@ -5,17 +5,26 @@
#include <memory.h>
#include <init.h>
#include <bootm.h>
+#include <efi/efi-mode.h>
static int do_bootm_linux(struct image_data *data)
{
void (*fn)(unsigned long dtb, unsigned long x1, unsigned long x2,
unsigned long x3);
phys_addr_t devicetree;
+ int ret;
fn = booti_load_image(data, &devicetree);
if (IS_ERR(fn))
return PTR_ERR(fn);
+ if (data->dryrun)
+ return 0;
+
+ ret = of_overlay_load_firmware();
+ if (ret)
+ return ret;
+
shutdown_barebox();
fn(devicetree, 0, 0, 0);
@@ -29,6 +38,12 @@ static struct image_handler aarch64_linux_handler = {
.filetype = filetype_arm64_linux_image,
};
+static struct image_handler aarch64_linux_efi_handler = {
+ .name = "ARM aarch64 Linux/EFI image",
+ .bootm = do_bootm_linux,
+ .filetype = filetype_arm64_efi_linux_image,
+};
+
static struct image_handler aarch64_fit_handler = {
.name = "FIT image",
.bootm = do_bootm_linux,
@@ -47,7 +62,7 @@ static int do_bootm_barebox(struct image_data *data)
if (ret)
goto out;
- barebox = start;
+ barebox = PAGE_ALIGN(start);
ret = bootm_load_os(data, barebox);
if (ret)
@@ -75,6 +90,10 @@ static struct image_handler aarch64_barebox_handler = {
static int aarch64_register_image_handler(void)
{
+ if (efi_is_payload())
+ return 0;
+
+ register_image_handler(&aarch64_linux_efi_handler);
register_image_handler(&aarch64_linux_handler);
register_image_handler(&aarch64_barebox_handler);