[PATCH] spl: pad external DTB to _image_binary_end with separate BSS
Quentin Strydom
qstrydom0 at gmail.com
Sat Jun 20 17:07:33 CEST 2026
Thanks, that makes sense.
Just to clarify, I reproduced and tested this with QEMU’s ast2600-evb
machine rather than physical AST2600 hardware.
I checked the SPL section layout and I think you are right that the better
fix is in the AST2600 SPL linker script rather than in scripts/Makefile.xpl.
With the v1 Makefile fix reverted, the mismatch was:
sizeof(spl/u-boot-spl-nodtb.bin) = 0xc92c
_image_binary_end = 0xc930
The last emitted section was __u_boot_list, ending at 0xc92c, while
_image_binary_end was advanced to 0xc930 by the alignment associated with
.binman_sym_table. In this build .binman_sym_table did not contribute
emitted contents, so objcopy -O binary did not include those alignment
bytes in spl/u-boot-spl-nodtb.bin.
I have tested a v2 which moves the 8-byte alignment into the emitted
__u_boot_list section. With that change:
sizeof(spl/u-boot-spl-nodtb.bin) = 0xc930
_image_binary_end = 0xc930
The appended SPL DTB starts at 0xc930, and the external-DTB build boots
successfully under QEMU with:
qemu-system-arm -M ast2600-evb,execute-in-place=on,bmc-console=uart5 \
-drive file=flash.img,format=raw,if=mtd -nographic
I have sent v2 with the linker-script fix.
Quentin
On Fri, Jun 19, 2026 at 9:04 PM Tom Rini <trini at konsulko.com> wrote:
> On Fri, Jun 19, 2026 at 11:55:29AM +0100, Quentin Strydom wrote:
>
> > When CONFIG_SPL_SEPARATE_BSS is enabled, fdt_find_separate()
> > expects the SPL control DTB at _image_binary_end. However,
> > u-boot-spl-dtb.bin is currently generated by concatenating
> > u-boot-spl-nodtb.bin and the SPL DTB directly, without padding
> > up to _image_binary_end.
> >
> > On evb-ast2600 this places the appended SPL DTB at 0xc92c while
> > _image_binary_end is 0xc930. The SPL therefore checks four bytes
> > past the FDT header and fails early with:
> >
> > Missing DTB
> > No serial driver found
> >
> > Add padding between the xPL nodtb binary and the DTB when separate
> > BSS is enabled, so the DTB is placed where fdt_find_separate()
> > expects it.
> >
> > Signed-off-by: Quentin Strydom <qstrydom0 at gmail.com>
>
> I'm glad someone has been able to test this on hardware now, and I'm
> sorry it wasn't fixed when dealing with the rest of the fallout here.
> I'm not sure this is quite the correct fix however as we should be
> ensuring that output file and _image_binary_end agree. What sections
> are, and aren't being included when we create the -nodtb.bin file? I
> think the place I ended up putting the '. = ALIGN(8)' in commit
> 8b0ebe054bb3 ("arm: Update linker scripts to ensure appended device tree
> is aligned") ended up not being correct on this platform.
>
> --
> Tom
>
More information about the U-Boot
mailing list