From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep
Date: Wed, 22 Nov 2017 10:24:13 +0100 [thread overview]
Message-ID: <20171122102413.51ea7f5d@jawa> (raw)
In-Reply-To: <FD897F46D140444CAB8DC80B08F0742B0185AC820E@PFDE-MX11.EU.P-F.BIZ>
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>
next prev parent reply other threads:[~2017-11-22 9:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-22 9:16 [U-Boot] [PATCH] spl: make CONFIG_OF_EMBED pass dts through fdtgrep Goldschmidt Simon
2017-11-22 9:24 ` Lukasz Majewski [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-01-10 6:52 Goldschmidt Simon
2017-11-21 12:29 Goldschmidt Simon
2017-11-22 9:04 ` Lukasz Majewski
2017-11-26 11:38 ` Simon Glass
2018-01-09 14:42 ` Lokesh Vutla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171122102413.51ea7f5d@jawa \
--to=lukma@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.