Skip to contentSkip to conversation

spl: make CONFIG_OF_EMBED pass dts through fdtgrep

PATCH New Goldschmidt Simon 2 participants 2 messages Nov 22, 2017

lore
Share & tools
lore
#0 lore raw

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_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.

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') from scripts/Makefile.spl to 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.h and fdtdec.c have tiny changes.

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

100644

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/dts
include/common.h index renamed from include/common.h +0 -0

e14e1daa88..6e24545178 100644 --- a/include/common.h +++ b/include/common.h

include/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 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

lib/fdtdec.c +0 -0
@@ -1266,7 +1266,11 @@ int fdtdec_setup(void)  # endif  # ifdef

CONFIG_OF_EMBED

lib/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 defined CONFIG_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..d3c176d775 100644

scripts/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

#1 lore raw

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_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.

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 for CONFIG_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') from scripts/Makefile.spl to 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.h and fdtdec.c have 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..c9b2a89441 100644

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 +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 FORCE

dts/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/dts
include/common.h index renamed from include/common.h +0 -0

e14e1daa88..6e24545178 100644 --- a/include/common.h +++ b/include/common.h

include/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 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

lib/fdtdec.c +0 -0
@@ -1266,7 +1266,11 @@ int fdtdec_setup(void)  # endif  # ifdef

CONFIG_OF_EMBED

lib/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 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

scripts/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>