[PATCH] spl: pad external DTB to _image_binary_end with separate BSS

Quentin Strydom qstrydom0 at gmail.com
Fri Jun 19 12:55:29 CEST 2026


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>
---
 scripts/Makefile.xpl | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/scripts/Makefile.xpl b/scripts/Makefile.xpl
index a3fd3e1375f..fcb79df3cc4 100644
--- a/scripts/Makefile.xpl
+++ b/scripts/Makefile.xpl
@@ -332,8 +332,8 @@ endif
 
 ifneq ($(build_dtb),)
 $(obj)/$(SPL_BIN)-dtb.bin: $(obj)/$(SPL_BIN)-nodtb.bin \
-		$(if $(CONFIG_$(PHASE_)SEPARATE_BSS),,$(obj)/$(SPL_BIN)-pad.bin) \
-		$(FINAL_DTB_CONTAINER)  FORCE
+		$(if $(CONFIG_$(PHASE_)SEPARATE_BSS),$(obj)/$(SPL_BIN)-image-end-pad.bin,$(obj)/$(SPL_BIN)-pad.bin) \
+		$(FINAL_DTB_CONTAINER) FORCE
 	$(call if_changed,cat)
 
 $(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-dtb.bin FORCE
@@ -343,6 +343,17 @@ $(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-nodtb.bin FORCE
 	$(call if_changed,copy)
 endif
 
+# Create a file that pads from the end of the xPL nodtb binary to _image_binary_end
+$(obj)/$(SPL_BIN)-image-end-pad.bin: $(obj)/$(SPL_BIN) $(obj)/$(SPL_BIN)-nodtb.bin
+	@image_end=$$($(NM) $(obj)/$(SPL_BIN) | awk '/ _image_binary_end/ {print "ibase=16; " toupper($$1)}' | bc); \
+	actual=$$(wc -c < $(obj)/$(SPL_BIN)-nodtb.bin); \
+	count=$$((image_end - actual)); \
+	if [ $$count -lt 0 ]; then \
+		echo "Invalid xPL padding: image_end=$$image_end actual=$$actual"; \
+		exit 1; \
+	fi; \
+	dd if=/dev/zero of=$@ bs=1 count=$$count 2>/dev/null
+
 # Create a file that pads from the end of u-boot-spl-nodtb.bin to bss_end
 $(obj)/$(SPL_BIN)-pad.bin: $(obj)/$(SPL_BIN)
 	@bss_size_str=$(shell $(NM) $< | awk 'BEGIN {size = 0} /__bss_size/ {size = $$1} END {print "ibase=16; " toupper(size)}' | bc); \
-- 
2.43.0



More information about the U-Boot mailing list