The SPL image for the Tinker Board has to fit into 32 KiB. This includes 4 KiB for the device tree and up to 2 KiB for the file header.
A new configuration variable CONFIG_SPL_WITH_DTB_SIZE_LIMIT is introduced to define the board specific limit. Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de> --- v2 Instead of using CONFIG_SPL_MAX_SIZE with an estimate of the FDT size introduce a new test in scripts/Makefile.spl. --- Kconfig | 8 ++++++++ configs/tinker-rk3288_defconfig | 1 + scripts/Makefile.spl | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/Kconfig b/Kconfig index 512c7beb89..7cce53da74 100644 --- a/Kconfig +++ b/Kconfig @@ -172,6 +172,14 @@ config TPL_SYS_MALLOC_F_LEN particular needs this to operate, so that it can allocate the initial serial device and any others that are needed. +config SPL_WITH_DTB_SIZE_LIMIT + int "Maximum size of SPL image including device tree" + depends on SPL + default 0 + help + Specifies the maximum length of the U-Boot SPL image including the + device tree. If this value is zero, it is ignored. + menuconfig EXPERT bool "Configure standard U-Boot features (expert users)" default y diff --git a/configs/tinker-rk3288_defconfig b/configs/tinker-rk3288_defconfig index fdcab28185..cc5e59bcf1 100644 --- a/configs/tinker-rk3288_defconfig +++ b/configs/tinker-rk3288_defconfig @@ -3,6 +3,7 @@ CONFIG_ARCH_ROCKCHIP=y CONFIG_SYS_TEXT_BASE=0x00000000 CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_ROCKCHIP_RK3288=y +CONFIG_SPL_WITH_DTB_SIZE_LIMIT=32700 CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y CONFIG_TARGET_TINKER_RK3288=y CONFIG_DEBUG_UART_BASE=0xff690000 diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl index 9d5921606e..afc329a410 100644 --- a/scripts/Makefile.spl +++ b/scripts/Makefile.spl @@ -254,11 +254,27 @@ FINAL_DTB_CONTAINER = $(obj)/$(SPL_BIN).multidtb.fit endif +ifneq ($(CONFIG_SPL_WITH_DTB_SIZE_LIMIT),0) +SPL_WITH_DTB_SIZE_CHECK = \ + @actual=`wc -c $@ | awk '{print $$1}'`; \ + limit=`printf "%d" $(CONFIG_SPL_WITH_DTB_SIZE_LIMIT)`; \ + if test $$actual -gt $$limit; then \ + echo "$@ exceeds file size limit:" >&2 ; \ + echo " limit: $$limit bytes" >&2 ; \ + echo " actual: $$actual bytes" >&2 ; \ + echo " excess: $$((actual - limit)) bytes" >&2; \ + exit 1; \ + fi +else +SPL_WITH_DTB_SIZE_CHECK = +endif + ifeq ($(CONFIG_$(SPL_TPL_)OF_CONTROL)$(CONFIG_OF_SEPARATE)$(CONFIG_$(SPL_TPL_)OF_PLATDATA),yy) $(obj)/$(SPL_BIN)-dtb.bin: $(obj)/$(SPL_BIN)-nodtb.bin \ $(if $(CONFIG_SPL_SEPARATE_BSS),,$(obj)/$(SPL_BIN)-pad.bin) \ $(FINAL_DTB_CONTAINER) FORCE $(call if_changed,cat) + $(SPL_WITH_DTB_SIZE_CHECK) $(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-dtb.bin FORCE $(call if_changed,copy) -- 2.20.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot