[U-Boot] [RFC PATCH 00/11] extend FIT loading support (plus Pine64/ATF support)

Simon Glass sjg at chromium.org
Fri Jan 27 22:29:58 CET 2017


Hi Andre,

On 19 January 2017 at 18:53, Andre Przywara <andre.przywara at arm.com> wrote:
> Currently the FIT format is not used to its full potential in the SPL:
> It only loads the first image from the /images node and appends the
> proper FDT.
> Some boards and platforms would benefit from loading more images before
> starting U-Boot proper, notably Allwinner A64 and ARMv8 Rockchip boards,
> which use an ARM Trusted Firmware (ATF) image to be executed before U-Boot.
>
> This series tries to solve this in a board agnostic and generic way:
> We extend the SPL FIT loading scheme to allow loading multiple images.
> So apart from loading the image which is referenced by the "firmware"
> property in the respective configuration node and placing the DTB right
> behind it, we iterate over all strings in the "loadable" property.
> Each image referenced there will be loaded to its specified load address.
> The entry point U-Boot eventually branches to will be taken from the
> first image to explicitly provide the "entry" property, or, if none
> of them does so, from the load address of the "firmware" image.
> This keeps the scheme compatible with the FIT images our Makefile creates
> automatically at the moment.
>
> Apart from the already mentioned ATF scenario this opens up more usage
> scenarios, of which the commit message of patch 04/11 lists some.
>
> The first three patches rework the SPL FIT support to be more flexible
> and to allow easier usage in the fourth patch, which introduces the
> multiple-image loading facility.
> The remaining patches enable that support for the Pine64 board to make
> its SPL support finally useful and to demonstrate usage of this scheme:
> patches 5-7 extend the usable SPL size by about 4 KB to allow AArch64
> compilation of the SPL with FIT support enabled. Patch 8 implements the
> board selector routine, which selects either the Pine64 or Pine64+ DTB
> depending on the detected DRAM size. Patch 9 enables SPL FIT support in
> the Pine64 defconfig.
> To demonstrate the usage, patch 10 provides a FIT source file, which
> loads and executes ATF before the U-Boot proper. Users are expected to
> compile this with "mkimage -f boards/sunxi/pine64_atf.its -E pine64.itb",
> then write the resulting file behind the SPL on an SD card (or any other
> U-Boot supported boot media, for that matter).
> Patch 11 then adds FIT support to the sunxi SPL SPI loading routine,
> which allows to load ATF on boards with SPI flash as well.
>
> Questions:
> 1) Is this scheme the right one (usage of "firmware" and "loadables",
>    determination of entry point)? Shall we make use of the "setup"
>    property?

Seems reasonable to me.

> 2) Shall we extend mkimage to allow supplying "loadable" files on the
>    command line, which would allow to build the .itb file automatically?

Yes.

> 3) Is providing the .its source file for a (family of) boards the right
>    way?

Where needed (i.e. the mkimage command line is not trivial)

> 4) Does this break any boards which already use SPL FIT loading?

Probably not, but I'm sure it would be spotted if so.

>
> And for the Pine64 part:
> 5) Is extending the usable SPL size like in patch 5-7 acceptable?
>
> I have a more generic solution for the .dtb selection in mind: Based on
> some patch from Siarhei we store the .dtb filename in the SPL header and
> select the .dtb from the FIT image by simply matching the name. This would
> allow _one_ build supporting multiple boards. The actual board name would
> need to written into the SPL header or could be copied from there when
> updating the image.
> I can provide the patches once we agreed upon this series.
>
> Please let me know what you think!

I think it is a nice piece of work. You might want to make the new
feature optional if it saves code space.

FIT is preferable to a raw binary image. There is also binman which
can create binary images with things placed as you wish, but it's best
to use FIT where you can.

A few more things:

- Can you make sure that your new node structure is clearly documented
(with an example) in doc/uImage.FIT/ ?
- Can you add a pytest for sandbox_spl, which verifies that everything
is loaded correctly? As an alternative I suppose you could adjust
test-fit.py (which should move to pytest)

Regards,
Simon


More information about the U-Boot mailing list