Hi Simon, > Building spl with CONFIG_OF_EMBED enabled results in an error message ^^^^^^^^^^^^^^^ - is the CONFIG_OF_EMBED a standard feature for SPL?
> on my board: "SPL image too big". This is because the fdtgrep build > step is only executed for CONFIG_OF_SEPARATE. So the problem is with not enough runs of dtb stripping? > > 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. Ok. > > 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: Simon Goldschmidt <sgoldschm...@de.pepperl-fuchs.com> > --- > dts/Makefile | 35 +++++++++++++++++++++++++++++++---- > include/common.h | 1 + > lib/fdtdec.c | 4 ++++ > scripts/Makefile.spl | 20 ++------------------ > 4 files changed, 38 insertions(+), 22 deletions(-) > > diff --git a/dts/Makefile b/dts/Makefile > index 3a93dafb51..c9b2a89441 100644 > --- a/dts/Makefile > +++ b/dts/Makefile > @@ -22,10 +22,29 @@ DTB := $(ARCH_PATH)/$(DEVICE_TREE).dtb > dtb_depends += $(DTB:.dtb=.dts) > 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 > $(call if_changed,shipped) > > -targets += dt.dtb > +targets += dt.dtb dt-spl.dtb > > $(DTB): $(dtb_depends) > ifeq ($(EXT_DTB),) > @@ -42,14 +61,22 @@ endif > arch-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 > +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 > subdir- > += ../arch/arm/dts ../arch/microblaze/dts ../arch/mips/dts > ../arch/sandbox/dts ../arch/x86/dts > diff --git a/include/common.h b/include/common.h index > e14e1daa88..6e24545178 100644 --- a/include/common.h > +++ b/include/common.h > @@ -201,6 +201,7 @@ int last_stage_init(void); > extern ulong monitor_flash_len; > int mac_read_from_eeprom(void); > 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 mdm_init(void); > int print_cpuinfo(void); > diff --git a/lib/fdtdec.c b/lib/fdtdec.c > index 45f3fe7baf..0eb0b92261 100644 > --- a/lib/fdtdec.c > +++ b/lib/fdtdec.c > @@ -1266,7 +1266,11 @@ int fdtdec_setup(void) > # endif > # ifdef CONFIG_OF_EMBED > /* Get a pointer to the FDT */ > +# ifdef CONFIG_SPL_BUILD > + gd->fdt_blob = __dtb_dt_spl_begin; > +# else > gd->fdt_blob = __dtb_dt_begin; > +# endif > # elif defined CONFIG_OF_SEPARATE > # ifdef CONFIG_SPL_BUILD > /* FDT is at end of BSS unless it is in a different memory > region */ diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl > index 49b27ac926..d3c176d775 100644 > --- a/scripts/Makefile.spl > +++ b/scripts/Makefile.spl > @@ -238,24 +238,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); \ dd if=/dev/zero of=$@ bs=1 count=$${bss_size_str} > 2>/dev/null; -# Pass the original device tree file through fdtgrep > 2>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)/$(SPL_BIN).dtb: dts/dt.dtb $(objtree)/tools/fdtgrep FORCE > - $(call if_changed,fdtgrep) > +$(obj)/$(SPL_BIN).dtb: dts/dt-spl.dtb FORCE > + $(call if_changed,copy) > > pythonpath = PYTHONPATH=tools > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
pgpeRgOOmkH6k.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot