Commit 9bd76b80 authored by Goldschmidt Simon's avatar Goldschmidt Simon Committed by Tom Rini

spl: make CONFIG_OF_EMBED pass dts through fdtgrep

Building spl with CONFIG_OF_EMBED enabled results in an error message
on my board: "SPL image too big". This is because the fdtgrep build
step is only executed for CONFIG_OF_SEPARATE.

Fix this by moving the fdtgrep build step ('cmd_fdtgreo') from
scripts/Makefile.spl to dts/Makefile so that the reduced dtb is
available for all kinds of spl builds.

The resulting variable name for the embedded device tree blob changes,
too, which is why common.h and fdtdec.c have tiny changes.
Signed-off-by: default avatarSimon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
parent 20188f51
...@@ -22,10 +22,29 @@ DTB := $(ARCH_PATH)/$(DEVICE_TREE).dtb ...@@ -22,10 +22,29 @@ DTB := $(ARCH_PATH)/$(DEVICE_TREE).dtb
dtb_depends += $(DTB:.dtb=.dts) dtb_depends += $(DTB:.dtb=.dts)
endif endif
# Pass the original device tree file through fdtgrep twice. The first pass
# removes any unwanted nodes (i.e. those which don't have the
# 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second
# pass removes various unused properties from the remaining nodes.
# The output is typically a much smaller device tree file.
ifeq ($(CONFIG_TPL_BUILD),y)
fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl
else
fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-spl
endif
quiet_cmd_fdtgrep = FDTGREP $@
cmd_fdtgrep = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \
-n /chosen -n /config -O dtb | \
$(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
$(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
$(obj)/dt-spl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
$(call if_changed,fdtgrep)
$(obj)/dt.dtb: $(DTB) FORCE $(obj)/dt.dtb: $(DTB) FORCE
$(call if_changed,shipped) $(call if_changed,shipped)
targets += dt.dtb targets += dt.dtb dt-spl.dtb
$(DTB): $(dtb_depends) $(DTB): $(dtb_depends)
ifeq ($(EXT_DTB),) ifeq ($(EXT_DTB),)
...@@ -42,14 +61,22 @@ endif ...@@ -42,14 +61,22 @@ endif
arch-dtbs: arch-dtbs:
$(Q)$(MAKE) $(build)=$(ARCH_PATH) dtbs $(Q)$(MAKE) $(build)=$(ARCH_PATH) dtbs
.SECONDARY: $(obj)/dt.dtb.S .SECONDARY: $(obj)/dt.dtb.S $(obj)/dt-spl.dtb.S
ifeq ($(CONFIG_SPL_BUILD),y)
obj-$(CONFIG_OF_EMBED) := dt-spl.dtb.o
# support "out-of-tree" build for dtb-spl
$(obj)/dt-spl.dtb.o: $(obj)/dt-spl.dtb.S FORCE
$(call if_changed_dep,as_o_S)
else
obj-$(CONFIG_OF_EMBED) := dt.dtb.o obj-$(CONFIG_OF_EMBED) := dt.dtb.o
endif
dtbs: $(obj)/dt.dtb dtbs: $(obj)/dt.dtb $(obj)/dt-spl.dtb
@: @:
clean-files := dt.dtb.S clean-files := dt.dtb.S dt-spl.dtb.S
# Let clean descend into dts directories # Let clean descend into dts directories
subdir- += ../arch/arm/dts ../arch/microblaze/dts ../arch/mips/dts ../arch/sandbox/dts ../arch/x86/dts subdir- += ../arch/arm/dts ../arch/microblaze/dts ../arch/mips/dts ../arch/sandbox/dts ../arch/x86/dts
...@@ -201,6 +201,7 @@ int last_stage_init(void); ...@@ -201,6 +201,7 @@ int last_stage_init(void);
extern ulong monitor_flash_len; extern ulong monitor_flash_len;
int mac_read_from_eeprom(void); int mac_read_from_eeprom(void);
extern u8 __dtb_dt_begin[]; /* embedded device tree blob */ extern u8 __dtb_dt_begin[]; /* embedded device tree blob */
extern u8 __dtb_dt_spl_begin[]; /* embedded device tree blob for SPL/TPL */
int set_cpu_clk_info(void); int set_cpu_clk_info(void);
int mdm_init(void); int mdm_init(void);
int print_cpuinfo(void); int print_cpuinfo(void);
......
...@@ -1268,7 +1268,11 @@ int fdtdec_setup(void) ...@@ -1268,7 +1268,11 @@ int fdtdec_setup(void)
# endif # endif
# ifdef CONFIG_OF_EMBED # ifdef CONFIG_OF_EMBED
/* Get a pointer to the FDT */ /* Get a pointer to the FDT */
# ifdef CONFIG_SPL_BUILD
gd->fdt_blob = __dtb_dt_spl_begin;
# else
gd->fdt_blob = __dtb_dt_begin; gd->fdt_blob = __dtb_dt_begin;
# endif
# elif defined CONFIG_OF_SEPARATE # elif defined CONFIG_OF_SEPARATE
# ifdef CONFIG_SPL_BUILD # ifdef CONFIG_SPL_BUILD
/* FDT is at end of BSS unless it is in a different memory region */ /* FDT is at end of BSS unless it is in a different memory region */
......
...@@ -239,24 +239,8 @@ $(obj)/$(SPL_BIN)-pad.bin: $(obj)/$(SPL_BIN) ...@@ -239,24 +239,8 @@ $(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); \ @bss_size_str=$(shell $(NM) $< | awk 'BEGIN {size = 0} /__bss_size/ {size = $$1} END {print "ibase=16; " toupper(size)}' | bc); \
dd if=/dev/zero of=$@ bs=1 count=$${bss_size_str} 2>/dev/null; dd if=/dev/zero of=$@ bs=1 count=$${bss_size_str} 2>/dev/null;
# Pass the original device tree file through fdtgrep twice. The first pass $(obj)/$(SPL_BIN).dtb: dts/dt-spl.dtb FORCE
# removes any unwanted nodes (i.e. those which don't have the $(call if_changed,copy)
# 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second
# pass removes various unused properties from the remaining nodes.
# The output is typically a much smaller device tree file.
ifeq ($(CONFIG_TPL_BUILD),y)
fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl
else
fdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-spl
endif
quiet_cmd_fdtgrep = FDTGREP $@
cmd_fdtgrep = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \
-n /chosen -n /config -O dtb | \
$(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
$(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
$(obj)/$(SPL_BIN).dtb: dts/dt.dtb $(objtree)/tools/fdtgrep FORCE
$(call if_changed,fdtgrep)
pythonpath = PYTHONPATH=scripts/dtc/pylibfdt pythonpath = PYTHONPATH=scripts/dtc/pylibfdt
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment