
Hi Simon,
On 06/02/17 15:33, Simon Glass wrote:
Hi Andre,
On 27 January 2017 at 17:47, André Przywara andre.przywara@arm.com wrote:
On 27/01/17 21:29, Simon Glass wrote:
Hi Simon,
On 19 January 2017 at 18:53, Andre Przywara andre.przywara@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:
- 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.
- Shall we extend mkimage to allow supplying "loadable" files on the command line, which would allow to build the .itb file automatically?
Yes.
I was thinking about this a bit more, as Andrew pointed out before it may become hairy to add tons of options to mkimage. I came up with a simple shell script, mostly using here documents (cat << _EOF) to generate the .its file on the fly, adding all DTs given on the command line. It's pretty easy, yet readable and adaptable. So each platform could provide one, if needed, and could hard code things like ATF in here.
That sounds reasonable. But I do think it is valuable to support the basic case without needing a script, so long as you can do it with only a few mkimage options?
Well, the problem is that aside from the loadable name we would need to communicate at least the load address, probably also the entry point. So we could go with: $ mkimage ... -l 0x123400:some.img -l 0x876500:another.img to specify at least the load address, but that wouldn't cover entry points or other parameters. I think at this point it becomes a bit messy. My understanding is that using FDT as the base for a FIT image allows us to flexibly describe this in a source file, so we should use that features instead of stuffing more special cases into mkimage. My current thinking is: - there can be a CONFIG_FIT_SOURCE variable, which points to a board (or platform) specific .its source - there can be a CONFIG_FIT_GENERATOR symbol, which points to a generator _script_ The Makefile checks for either of those and generates the image file accordingly. In case it calls the generator script, it passes CONFIG_OF_LIST (or other parameters). I am in the process of stuffing this into the Makefile, which is not fun, really ;-)
So what do you think: Is it still worth to enhance mkimage? I would prototype this CONFIG_FIT_ approach now and we can discuss this in the series, then, I guess.
Cheers, Andre.