public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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;
>>>    }
>
>
>
>
>

  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