[PATCH 5/7] spl: fit: Support loading FPGA images from list of "loadables"

Simon Glass sjg at chromium.org
Mon Mar 29 09:43:14 CEST 2021


Hi Alexandru,

On Thu, 11 Mar 2021 at 07:04, Alexandru Gagniuc <mr.nuke.me at gmail.com> wrote:
>
> Commit 4afc4f37c70e ("doc: FIT image: Clarify format and simplify
> syntax") and delegated FPGA images to be added via the list of
> "loadables" in lieu of the "fpga" property. Now actually implement
> this in code.
>
> Note that the "compatible" property is ignored for the time being, as
> implementing "compatible" loading is beyond the scope of this change.
> However, "u-boot,fpga-legacy" is accepted without warning.
>
> Signed-off-by: Alexandru Gagniuc <mr.nuke.me at gmail.com>
> ---
>  common/spl/spl_fit.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 68f29c0026..ca6be6a839 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -477,6 +477,20 @@ static int spl_fit_record_loadable(const struct spl_fit_info *ctx, int index,
>         return ret;
>  }
>
> +static int spl_fit_image_is_fpga(const void *fit, int node)
> +{
> +       const char *type;
> +
> +       if (!IS_ENABLED(CONFIG_SPL_FPGA))
> +               return 0;
> +
> +       type = fdt_getprop(fit, node, FIT_TYPE_PROP, NULL);
> +       if (!type)
> +               return 0;
> +
> +       return !strcmp(type, "fpga");
> +}
> +
>  static int spl_fit_image_get_os(const void *fit, int noffset, uint8_t *os)
>  {
>         if (!CONFIG_IS_ENABLED(FIT_IMAGE_TINY) || CONFIG_IS_ENABLED(OS_BOOT))
> @@ -536,11 +550,18 @@ static void warn_deprecated(const char *msg)
>  static int spl_fit_upload_fpga(struct spl_fit_info *ctx, int node,
>                                struct spl_image_info *fpga_image)
>  {
> +       const char *compatible;
>         int ret;
>
>         debug("FPGA bitstream at: %x, size: %x\n",
>               (u32)fpga_image->load_addr, fpga_image->size);
>
> +       compatible = fdt_getprop(ctx->fit, node, "compatible", NULL);
> +       if (!compatible)
> +               warn_deprecated("'fpga' image without 'compatible' property");
> +       else if (strcmp(compatible, "u-boot,fpga-legacy"))
> +               printf("Ignoring compatible = %s property\n", compatible);
> +
>         ret = fpga_load(0, (void *)fpga_image->load_addr, fpga_image->size,
>                         BIT_FULL);
>         if (ret) {
> @@ -739,6 +760,9 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
>                         return ret;
>                 }
>
> +               if (spl_fit_image_is_fpga(ctx.fit, node))
> +                       spl_fit_upload_fpga(&ctx, node, &image_info);
> +

Given the code-size increase I think a new Kconfig option for SPL FPGA
FIT support would be useful.

>                 if (!spl_fit_image_get_os(ctx.fit, node, &os_type))
>                         debug("Loadable is %s\n", genimg_get_os_name(os_type));
>
> --
> 2.26.2
>

Regards,
Simon


More information about the U-Boot mailing list