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

Lukasz Majewski lukma at denx.de
Wed Nov 22 09:04:50 UTC 2017


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 <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,

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/931a53b3/attachment.sig>


More information about the U-Boot mailing list