[U-Boot] [PATCH v2 03/11] spl: fit: use U-Boot device tree when FIT image has no device tree

Anup Patel anup at brainfault.org
Mon Jul 29 08:20:33 UTC 2019


On Sun, Jul 28, 2019 at 9:28 PM Lukas Auer
<lukas.auer at aisec.fraunhofer.de> wrote:
>
> As part of the SPL FIT boot flow, the device tree is appended to U-Boot
> proper. The device tree is used to record information on the loadables
> to make them available to the SPL framework and U-Boot proper. Depending
> on the U-Boot device tree provider, the FIT image might not include a
> device tree. Information on the loadables is missing in this case.
>
> When booting via firmware bundled with the FIT image, U-Boot SPL loads
> the firmware binary and U-Boot proper before starting the firmware. The
> firmware, in turn, is responsible for starting U-Boot proper.
> Information on the memory location of the U-Boot proper loadable must be
> available to the SPL framework so that it can be passed to the firmware
> binary. To support this use case when no device tree is found in the FIT
> image, fall back to the U-Boot device tree in this situation.
>
> At the same time, update the comment to remove the note that the
> destination address must be aligned to ARCH_DMA_MINALIGN. Alignment is
> only required as an intermediate step when reading external data. This
> is automatically handled by spl_fit_append_fdt(). After reading the
> external data, it is copied to the specified address, which does not
> have to be aligned to ARCH_DMA_MINALIGN.
>
> Signed-off-by: Lukas Auer <lukas.auer at aisec.fraunhofer.de>
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> Tested-by: Bin Meng <bmeng.cn at gmail.com>
> ---
>
> Changes in v2: None
>
>  common/spl/spl_fit.c | 37 ++++++++++++++++++++++++-------------
>  1 file changed, 24 insertions(+), 13 deletions(-)
>
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 969f7775c1..0bfb91d686 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -11,6 +11,8 @@
>  #include <linux/libfdt.h>
>  #include <spl.h>
>
> +DECLARE_GLOBAL_DATA_PTR;
> +
>  #ifndef CONFIG_SYS_BOOTM_LEN
>  #define CONFIG_SYS_BOOTM_LEN   (64 << 20)
>  #endif
> @@ -278,25 +280,34 @@ 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 = 0;
> +
> +       /*
> +        * Use the address following the image as target address for the
> +        * device tree.
> +        */
> +       image_info.load_addr = spl_image->load_addr + spl_image->size;
>
>         /* Figure out which device tree the board wants to use */
>         node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, 0);
>         if (node < 0) {
>                 debug("%s: cannot find FDT node\n", __func__);
> -               return node;
> -       }
> -
> -       /*
> -        * Read the device tree and place it after the image.
> -        * Align the destination address to ARCH_DMA_MINALIGN.
> -        */
> -       image_info.load_addr = spl_image->load_addr + spl_image->size;
> -       ret = spl_load_fit_image(info, sector, fit, base_offset, node,
> -                                &image_info);
>
> -       if (ret < 0)
> -               return ret;
> +               /*
> +                * U-Boot did not find a device tree inside the FIT image. Use
> +                * the U-Boot device tree instead.
> +                */
> +               if (gd->fdt_blob)
> +                       memcpy((void *)image_info.load_addr, gd->fdt_blob,
> +                              fdt_totalsize(gd->fdt_blob));
> +               else
> +                       return node;
> +       } else {
> +               ret = spl_load_fit_image(info, sector, fit, base_offset, node,
> +                                        &image_info);
> +               if (ret < 0)
> +                       return ret;
> +       }
>
>         /* Make the load-address of the FDT available for the SPL framework */
>         spl_image->fdt_addr = (void *)image_info.load_addr;
> --
> 2.21.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot

Reviewed-by: Anup Patel <anup.patel at wdc.com>

Regards,
Anup


More information about the U-Boot mailing list