spl: make CONFIG_OF_EMBED pass dts through fdtgrep
PATCH 1/1 spl: make CONFIG_OF_EMBED pass dts through fdtgrep
Hi Lukasz
Quoted 3 lines
Quoted 1 line
Building spl with
CONFIG_OF_EMBEDenabled 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.
Quoted 4 lines
Quoted 2 lines
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.
Quoted 133 lines
Quoted 5 lines
Fix this by moving the fdtgrep build step ('
cmd_fdtgreo') fromscripts/Makefile.splto dts/Makefile so that the reduced dtb is available for all kinds of spl builds.Ok.
Quoted 125 lines
The resulting variable name for the embedded device tree blob changes, too, which is why
common.handfdtdec.chave tiny changes.Signed-off-by Simon Goldschmidt <[email protected]>--- dts/Makefile | 35 +++++++++++++++++++++++++++++++---- include/common.h | 1 + lib/fdtdec.c | 4 ++++ scripts/Makefile.spl | 20 ++------------------ 4 files changed, 38 insertions(+), 22 deletions(-)dts/Makefile index 3a93dafb51..c9b2a89441 renamed from dts/Makefile +0
-0100644
dts/Makefile +0
-0@@ -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)
dts/Makefile +4
-0+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 $<\
dts/Makefile +3
-0+ -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
dts/Makefile +16
-4+ $(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/dtsinclude/common.h index renamed from include/common.h +0
-0
e14e1daa88..6e24545178100644 ---a/include/common.h+++b/include/common.hinclude/common.h index renamed from include/common.h +1
-0@@ -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 blobfor SPL/TPL */ int
set_cpu_clk_info(void); intmdm_init(void); intprint_cpuinfo(void); diff --gita/lib/fdtdec.cb/lib/fdtdec.cindex45f3fe7baf..0eb0b92261100644lib/fdtdec.c +0
-0@@ -1266,7 +1266,11 @@ int fdtdec_setup(void) # endif # ifdef
CONFIG_OF_EMBEDlib/fdtdec.c +4
-0/* 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 definedCONFIG_OF_SEPARATE # ifdef CONFIG_SPL_BUILD /* FDT is at end of BSS unless it is in a different memory region */ scripts/Makefile.spl index renamed from scripts/Makefile.spl +0
-0
49b27ac926..d3c176d775100644scripts/Makefile.spl +0
-0@@ -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.scripts/Makefile.spl +0
-5-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 $<\
scripts/Makefile.spl +0
-3- -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
scripts/Makefile.spl +2
-1- $(call if_changed,fdtgrep) +$(obj)/$(SPL_BIN).dtb: dts/dt-spl.dtb FORCE + $(call if_changed,copy)
Quoted 2 lines
Quoted 2 lines
pythonpath = PYTHONPATH=tools
Best regards,
Simon Goldschmidt
PATCH 1/1 spl: make CONFIG_OF_EMBED pass dts through fdtgrep
Hi Simon,
Quoted 17 lines
Hi Lukasz
Quoted 4 lines
Quoted 2 lines
Building spl with
CONFIG_OF_EMBEDenabled results in an error message^^^^^^^^^^^^^^^ - is the CONFIG_OF_EMBED astandard 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_EMBEDis 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.
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
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 forCONFIG_OF_SEPARATE.
Thanks for detailed explanation.
Quoted 136 lines
Quoted 136 lines
Quoted 6 lines
Fix this by moving the fdtgrep build step ('
cmd_fdtgreo') fromscripts/Makefile.splto dts/Makefile so that the reduced dtb is available for all kinds of spl builds.Ok.
Quoted 127 lines
The resulting variable name for the embedded device tree blob changes, too, which is why
common.handfdtdec.chave tiny changes.Signed-off-by: Simon Goldschmidt
<[email protected]> ---dts/Makefile | 35 +++++++++++++++++++++++++++++++---- include/common.h | 1 + lib/fdtdec.c | 4 ++++ scripts/Makefile.spl | 20 ++------------------ 4 files changed, 38 insertions(+), 22 deletions(-)dts/Makefile index renamed from dts/Makefile +0
-0
3a93dafb51..c9b2a89441100644dts/Makefile +0
-0@@ -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)
dts/Makefile +7
-1+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
dts/Makefile +7
-2+ $(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 FORCEdts/Makefile +7
-2+ $(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/dtsinclude/common.h index renamed from include/common.h +0
-0
e14e1daa88..6e24545178100644 ---a/include/common.h+++b/include/common.hinclude/common.h index renamed from include/common.h +0
-0@@ -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 devicetree blob for SPL/TPL */ int
set_cpu_clk_info(void); intmdm_init(void); intprint_cpuinfo(void); diff --gita/lib/fdtdec.cb/lib/fdtdec.cindex45f3fe7baf..0eb0b92261100644lib/fdtdec.c +0
-0@@ -1266,7 +1266,11 @@ int fdtdec_setup(void) # endif # ifdef
CONFIG_OF_EMBEDlib/fdtdec.c +4
-0/* 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 definedCONFIG_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..d3c176d775100644scripts/Makefile.spl +0
-0@@ -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)scripts/Makefile.spl +0
-8-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
scripts/Makefile.spl +2
-1- $(call if_changed,fdtgrep) +$(obj)/$(SPL_BIN).dtb: dts/dt-spl.dtb FORCE + $(call if_changed,copy)
Quoted 6 lines
Quoted 2 lines
Quoted 2 lines
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>