[PATCH] spl: Align device tree blob address at 8-byte boundary

Bin Meng bmeng.cn at gmail.com
Tue Jul 13 05:09:49 CEST 2021


On Tue, Jul 13, 2021 at 12:01 AM Alex G. <mr.nuke.me at gmail.com> wrote:
>
> On 7/12/21 10:15 AM, Tom Rini wrote:
> > On Mon, Jul 12, 2021 at 01:36:14PM +0800, Bin Meng wrote:
> >> On Mon, Jul 12, 2021 at 1:21 PM Reuben Dowle <reuben.dowle at 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?
> >
> > I think this had something to do with embedding contents somewhere in
> > the image?  There is a thread on the ML from then but I don't know how
> > informative it will end up being.
>
> It's true that the flat devicetree spec requires an 8-byte alignment,
> even on 32-bit. The issues here are specific to u-boot.
>
> SPL and u-boot have to agree where u-boot's FDT is located. We'll look
> at two cases:
>         1) u-boot as a FIT (binary and FDT separately loaded)
>         2) u-boot with embedded FDT

Is this CONFIG_OF_EMBED?

>
> In case (1) SPL must place the FDT at a location where u-boot will find
> it. The current logic is
>         SPL:    fdt = ALIGN_4(u_boot + u_boot_size)

I don't see there is even a ALIGN_4 in current SPL logic, but it
happens to be 4 in all cases I think.

>         u-boot: fdt = ALIGN_4(u_boot + u_boot_size)
>
> In case (2), SPL's view of the FDT is not relevant, but instead the
> build system must place the FDT correctly:
>         build:  fdt >> u-boot.bin
>         u-boot: fdt = ALIGN_4(u_boot + u_boot_size)
>
> We have 3 places that must agree. A correct and complete patch could
> change all three, but one has to consider compatibility issues when
> crossing u-boot and SPL versions.
>
> I had proposed in the revert discussion that SPL use r2 or similar
> mechanism to pass the location of the FDT to u-boot.

Regards,
Bin


More information about the U-Boot mailing list