All of lore.kernel.org
 help / color / mirror / Atom feed
From: "André Przywara" <andre.przywara@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 05/17] SPL: FIT: allow loading multiple images
Date: Mon, 27 Mar 2017 02:19:20 +0100	[thread overview]
Message-ID: <01967801-c76e-14ac-cf58-24a6b14feb09@arm.com> (raw)
In-Reply-To: <CAPnjgZ1i0VOKgnMwgmgupsk04yMphqfAAUJzZetPOh8JZ+9_sw@mail.gmail.com>

On 08/03/17 21:00, Simon Glass wrote:
> Hi Andre,
> 
> On 28 February 2017 at 19:25, Andre Przywara <andre.przywara@arm.com> 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 | 32 ++++++++++++++++++++++++++++----
>>  1 file changed, 28 insertions(+), 4 deletions(-)
>>
>> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
>> index ad5ba15..5583e09 100644
>> --- a/common/spl/spl_fit.c
>> +++ b/common/spl/spl_fit.c
>> @@ -178,10 +178,7 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
>>         if (image_info) {
>>                 image_info->load_addr = load_addr;
>>                 image_info->size = length;
>> -               if (entry == -1UL)
>> -                       image_info->entry_point = load_addr;
>> -               else
>> -                       image_info->entry_point = entry;
>> +               image_info->entry_point = entry;
> 
> Need to update function comment to indicate that it can put -1 in here.
> 
>>         }
>>
>>         return 0;
>> @@ -196,6 +193,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
>> @@ -240,6 +238,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",
>> @@ -265,5 +268,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);
> 
> Error check?
> 
>> +
>> +               /*
>> +                * If the "firmware" image did not provide an entry point,
>> +                * use the first valid entry point from the loadables.
>> +                */
>> +               if (spl_image->entry_point == -1UL &&
>> +                   image_info.entry_point != -1UL)
>> +                       spl_image->entry_point = image_info.entry_point;
>> +       }
>> +
>> +       if (spl_image->entry_point == -1UL || spl_image->entry_point == 0)
> 
> Why does 0 mean there is no entry point? I suppose that is safe, but
> would anyone use this?

So this is due to U-Boot's own Makefile, which sets
CONFIG_SYS_UBOOT_START to 0 if it isn't already defined. This then gets
passed on to mkimage -f auto as the -e argument.
So today's FIT images have 0 as an entry point - a least on sunxi.  As I
wanted to retain compatibility with that, I added this check.
Maybe sunxi (and other platforms?) should explicitly define the entry
point to avoid it being set to 0, or we should default to the load
address as the fallback in absence of such an explicit definition.

In any case I wanted to keep existing u-boot.img files booting, so I
added this safe guard here to do "the right thing (tm)".

I added a comment there to point this out.

Cheers,
Andre.

>> +               spl_image->entry_point = spl_image->load_addr;
>> +
>>         return 0;
>>  }
>> --
>> 2.8.2
>>
> 
> Regards,
> Simon
> 

  reply	other threads:[~2017-03-27  1:19 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-01  2:25 [U-Boot] [PATCH 00/17] SPL: extend FIT loading support Andre Przywara
2017-03-01  2:25 ` [U-Boot] [PATCH 01/17] armv8: spl: Call spl_relocate_stack_gd for ARMv8 Andre Przywara
2017-03-01  2:25 ` [U-Boot] [PATCH 02/17] SPL: FIT: refactor FDT loading Andre Przywara
2017-03-03  4:53   ` Simon Glass
2017-03-03 11:09     ` Andre Przywara
2017-03-08 21:01       ` Simon Glass
2017-03-14 10:52   ` Lokesh Vutla
2017-03-01  2:25 ` [U-Boot] [PATCH 03/17] SPL: FIT: rework U-Boot image loading Andre Przywara
2017-03-03  4:53   ` Simon Glass
2017-03-14 10:53   ` Lokesh Vutla
2017-03-01  2:25 ` [U-Boot] [PATCH 04/17] SPL: FIT: factor out spl_load_fit_image() Andre Przywara
2017-03-03 16:56   ` Andrew F. Davis
2017-03-03 19:03     ` Franklin S Cooper Jr
2017-03-08 21:00   ` Simon Glass
2017-03-14 10:53   ` Lokesh Vutla
2017-03-01  2:25 ` [U-Boot] [PATCH 05/17] SPL: FIT: allow loading multiple images Andre Przywara
2017-03-08 21:00   ` Simon Glass
2017-03-27  1:19     ` André Przywara [this message]
2017-04-01  4:22       ` Simon Glass
2017-03-14 10:53   ` Lokesh Vutla
2017-03-01  2:25 ` [U-Boot] [PATCH 06/17] tools: mksunxiboot: allow larger SPL binaries Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-29 14:43   ` [U-Boot] [linux-sunxi] " Olliver Schinagl
2017-03-29 14:54     ` Andre Przywara
2017-03-01  2:25 ` [U-Boot] [PATCH 07/17] armv8: SPL: only compile GIC code if needed Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 08/17] armv8: fsl: move ccn504 code into FSL Makefile Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-27  1:18     ` André Przywara
2017-03-01  2:25 ` [U-Boot] [PATCH 09/17] sunxi: A64: move SPL stack to end of SRAM A2 Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 10/17] sunxi: SPL: store RAM size in gd Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 11/17] sunxi: SPL: add FIT config selector for Pine64 boards Andre Przywara
2017-03-01  3:03   ` [U-Boot] [linux-sunxi] " Icenowy Zheng
2017-03-03  0:47     ` André Przywara
2017-03-08 21:01   ` [U-Boot] " Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 12/17] Makefile: add rules to generate SPL FIT images Andre Przywara
2017-03-03 16:58   ` Andrew F. Davis
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 13/17] sunxi: A64: Pine64: introduce FIT generator script Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 14/17] sunxi: Pine64: defconfig: enable SPL FIT support Andre Przywara
2017-03-01 15:51   ` Maxime Ripard
2017-03-01  2:25 ` [U-Boot] [PATCH 15/17] sunxi: OrangePi-PC2: " Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 16/17] sunxi: Store the device tree name in the SPL header Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-27  1:18     ` André Przywara
2017-04-01  4:22       ` Simon Glass
2017-03-01  2:25 ` [U-Boot] [PATCH 17/17] sunxi: use SPL header DT name for FIT board matching Andre Przywara
2017-03-08 21:01   ` Simon Glass
2017-03-06 11:24 ` [U-Boot] [PATCH 00/17] SPL: extend FIT loading support Kever Yang
2017-03-14 11:03 ` Dr. Philipp Tomsich

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=01967801-c76e-14ac-cf58-24a6b14feb09@arm.com \
    --to=andre.przywara@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.