[U-Boot] [PATCH 00/27] spl: Use linker list and parameters for SPL image loading
Tom Rini
trini at konsulko.com
Mon Sep 19 23:46:32 CEST 2016
On Sun, Sep 18, 2016 at 06:57:01PM -0600, Simon Glass wrote:
> Hi Tom,
>
> On 18 September 2016 at 16:14, Tom Rini <trini at konsulko.com> wrote:
> > On Sun, Sep 18, 2016 at 01:44:49PM -0600, Simon Glass wrote:
> >
> >> At present the SPL code uses a global spl_image variable which is shared
> >> amongst lots of files, some in common/spl and some elsewhere. There is no
> >> need for this to be global, and in fact a parameter makes it easier to
> >> understand what information the functions act on. It also reduces the BSS
> >> use in the SPL (at the expense of stack) which is useful on boards which
> >> don't have BSS available early on.
> >
> > Thanks for taking a stab at cleaning this up.
>
> I ran into it with the 64-bit x86 stuff and decided to take a detour :-)
>
> >
> > [snip]
> >> There is a priorty value attached to each loader which should allow the
> >> existing ordering to be maintained.
> >
> > I worry here about some of the corner cases, but it's probably no more
> > or less fragile than currently at least. I'm actually not sure how
> > that's working in this version of the series, everyone gets priority 0
> > filled in so it seems like we're on linker order. But I'm also not
> > convinced that it's a problem here. As far as I can recall, the use
> > cases are that a given binary will support say NAND and MMC, and at run
> > time knows that it came from NAND or MMC, and thus we need to look at
> > the same device for U-Boot itself. So order doesn't matter there. So
> > we can just drop that part I think.
>
> I see in the code that if Ubifs is enabled, it uses that instead of
> NAND and ONENAND. There is another case too - SPI might have a
> board-specific loader which takes precedence (although I suspect in
> the sunxi case the generic loader is not present).
>
> If these are not needed then we can drop it.
>
> At present priority is handled by adding the priority value into the
> linker list element name. Since they are sorted in order within the
> image, this gives the required result.
Looking over the code, UBI is setup as mutually exclusive. It also
looks like that SPL_SPI_BOOT, SPL_SPI_SUNXI and SPL_SPI_LOAD are all
exclusive as well. So we should clean that up so that we select the
right back end if SPL_SPI is set, and we can drop the order part.
> >> Code size is about 20 bytes larger on average which I think is acceptable.
> >> The BSS size drops by about 64 bytes, but really this just transfers to
> >> the stack.
> >
> > How about the worst case growths in what we have today?
>
> Ah well that's something buildman cannot tell me! There is a small
> overhead for the lookup code (about 20-30 bytes) and 8-12 bytes for
> each loader method. Here's the buildman summary.
>
> $ buildman -b spl -s --step 0 -S
> boards.cfg is up to date. Nothing to do.
> Summary of 2 commits for 1196 boards (32 threads, 1 job per thread)
> 01: Makefile: Give a build error if ad-hoc CONFIG options are added
> blackfin: + cm-bf527 bf609-ezkit bf537-stamp
> sparc: + grsim grsim_leon2 gr_cpci_ax2000 gr_xc3s_1500 gr_ep2s60
> nios2: + 10m50 3c120
> microblaze: + microblaze-generic
> openrisc: + openrisc-generic
> 28: spl: Make spl_boot_list a local variable
> aarch64: (for 51/51 boards) spl/u-boot-spl:all +36.8
> spl/u-boot-spl:bss -6.3 spl/u-boot-spl:data +5.6
> spl/u-boot-spl:rodata +7.5 spl/u-boot-spl:text +29.9
> powerpc: (for 415/415 boards) spl/u-boot-spl:all -24.7
> spl/u-boot-spl:bss -0.1 spl/u-boot-spl:data -0.1
> spl/u-boot-spl:rodata -15.9 spl/u-boot-spl:text -8.6
> sandbox: (for 3/3 boards) spl/u-boot-spl:all +37.3
> spl/u-boot-spl:bss -10.7 spl/u-boot-spl:rodata +10.7
> spl/u-boot-spl:text +37.3
> arm: (for 552/552 boards) all -0.8 bss -0.8 data -0.1
> spl/u-boot-spl:all -66.3 spl/u-boot-spl:bss -22.3
> spl/u-boot-spl:data -5.1 spl/u-boot-spl:rodata +0.5
> spl/u-boot-spl:text -39.3
You should have a bit more output :) Adding in -d will list every board
and then what I do (since I do -SCdvel and -Ssdel after to log it) is
read over the list and manually look at the deviations.
> >> There is an obvious follow-on from this, to move boot_name_table[] into the
> >> same linker list struct (i.e. add a name field to struct spl_image_loader).
> >> The complication here is that we don't want naming if
> >> CONFIG_SPL_LIBCOMMON_SUPPORT is not enabled, since it bloats the code. In
> >> addition I think that common/spl/spl.c can be tidied up a little.
> >
> > Yeah, I worry about size growth in doing that too. But maybe we can be
> > a little clever when declaring the ll and just not have the strings if
> > !LIBCOMMON ?
>
> Yes I think so...perhaps someone else might take a look, or I'll wait
> for a rainy day!
Sounds good enough for now, thanks.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/d2e063f7/attachment.sig>
More information about the U-Boot
mailing list