On Mon, Jul 12, 2021 at 1:21 PM Reuben Dowle <reuben.do...@4rf.com> wrote: > > I submitted an almost identical patch. See > https://github.com/u-boot/u-boot/commit/eb39d8ba5f0d1468b01b89a2a464d18612d3ea76 > > This patch eventually had to be reverted > (https://github.com/u-boot/u-boot/commit/5675ed7cb645f5ec13958726992daeeed16fd114), > because it was causing issues on some platforms that had FIT on 32 bit > boundary. However I continue to use it in production code, as without it the > boot on my platform aborts. > > I don't have time to investigate why this was happening, but you need to > check this code won't just cause exactly the same faults.
Thanks for your information. +Marek who did the revert The revert commit message says: "The commit breaks booting of fitImage by SPL, the system simply hangs. This is because on arm32, the fitImage and all of its content can be aligned to 4 bytes and U-Boot expects just that." I don't understand this. If an address is aligned to 8, it is already aligned to 4, so how did this commit make the system hang on arm32? Note, as I indicated in this patch, now with libfdt 1.6.1, the alignment to 8 byte is a must-have. So we have to do such alignment anyway. @Tom may fill in why libfdt commit commit 5e735860c478 ("libfdt: Check for 8-byte address alignment in fdt_ro_probe_()") was made to have the 8-byte alignment requirement. > > -----Original Message----- > > From: U-Boot <u-boot-boun...@lists.denx.de> On Behalf Of Bin Meng > > Sent: Monday, 12 July 2021 3:53 pm > > To: Tom Rini <tr...@konsulko.com>; Simon Glass <s...@chromium.org>; u- > > b...@lists.denx.de > > Cc: Bin Meng <bmeng...@gmail.com> > > Subject: [PATCH] spl: Align device tree blob address at 8-byte boundary > > > > Since libfdt v1.6.1, a new requirement on the device tree address via: > > > > commit 5e735860c478 ("libfdt: Check for 8-byte address alignment in > > fdt_ro_probe_()") > > > > must be met that the device tree must be loaded in to memory at an 8-byte > > aligned address. > > > > Signed-off-by: Bin Meng <bmeng...@gmail.com> > > --- > > > > common/spl/spl_fit.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index > > f41abca0cc..9baf6aca9f 100644 > > --- a/common/spl/spl_fit.c > > +++ b/common/spl/spl_fit.c > > @@ -374,6 +374,12 @@ static int spl_fit_append_fdt(struct spl_image_info > > *spl_image, > > */ > > image_info.load_addr = spl_image->load_addr + spl_image->size; > > > > +/* > > + * Since libfdt v1.6.1, the device tree must be loaded in to memory > > + * at an 8-byte aligned address. > > + */ > > +image_info.load_addr = roundup(image_info.load_addr, 8); > > + > > /* Figure out which device tree the board wants to use */ > > node = spl_fit_get_image_node(ctx, FIT_FDT_PROP, index++); > > if (node < 0) { > > -- Regards, Bin