[U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep

Lukasz Majewski lukma at denx.de
Wed Nov 22 09:24:13 UTC 2017


Hi Simon,

> Hi Lukasz
> 
> > > Building spl with CONFIG_OF_EMBED enabled results in an error
> > > message  
> > 		    ^^^^^^^^^^^^^^^ - is the CONFIG_OF_EMBED a
> > standard feature for SPL?  
> 
> Well, it's not really a standard feature I want to use in my final
> product. But if I want to debug SPL or U-Boot on my socfpga (using
> ARM's DS-5 for Altera), I need the device tree to be included in the
> binary that the debugger downloads to the target.
> 
> That's what CONFIG_OF_EMBED is for, right? I even need this to debug
> U-Boot, as the standard procedure for my target is to first start SPL
> via the debugger, halt at a specific hardware breakpoint and the load
> U-Boot which I want to debug.
> 
> > > 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?  
> 
> No, the problem that the dtb is not stripped at all for
> CONFIG_OF_EMBED. The only thing that is stripped is
> 'spl/u-boot-spl.dtb' which is only created for CONFIG_OF_SEPARATE.

Thanks for detailed explanation.

> 
> >   
> > >
> > > 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
> > > <sgoldschmidt at 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,
> 
> Simon Goldschmidt



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: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171122/bbffb2dd/attachment.sig>


More information about the U-Boot mailing list