bootm: Handle kernel_noload on arm64
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 <marek.vasut+renesas@gmail.com> Cc: Bin Chen <bin.chen@linaro.org> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
7f13b374fd
commit
487b5fa6de
1 changed files with 17 additions and 2 deletions
|
@ -202,8 +202,23 @@ static int bootm_find_os(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
|
if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
|
||||||
images.os.load = images.os.image_start;
|
if (CONFIG_IS_ENABLED(CMD_BOOTI) &&
|
||||||
images.ep += images.os.load;
|
images.os.arch == IH_ARCH_ARM64) {
|
||||||
|
ulong image_addr;
|
||||||
|
ulong image_size;
|
||||||
|
|
||||||
|
ret = booti_setup(images.os.image_start, &image_addr,
|
||||||
|
&image_size, true);
|
||||||
|
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);
|
images.os.start = map_to_sysmem(os_hdr);
|
||||||
|
|
Loading…
Reference in a new issue