[U-Boot] [PATCH PATCH v3 01/12] spl: fit: Add support for applying DT overlay

Simon Glass sjg at chromium.org
Sat Jun 22 19:09:16 UTC 2019


On Thu, 23 May 2019 at 11:39, Jean-Jacques Hiblot <jjhiblot at ti.com> wrote:
>
> From: Michal Simek <michal.simek at xilinx.com>
>
> doc/uImage.FIT/overlay-fdt-boot.txt is describing how to create FIT
> image with DT overlays in it.
> Add support for this feature to SPL.
>
> Here is the ZynqMP fragment where dtb points to full DT and dtbo is
> overlay which should be applied on the top of dtb.
> config {
>         description = "ATF with full u-boot overlay";
>         firmware = "atf";
>         loadables = "uboot";
>         fdt = "dtb", "dtbo";
> };
>
> The whole feature depends on OF_LIBFDT_OVERLAY which is adding +4kB code
> and 0 for platforms which are not enabling this feature.
>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
>
> ---
>
> Changes in v3:
> - Add a new config option: SPL_LOAD_FIT_APPLY_OVERLAY. By default, it is
> not selected.
>
> Changes in v2: None
>
>  Kconfig              | 10 ++++++++++
>  common/spl/spl_fit.c | 27 +++++++++++++++++++++++++--
>  2 files changed, 35 insertions(+), 2 deletions(-)

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

nits below

>
> diff --git a/Kconfig b/Kconfig
> index 5f5c5ccfd6..8197c9066a 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -398,6 +398,16 @@ config SPL_LOAD_FIT
>           particular it can handle selecting from multiple device tree
>           and passing the correct one to U-Boot.
>
> +config SPL_LOAD_FIT_APPLY_OVERLAY
> +       bool "Enable SPL applying DT overlays from FIT"
> +       depends on SPL_LOAD_FIT
> +       select OF_LIBFDT_OVERLAY
> +       default n

this is the default anyway so you can omit this line

> +       help
> +         The device tree is loaded from the FIT image. Allow the SPL is to
> +         also load device-tree overlays from the FIT image an apply them
> +         over the device tree.

Where are the instructions for this? At least add a pointer to a
README somewhere else.

> +
>  config SPL_LOAD_FIT_FULL
>         bool "Enable SPL loading U-Boot as a FIT"
>         select SPL_FIT
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 87ecf0bb9e..3fbcb969f8 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -278,10 +278,10 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image,
>                               void *fit, int images, ulong base_offset)
>  {
>         struct spl_image_info image_info;
> -       int node, ret;
> +       int node, ret, index = 0;
>
>         /* Figure out which device tree the board wants to use */
> -       node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, 0);
> +       node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index++);
>         if (node < 0) {
>                 debug("%s: cannot find FDT node\n", __func__);
>                 return node;
> @@ -303,8 +303,31 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image,
>  #if !CONFIG_IS_ENABLED(FIT_IMAGE_TINY)
>         /* Try to make space, so we can inject details on the loadables */
>         ret = fdt_shrink_to_minimum(spl_image->fdt_addr, 8192);
> +       if (ret < 0)
> +               return ret;
>  #endif
> +#if defined(CONFIG_SPL_LOAD_FIT_APPLY_OVERLAY)

Can you use if (CONFIG_IS_ENABLED()) so that this builds with sandbox?

Actually we should really enable this with sandbox, too, so we can add a test.

> +       for (; ; index++) {
> +               node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index);
> +               if (node < 0) {
> +                       debug("%s: No additional FDT node\n", __func__);
> +                       return 0;
> +               }
>
> +               ret = spl_load_fit_image(info, sector, fit, base_offset, node,
> +                                        &image_info);
> +               if (ret < 0)
> +                       return ret;
> +
> +               ret = fdt_overlay_apply_verbose(spl_image->fdt_addr,
> +                                               (void *)image_info.load_addr);
> +               if (ret)
> +                       return ret;
> +
> +               debug("%s: DT overlay %s applied\n", __func__,
> +                     fit_get_name(fit, node, NULL));
> +       }
> +#endif
>         return ret;
>  }
>
> --
> 2.17.1
>

Regards,
Simon


More information about the U-Boot mailing list