[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