[U-Boot] [PATCH PATCH v4 15/15] spl: fit: Allow the board to tell if more images must be loaded from FIT

Simon Glass sjg at chromium.org
Tue Aug 13 09:34:03 UTC 2019


On Mon, 5 Aug 2019 at 03:44, Jean-Jacques Hiblot <jjhiblot at ti.com> wrote:
>
> spl_fit_get_image_name() is used to get the names of the images that the
> SPL must load from the FIT. It relies on the content of a property present
> in the FIT. The list of images is thus statically defined in the FIT.
> With this scheme, it becomes quickly hard to manage combinations of more

quickly becomes

> than a hand few of images.

handful of images

> To address this problem, give the board driver code the opportunity to
> add to the list of images. The images from the FIT property are loaded
> first, and then the board_get_fit_loadable() is called to get more image
> names.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
>
> ---
>
> Changes in v4:
> - Use the board driver infrastructure to get the image names from the
> board code.
>
> Changes in v3:
> - removed the RFC prefix. This work will be needed soon by TI's AM65x
> platform. and can probably benefit other modular platforms
> - removed the last patch that provided an example of how to use this with
> on a DRA76.
> - removed the patch that made u-boot.img a symlink to u-boot.itb because
> it breaks the build of many platforms (because files required to build the
> ITB are missing)
> - removed the patch to reduce the footprint of the am335x SPL. (already
> merged)
> - Made the boot flow more permissive (don't fail immediately if an overlay
> is not present) and more verbose when an error occures
> - handle the dependencies of the FIT generation in a more generic way
> - use a dedicated kconfig option to enable the application of the overlays
> by the SPL.
>
> Changes in v2:
> - reworked board_fit_get_additionnal_images() and how it used in spl_fit.c
> - removed dtbo generation from dtso files and use .dts extension for the
>   overlays
> - add dynamic allocation usage in a separate patch
> - defconfig change for the am335x_evm
>
>  common/spl/spl_fit.c | 24 +++++++++++++++++++++---
>  1 file changed, 21 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg at chromium.org>


>
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 2f555a2f13..2879b76578 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -6,6 +6,7 @@
>
>  #include <common.h>
>  #include <errno.h>
> +#include <board.h>
>  #include <fpga.h>
>  #include <image.h>
>  #include <malloc.h>
> @@ -41,10 +42,12 @@ static int spl_fit_get_image_name(const void *fit, int images,
>                                   const char *type, int index,
>                                   const char **outname)
>  {
> +       struct udevice *board;
>         const char *name, *str;
>         __maybe_unused int node;
>         int conf_node;
>         int len, i;
> +       bool found = true;
>
>         conf_node = fit_find_config_node(fit);
>         if (conf_node < 0) {
> @@ -70,12 +73,27 @@ static int spl_fit_get_image_name(const void *fit, int images,
>         for (i = 0; i < index; i++) {
>                 str = strchr(str, '\0') + 1;
>                 if (!str || (str - name >= len)) {
> -                       debug("no string for index %d\n", index);
> -                       return -E2BIG;
> +                       found = false;
> +                       break;
>                 }
>         }
>
> -       *outname = (char *)str;
> +       if (!found && !board_get(&board)) {
> +               /*
> +                * no string in the property for this index. Check if the board
> +                * level code can supply one.

board-level


> +                */
> +               str = board_get_fit_loadable(board, index - i - 1, type);
> +               if (str)
> +                       found = true;
> +       }
> +
> +       if (!found) {
> +               debug("no string for index %d\n", index);
> +               return -E2BIG;
> +       }
> +
> +       *outname = str;
>         return 0;
>  }
>
> --
> 2.17.1
>


More information about the U-Boot mailing list