[PATCH 1/4] build: Respect CONFIG_SPL_BUILD in DT sources
Fabio Estevam
festevam at gmail.com
Fri Apr 25 15:52:17 CEST 2025
From: Marek Vasut <marex at denx.de>
Currently the U-Boot SPL build uses the same DTBs that were generated
during U-Boot proper build, and calls 'fdtgrep' on those DTBs to filter
out uninteresting nodes and properties. Those U-Boot proper DTBs are
built from DTS which are first preprocessed by CPP, but that CPP is
invoked in U-Boot proper build context and effectively ignores the
CONFIG_SPL_BUILD macro. In case the CONFIG_SPL_BUILD macro is used
in any .dts file, the content of the macro is removed by CPP.
Fix this by building a separate set of DTBs for the SPL, which are
preprocessed by CPP with -DCONFIG_SPL_BUILD set. Use the same way
for the other PLs.
Signed-off-by: Marek Vasut <marex at denx.de>
Signed-off-by: Fabio Estevam <festevam at denx.de>
---
dts/Makefile | 5 ++++-
scripts/Makefile.lib | 11 +++++++++++
scripts/Makefile.xpl | 7 ++++++-
3 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dts/Makefile b/dts/Makefile
index 86bf8dc2156..53cab9a37a4 100644
--- a/dts/Makefile
+++ b/dts/Makefile
@@ -32,7 +32,10 @@ else
DTB := $(dt_dir)/$(DEVICE_TREE).dtb
endif
-$(obj)/dt-$(SPL_NAME).dtb: dts/dt.dtb $(objtree)/tools/fdtgrep FORCE
+$(obj)/dt-$(SPL_NAME).tmp.dtb: $(patsubst %.dtb,%.dts,$(DTB)) FORCE
+ $(call if_changed,dtc)
+
+$(obj)/dt-$(SPL_NAME).dtb: $(obj)/dt-$(SPL_NAME).tmp.dtb $(objtree)/tools/fdtgrep FORCE
mkdir -p $(dir $@)
$(call if_changed,fdtgrep)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 83fd5ff6c31..8d6f67caee2 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -202,6 +202,16 @@ endif
dtsi_include_list = $(strip $(u_boot_dtsi_options_debug) \
$(notdir $(firstword $(u_boot_dtsi_options))))
+ifeq ($(CONFIG_SPL_BUILD),y)
+dtc_cpp_xpl_flags = -DCONFIG_XPL_BUILD -DCONFIG_SPL_BUILD
+else ifeq ($(CONFIG_TPL_BUILD),y)
+dtc_cpp_xpl_flags = -DCONFIG_XPL_BUILD -DCONFIG_TPL_BUILD
+else ifeq ($(CONFIG_VPL_BUILD),y)
+dtc_cpp_xpl_flags = -DCONFIG_XPL_BUILD -DCONFIG_VPL_BUILD
+else
+dtc_cpp_xpl_flags =
+endif
+
# Modified for U-Boot
upstream_dtsi_include = $(addprefix -I, $(srctree)/dts/upstream/src/ \
$(sort $(dir $(wildcard $(srctree)/dts/upstream/src/$(ARCH)/*/*))) \
@@ -214,6 +224,7 @@ dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \
-I$(srctree)/arch/$(ARCH)/dts/include \
-I$(srctree)/include \
$(upstream_dtsi_include) \
+ $(dtc_cpp_xpl_flags) \
-D__ASSEMBLY__ \
-undef -D__DTS__
diff --git a/scripts/Makefile.xpl b/scripts/Makefile.xpl
index 43f27874f9f..ff19cb22f94 100644
--- a/scripts/Makefile.xpl
+++ b/scripts/Makefile.xpl
@@ -590,11 +590,16 @@ endif
SPL_OF_LIST_TARGETS = $(patsubst %,dts/%.dtb,$(subst ",,$(CONFIG_SPL_OF_LIST)))
SHRUNK_ARCH_DTB = $(addprefix $(obj)/,$(SPL_OF_LIST_TARGETS))
+SPL_TMP_OF_LIST_TARGETS = $(patsubst %,dts/%.spl.dtb,$(subst ",,$(CONFIG_SPL_OF_LIST)))
+SHRUNK_ARCH_TMP_DTB = $(addprefix $(obj)/,$(SPL_TMP_OF_LIST_TARGETS))
$(sort $(dir $(SHRUNK_ARCH_DTB))):
$(shell [ -d $@ ] || mkdir -p $@)
.SECONDEXPANSION:
-$(SHRUNK_ARCH_DTB): $$(patsubst $(obj)/dts/%, $(dt_dir)/%, $$@) $(dir $(SHRUNK_ARCH_DTB))
+$(SHRUNK_ARCH_TMP_DTB): $$(patsubst %.spl.dtb,%.dts,$$(patsubst $(obj)/dts/%, $(dt_dir)/%, $$@)) $(dir $(SHRUNK_ARCH_TMP_DTB))
+ $(call if_changed,dtc)
+
+$(SHRUNK_ARCH_DTB): $$(patsubst %.dtb,%.spl.dtb,$$@) $(dir $(SHRUNK_ARCH_DTB))
$(call if_changed,fdtgrep)
targets += $(SPL_OF_LIST_TARGETS)
--
2.34.1
More information about the U-Boot
mailing list