* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
@ 2017-11-21 12:29 Goldschmidt Simon
2017-11-22 9:04 ` Lukasz Majewski
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Goldschmidt Simon @ 2017-11-21 12:29 UTC (permalink / raw)
To: u-boot
Building spl with CONFIG_OF_EMBED enabled results in an error message
on my board: "SPL image too big". This is because the fdtgrep build
step is only executed for CONFIG_OF_SEPARATE.
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.
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@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 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
--
2.12.2.windows.2
^ permalink raw reply related [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
2017-11-21 12:29 [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep Goldschmidt Simon
@ 2017-11-22 9:04 ` Lukasz Majewski
2017-11-26 11:38 ` Simon Glass
2017-11-30 15:36 ` [U-Boot] " Tom Rini
2 siblings, 0 replies; 8+ messages in thread
From: Lukasz Majewski @ 2017-11-22 9:04 UTC (permalink / raw)
To: u-boot
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@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>
^ permalink raw reply [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
2017-11-21 12:29 [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep Goldschmidt Simon
2017-11-22 9:04 ` Lukasz Majewski
@ 2017-11-26 11:38 ` Simon Glass
2018-01-09 14:42 ` Lokesh Vutla
2017-11-30 15:36 ` [U-Boot] " Tom Rini
2 siblings, 1 reply; 8+ messages in thread
From: Simon Glass @ 2017-11-26 11:38 UTC (permalink / raw)
To: u-boot
On 21 November 2017 at 05:29, Goldschmidt Simon
<sgoldschmidt@de.pepperl-fuchs.com> wrote:
> Building spl with CONFIG_OF_EMBED enabled results in an error message
> on my board: "SPL image too big". This is because the fdtgrep build
> step is only executed for CONFIG_OF_SEPARATE.
>
> 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.
>
> 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@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(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
2017-11-26 11:38 ` Simon Glass
@ 2018-01-09 14:42 ` Lokesh Vutla
0 siblings, 0 replies; 8+ messages in thread
From: Lokesh Vutla @ 2018-01-09 14:42 UTC (permalink / raw)
To: u-boot
On Sunday 26 November 2017 05:08 PM, Simon Glass wrote:
> On 21 November 2017 at 05:29, Goldschmidt Simon
> <sgoldschmidt@de.pepperl-fuchs.com> wrote:
>> Building spl with CONFIG_OF_EMBED enabled results in an error message
>> on my board: "SPL image too big". This is because the fdtgrep build
>> step is only executed for CONFIG_OF_SEPARATE.
>>
>> 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.
>>
>> 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@de.pepperl-fuchs.com>
This is breaking SPL build with CONFIG_SPL_MULTI_DTB_FIT enabled as it
tries to call fdtgrep for shrinking all the dtbs in SPL_OF_LIST.
Thanks and regards,
Lokesh
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
2017-11-21 12:29 [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep Goldschmidt Simon
2017-11-22 9:04 ` Lukasz Majewski
2017-11-26 11:38 ` Simon Glass
@ 2017-11-30 15:36 ` Tom Rini
2 siblings, 0 replies; 8+ messages in thread
From: Tom Rini @ 2017-11-30 15:36 UTC (permalink / raw)
To: u-boot
On Tue, Nov 21, 2017 at 12:29:56PM +0000, Goldschmidt Simon wrote:
> Building spl with CONFIG_OF_EMBED enabled results in an error message
> on my board: "SPL image too big". This is because the fdtgrep build
> step is only executed for CONFIG_OF_SEPARATE.
>
> 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.
>
> 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@de.pepperl-fuchs.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171130/31fa8209/attachment.sig>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
@ 2017-11-22 9:16 Goldschmidt Simon
2017-11-22 9:24 ` Lukasz Majewski
0 siblings, 1 reply; 8+ messages in thread
From: Goldschmidt Simon @ 2017-11-22 9:16 UTC (permalink / raw)
To: u-boot
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.
>
> >
> > 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@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
^ permalink raw reply [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
2017-11-22 9:16 [U-Boot] [PATCH] " Goldschmidt Simon
@ 2017-11-22 9:24 ` Lukasz Majewski
0 siblings, 0 replies; 8+ messages in thread
From: Lukasz Majewski @ 2017-11-22 9:24 UTC (permalink / raw)
To: u-boot
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@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>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
@ 2018-01-10 6:52 Goldschmidt Simon
0 siblings, 0 replies; 8+ messages in thread
From: Goldschmidt Simon @ 2018-01-10 6:52 UTC (permalink / raw)
To: u-boot
On Tue, 09/01/18 15:43, Lokesh Vutla wrote:
> On Sunday 26 November 2017 05:08 PM, Simon Glass wrote:
> > On 21 November 2017 at 05:29, Goldschmidt Simon
> > <sgoldschmidt@de.pepperl-fuchs.com> wrote:
> >> Building spl with CONFIG_OF_EMBED enabled results in an error message
> >> on my board: "SPL image too big". This is because the fdtgrep build
> >> step is only executed for CONFIG_OF_SEPARATE.
> >>
> >> 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.
> >>
> >> 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@de.pepperl-fuchs.com>
>
> This is breaking SPL build with CONFIG_SPL_MULTI_DTB_FIT enabled as it tries
> to call fdtgrep for shrinking all the dtbs in SPL_OF_LIST.
You're right. Sorry for that. I'll send a patch that fixes this.
Simon
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-01-10 6:52 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-21 12:29 [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep Goldschmidt Simon
2017-11-22 9:04 ` Lukasz Majewski
2017-11-26 11:38 ` Simon Glass
2018-01-09 14:42 ` Lokesh Vutla
2017-11-30 15:36 ` [U-Boot] " Tom Rini
-- strict thread matches above, loose matches on Subject: below --
2017-11-22 9:16 [U-Boot] [PATCH] " Goldschmidt Simon
2017-11-22 9:24 ` Lukasz Majewski
2018-01-10 6:52 Goldschmidt Simon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox