The ARM64 has 2 MiB alignment requirement for the kernel. When using
fitImage, this requirement may by violated, the kernel will thus be
executed from unaligned address and fail to boot. Do what booti does
and run booti_setup() for kernel_noload images on arm64 to obtain a
suitable aligned address to which the image shall be relocated.

Signed-off-by: Marek Vasut <[email protected]>
Cc: Bin Chen <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Tom Rini <[email protected]>
---
 common/bootm.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/common/bootm.c b/common/bootm.c
index a0ffc1cd67..5b0e755ded 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -198,8 +198,22 @@ static int bootm_find_os(cmd_tbl_t *cmdtp, int flag, int 
argc,
        }
 
        if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
-               images.os.load = images.os.image_start;
-               images.ep += images.os.load;
+               ulong image_addr;
+               ulong image_size;
+
+               if (images.os.arch == IH_ARCH_ARM64) {
+                       ret = booti_setup(images.os.image_start, &image_addr,
+                                         &image_size, 1);
+                       if (ret != 0)
+                               return 1;
+
+                       images.os.type = IH_TYPE_KERNEL;
+                       images.os.load = image_addr;
+                       images.ep = image_addr;
+               } else {
+                       images.os.load = images.os.image_start;
+                       images.ep += images.os.image_start;
+               }
        }
 
        images.os.start = map_to_sysmem(os_hdr);
-- 
2.16.2

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to