On 13 June 2018 at 14:13, Marek Vasut <marek.va...@gmail.com> wrote: > 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+rene...@gmail.com> > Cc: Bin Chen <bin.c...@linaro.org> > Cc: Masahiro Yamada <yamada.masah...@socionext.com> > Cc: Tom Rini <tr...@konsulko.com> > --- > V2: Protect the ARM64 booti bit with if IS_ENABLED(CMD_BOOTI) > V3: Use if() instead of #ifdef > V4: Switch force_reloc to bool > --- > common/bootm.c | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/common/bootm.c b/common/bootm.c > index e789f6818a..e517d9f118 100644 > --- a/common/bootm.c > +++ b/common/bootm.c > @@ -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) { > - images.os.load = images.os.image_start; > - images.ep += images.os.load; > + if (CONFIG_IS_ENABLED(CMD_BOOTI) && > + images.os.arch == IH_ARCH_ARM64) { > + ulong image_addr; > + ulong image_size; > + > + ret = booti_setup(images.os.image_start, > &image_addr, > + &image_size, true); >
Is it guaranteed to be conflict free (with other images) by always moving the kernel to the start of the RAM? > + if (ret != 0) > + return 1; > Do you think it helps to add some debug/error message here as in other path that returns 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; > I know this is same the orinigal code. I'm not famaliar the history/purpse of type IH_TYPE_KERNEL_NOLOAD (compared with IH_TYPE_KERNEL), so just for my understanding, why in this case we have to increment the images.ep by images.os.load, not just set images.ep to images.os.load. + } > } > > images.os.start = map_to_sysmem(os_hdr); > -- > 2.17.1 > > -- Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot