Commit 83edd93f authored by Simon Glass's avatar Simon Glass

RFC: sunxi: Enable SPL FIT support

Enable SPL FIT support for the Linksprite pcDuino3 as an example of how this
feature is used.

This is only for demonstration purposes and is not to be applied.
Series-to: u-boot
Series-cc: trini, hans
Cover-letter:
spl: Support loading a FIT image containing U-Boot
We need a way to support more than one board per binary in U-Boot with
device tree. Various methods have been discussed. The one that seems to make
the most sense is to adjust SPL so that it can load a FIT which contains
U-Boot and several device tree binaries. This is how things with with Linux:
load a FIT and select the correct device tree to pass to Linux.

This series:

- Adjusts the build system to optionally build a u-boot.img in FIT format
that includes the U-Boot binary and >1 device tree files
- Adjusts SPL to support loading this
- Adds a way for SPL to determine which device tree to select (by calling a
board-specific function)
- Adjusts SPL to pass this selected device tree to U-Boot when it starts

It would be painful to require an .its file for each board just to support
this feature. In any case various people have commented that it would be
nice not to have to write this file in general. Therefore, this series
enhances mkimage to automatically generate a FIT without a .its file. So far
it understands how to add a main image and a number of device tree files. It
does not support hashing or verified boot as yet.

One problem with the FIT format as it stands is that all the data is inline.
This means that the entire file must be read in order to figure out what
device-tree files are available. It is then possible to copy the images into
place.

This is not really suitable for SPL since copying can be slow, and reading
unnecessary data would make the FIT format less efficient than the legacy
format.

Therefore this series adds a new feature to FIT which allows the images to
be stored immediately after the FIT itself ends. This makes the FIT very
small. It can be read quickly and in its entirety. Then the images can be
loaded one by one as needed. This allows SPL to support FITs containing lots
of images very efficiently.

To achieve this, mkimage is enhanced to convert between the 'normal' and
'external' version of a FIT file. The latter is only used for the SPL loader.
The main difference is that viewing an 'external' FIT will not show the
contents of each image.

This series also includes a few other tidy-ups, such as moving mkimage's
tricky argument-processing code to use getopt().

NOTE: There are a few problems remaining with the Kconfig conversion. I'm
still fiddling with this but thought it best to send this series out for
comment in the meantime.

This series is available at u-boot-fdt/spl-working.
END
Signed-off-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
parent 86498318
......@@ -103,6 +103,11 @@ static int gpio_init(void)
return 0;
}
int board_fit_config_name_match(const char *name)
{
return strcmp(name, "sun7i-a20-pcduino3");
}
int spl_board_load_image(void)
{
debug("Returning to FEL sp=%x, lr=%x\n", fel_stash.sp, fel_stash.lr);
......
......@@ -14,3 +14,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SUNXI_GMAC,AHCI,SATAPWR=SUNXI_GPH(2)"
CONFIG_CMD_GPIO=y
CONFIG_ETH_DESIGNWARE=y
CONFIG_USB_EHCI_HCD=y
CONFIG_FIT=y
CONFIG_SPL_OF_LIBFDT=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_OF_LIST="sun7i-a20-pcduino3 sun7i-a20-bananapro"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment