From: Kever Yang <kever.yang@rock-chips.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH 04/11] SPL: FIT: allow loading multiple images
Date: Mon, 23 Jan 2017 10:49:05 +0800 [thread overview]
Message-ID: <58856F21.1010409@rock-chips.com> (raw)
In-Reply-To: <f9f04aa4-7252-225c-acd9-38196a1131f4@arm.com>
Hi Andre,
On 01/22/2017 06:58 PM, Andr? Przywara wrote:
> On 22/01/17 07:08, Kever Yang wrote:
>> Hi Andre,
>>
>> Thanks for your patches, this is great help for enable ATF on U-Boot
>> SPL.
>> For ATF use case, we would like to identify which one is bl31 for we
>> need to
>> get entry point for it while we only need load address for other image.
>> Any idea on get this information from different "loadables"?
> So I thought this use case is covered by the current scheme?
>
> See below ...
>
>> On 01/20/2017 09:53 AM, Andre Przywara wrote:
>>> So far we were not using the FIT image format to its full potential:
>>> The SPL FIT loader was just loading the first image from the /images
>>> node plus one of the listed DTBs.
>>> Now with the refactored loader code it's easy to load an arbitrary
>>> number of images in addition to the two mentioned above.
>>> As described in the FIT image source file format description, iterate
>>> over all images listed at the "loadables" property in the configuration
>>> node and load every image at its desired location.
>>> This allows to load any kind of images:
>>> - firmware images to execute before U-Boot proper (for instance
>>> ARM Trusted Firmware (ATF))
>>> - firmware images for management processors (SCP, arisc, ...)
>>> - firmware images for devices like WiFi controllers
>>> - bit files for FPGAs
>>> - additional configuration data
>>> - kernels and/or ramdisks
>>> The actual usage of this feature would be platform and/or board specific.
>>>
>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>> ---
>>> common/spl/spl_fit.c | 27 +++++++++++++++++++++++++++
>>> 1 file changed, 27 insertions(+)
>>>
>>> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
>>> index d4149c5..18269f7 100644
>>> --- a/common/spl/spl_fit.c
>>> +++ b/common/spl/spl_fit.c
>>> @@ -190,6 +190,7 @@ int spl_load_simple_fit(struct spl_image_info
>>> *spl_image,
>>> struct spl_image_info image_info;
>>> int node, images;
>>> int base_offset, align_len = ARCH_DMA_MINALIGN - 1;
>>> + int index = 0;
>>> /*
>>> * Figure out where the external images start. This is the base
>>> for the
>>> @@ -234,6 +235,11 @@ int spl_load_simple_fit(struct spl_image_info
>>> *spl_image,
>>> if (node < 0) {
>>> debug("could not find firmware image, trying loadables...\n");
>>> node = spl_fit_get_image_node(fit, images, "loadables", 0);
>>> + /*
>>> + * If we pick the U-Boot image from "loadables", start at
>>> + * the second image when later loading additional images.
>>> + */
>>> + index = 1;
>>> }
>>> if (node < 0) {
>>> debug("%s: Cannot find u-boot image node: %d\n",
>>> @@ -259,5 +265,26 @@ int spl_load_simple_fit(struct spl_image_info
>>> *spl_image,
>>> image_info.load_addr = spl_image->load_addr + spl_image->size;
>>> spl_load_fit_image(info, sector, fit, base_offset, node,
>>> &image_info);
>>> + /* Now check if there are more images for us to load */
>>> + for (; ; index++) {
>>> + node = spl_fit_get_image_node(fit, images, "loadables", index);
>>> + if (node < 0)
>>> + break;
>>> +
>>> + spl_load_fit_image(info, sector, fit, base_offset, node,
>>> + &image_info);
>>> +
>>> + /*
>>> + * If the "firmware" image did not provide an entry point,
>>> + * use the first valid entry point from the loadables.
>>> + */
>>> + if (spl_image->entry_point == -1U &&
>>> + image_info.entry_point != -1U)
>>> + spl_image->entry_point = image_info.entry_point;
> So this part here saves the entry point from the first image which
> provides an "entry" property in the loadables section, given that
> "firmware" didn't provide (a legal) one.
>
> So depending on what you want, these are the options:
> a) You want to branch to U-Boot (default case if mkimage -f auto is
> used): You either don't specify an explicit entry point at all or
> provide an "entry" property for the U-Boot "firmware" image.
> The code below at the end of this function takes care of this.
> b) You want to branch to something else (bl31.bin): You make sure there
> is no explicit entry point in "firmware", instead put one "entry"
> property in the bl31 image description you want to boot. This will then
> branch to that instead of U-Boot.
> Check the example .its in patch 10/11 for an example of this.
>
> So does this fit for you? Or is there a problem with this?
So that means only one 'entry' can be present even if there are more
than one image, right?
I think every "firmware" image is possible to have both "load" and
"entry" node,
for example if we have bl31, bl32 and bl33(U-Boot) in one FIT image,
then we need to fill the bl31_params_t structure with bl32 entry point
and U-Boot entry point,
so that bl31 able to call bl32 and bl33.
That's why I think we need to identify each of the "firmware", but not
only know they are
"loadables".
Thanks,
- Kever
>>> + }
>>> +
>>> + if (spl_image->entry_point == -1U || spl_image->entry_point == 0)
>>> + spl_image->entry_point = spl_image->load_addr;
> This statement here takes the load address of the "firmware" image as an
> entry point if none is provided explicitly.
>
> Cheers,
> Andre.
>
>>> +
>>> return 0;
>>> }
>
>
>
>
>
next prev parent reply other threads:[~2017-01-23 2:49 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-20 1:53 [U-Boot] [RFC PATCH 00/11] extend FIT loading support (plus Pine64/ATF support) Andre Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 01/11] SPL: FIT: refactor FDT loading Andre Przywara
2017-01-23 8:56 ` Lokesh Vutla
2017-01-27 21:29 ` Simon Glass
2017-01-28 0:38 ` André Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 02/11] SPL: FIT: rework U-Boot image loading Andre Przywara
2017-01-23 8:56 ` Lokesh Vutla
2017-01-27 21:29 ` Simon Glass
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 03/11] SPL: FIT: factor out spl_load_fit_image() Andre Przywara
2017-01-22 7:16 ` Kever Yang
2017-01-22 10:42 ` André Przywara
2017-01-23 2:37 ` Kever Yang
2017-01-23 8:53 ` Lokesh Vutla
2017-01-23 12:58 ` Tom Rini
2017-01-23 13:31 ` Lokesh Vutla
2017-01-23 13:50 ` Tom Rini
2017-01-23 23:07 ` André Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 04/11] SPL: FIT: allow loading multiple images Andre Przywara
2017-01-22 7:08 ` Kever Yang
2017-01-22 10:58 ` André Przywara
2017-01-23 2:49 ` Kever Yang [this message]
2017-01-23 12:47 ` Michal Simek
2017-01-23 23:52 ` André Przywara
2017-01-23 8:57 ` Lokesh Vutla
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 05/11] tools: mksunxiboot: allow larger SPL binaries Andre Przywara
2017-01-21 4:24 ` Siarhei Siamashka
2017-01-21 11:17 ` André Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 06/11] sunxi: A64: SPL: allow large SPL binary Andre Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 07/11] sunxi: A64: move SPL stack to end of SRAM A2 Andre Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 08/11] sunxi: SPL: add FIT config selector for Pine64 boards Andre Przywara
2017-01-20 21:35 ` Maxime Ripard
2017-01-20 21:55 ` André Przywara
2017-01-21 2:16 ` [U-Boot] [linux-sunxi] " Icenowy Zheng
2017-01-21 2:16 ` Icenowy Zheng
2017-01-21 4:05 ` [U-Boot] " Siarhei Siamashka
2017-01-21 15:15 ` André Przywara
2017-01-23 17:29 ` Maxime Ripard
2017-01-23 22:55 ` André Przywara
2017-01-26 10:55 ` Maxime Ripard
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 09/11] sunxi: Pine64: defconfig: enable SPL FIT support Andre Przywara
2017-01-20 21:36 ` Maxime Ripard
2017-01-20 21:55 ` André Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 10/11] sunxi: Pine64: add FIT image source Andre Przywara
2017-01-20 1:53 ` [U-Boot] [RFC PATCH 11/11] SPL: SPI: sunxi: add SPL FIT image support Andre Przywara
2017-01-20 21:37 ` Maxime Ripard
2017-01-20 21:58 ` André Przywara
2017-01-20 17:02 ` [U-Boot] [RFC PATCH 00/11] extend FIT loading support (plus Pine64/ATF support) Andrew F. Davis
2017-01-20 17:17 ` Andre Przywara
2017-01-20 17:35 ` Andrew F. Davis
2017-01-20 17:48 ` Andre Przywara
2017-01-20 19:07 ` [U-Boot] [linux-sunxi] " Icenowy Zheng
2017-01-20 22:21 ` [U-Boot] " André Przywara
2017-01-27 21:29 ` Simon Glass
2017-01-28 1:47 ` André Przywara
2017-02-06 15:33 ` Simon Glass
2017-02-06 16:09 ` Andre Przywara
2017-02-06 16:17 ` Andrew F. Davis
2017-02-06 16:32 ` Andre Przywara
2017-02-06 16:37 ` Andrew F. Davis
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=58856F21.1010409@rock-chips.com \
--to=kever.yang@rock-chips.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox