[PATCH v5 04/11] spl: Convert fat to spl_load
Xavier Drudis Ferran
xdrudis at tinet.cat
Thu Aug 3 10:30:13 CEST 2023
El Mon, Jul 31, 2023 at 06:42:56PM -0400, Sean Anderson deia:
> This converts the fat loader to use spl_load. Some platforms are very
> tight on space, so we take care to only include the code we really need.
>
> Signed-off-by: Sean Anderson <sean.anderson at seco.com>
> ---
>
> Changes in v5:
> - Rework to load header in spl_load
>
> Changes in v3:
> - Fix failing on success
>
> common/spl/spl_fat.c | 55 +++++++++++++++-----------------------------
> 1 file changed, 19 insertions(+), 36 deletions(-)
>
> diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c
> index f8a5b80a3b..6530bcd5a7 100644
> --- a/common/spl/spl_fat.c
> +++ b/common/spl/spl_fat.c
> @@ -60,57 +60,40 @@ int spl_load_image_fat(struct spl_image_info *spl_image,
> const char *filename)
> {
> int err;
> - struct legacy_img_hdr *header;
> + loff_t size;
> + struct spl_load_info load;
> +
> + /* This generates smaller code than using a compound literal */
> + load.read = spl_fit_read;
> + load.bl_len = 1;
> + load.filename = filename;
>
> err = spl_register_fat_device(block_dev, partition);
> if (err)
> goto end;
>
> - header = spl_get_load_buffer(-sizeof(*header), sizeof(*header));
> -
> - err = file_fat_read(filename, header, sizeof(struct legacy_img_hdr));
> - if (err <= 0)
> - goto end;
> -
> - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) &&
> - image_get_magic(header) == FDT_MAGIC) {
> - err = file_fat_read(filename, (void *)CONFIG_SYS_LOAD_ADDR, 0);
> - if (err <= 0)
> - goto end;
> - err = spl_parse_image_header(spl_image, bootdev,
> - (struct legacy_img_hdr *)CONFIG_SYS_LOAD_ADDR);
So this used to load to CONFIG_SYS_LOAD_ADDR and will now load to
CONFIG_TEXT_BASE, or whatever the applicable spl_get_load_buffer()
uses. Is this OK ? or do we need a new parameter for the buffer or
something ?
> - if (err == -EAGAIN)
> - return err;
> - if (err == 0)
> - err = 1;
> - } else if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
> - image_get_magic(header) == FDT_MAGIC) {
> - struct spl_load_info load;
> -
> - debug("Found FIT\n");
> - load.read = spl_fit_read;
> - load.bl_len = 1;
> - load.filename = (void *)filename;
> - load.priv = NULL;
> -
> - return spl_load_simple_fit(spl_image, &load, 0, header);
> - } else {
> - err = spl_parse_image_header(spl_image, bootdev, header);
> + /*
> + * Avoid pulling in this function for other image types since we are
> + * very short on space on some boards.
> + */
> + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL)) {
> + err = fat_size(filename, &size);
> if (err)
> goto end;
> -
> - err = file_fat_read(filename,
> - (u8 *)(uintptr_t)spl_image->load_addr, 0);
> + } else {
> + size = 0;
> }
>
> + err = spl_load(spl_image, bootdev, &load, 0, size);
> +
> end:
> #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
> - if (err <= 0)
> + if (err < 0)
> printf("%s: error reading image %s, err - %d\n",
> __func__, filename, err);
> #endif
>
> - return (err <= 0);
> + return err;
> }
>
> #if CONFIG_IS_ENABLED(OS_BOOT)
> --
> 2.40.1
>
More information about the U-Boot
mailing list