[RFC PATCH 4/7] spl: Convert mmc to spl_load
Stefan Roese
sr at denx.de
Wed Apr 6 07:32:40 CEST 2022
On 4/1/22 21:04, Sean Anderson wrote:
> This converts the mmc loader to spl_load. Legacy images are handled by
> spl_load (via spl_parse_image_header), so mmc_load_legacy can be
> omitted.
>
> Signed-off-by: Sean Anderson <sean.anderson at seco.com>
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> ---
>
> common/spl/spl_mmc.c | 73 ++++----------------------------------------
> 1 file changed, 6 insertions(+), 67 deletions(-)
>
> diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
> index 1c41d24ff4..113566166f 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -17,48 +17,6 @@
> #include <mmc.h>
> #include <image.h>
>
> -static int mmc_load_legacy(struct spl_image_info *spl_image,
> - struct spl_boot_device *bootdev,
> - struct mmc *mmc,
> - ulong sector, struct image_header *header)
> -{
> - u32 image_offset_sectors;
> - u32 image_size_sectors;
> - unsigned long count;
> - u32 image_offset;
> - int ret;
> -
> - ret = spl_parse_image_header(spl_image, bootdev, header);
> - if (ret)
> - return ret;
> -
> - /* convert offset to sectors - round down */
> - image_offset_sectors = spl_image->offset / mmc->read_bl_len;
> - /* calculate remaining offset */
> - image_offset = spl_image->offset % mmc->read_bl_len;
> -
> - /* convert size to sectors - round up */
> - image_size_sectors = (spl_image->size + mmc->read_bl_len - 1) /
> - mmc->read_bl_len;
> -
> - /* Read the header too to avoid extra memcpy */
> - count = blk_dread(mmc_get_blk_desc(mmc),
> - sector + image_offset_sectors,
> - image_size_sectors,
> - (void *)(ulong)spl_image->load_addr);
> - debug("read %x sectors to %lx\n", image_size_sectors,
> - spl_image->load_addr);
> - if (count != image_size_sectors)
> - return -EIO;
> -
> - if (image_offset)
> - memmove((void *)(ulong)spl_image->load_addr,
> - (void *)(ulong)spl_image->load_addr + image_offset,
> - spl_image->size);
> -
> - return 0;
> -}
> -
> static ulong h_spl_load_read(struct spl_load_info *load, ulong sector,
> ulong count, void *buf)
> {
> @@ -86,6 +44,11 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image,
> struct image_header *header;
> struct blk_desc *bd = mmc_get_blk_desc(mmc);
> int ret = 0;
> + struct spl_load_info load = {
> + .dev = mmc,
> + .bl_len = mmc->read_bl_len,
> + .read = h_spl_load_read,
> + };
>
> header = spl_get_load_buffer(-sizeof(*header), bd->blksz);
>
> @@ -97,31 +60,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image,
> goto end;
> }
>
> - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
> - image_get_magic(header) == FDT_MAGIC) {
> - struct spl_load_info load;
> -
> - debug("Found FIT\n");
> - load.dev = mmc;
> - load.priv = NULL;
> - load.filename = NULL;
> - load.bl_len = mmc->read_bl_len;
> - load.read = h_spl_load_read;
> - ret = spl_load_simple_fit(spl_image, &load, sector, header);
> - } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER)) {
> - struct spl_load_info load;
> -
> - load.dev = mmc;
> - load.priv = NULL;
> - load.filename = NULL;
> - load.bl_len = mmc->read_bl_len;
> - load.read = h_spl_load_read;
> -
> - ret = spl_load_imx_container(spl_image, &load, sector);
> - } else {
> - ret = mmc_load_legacy(spl_image, bootdev, mmc, sector, header);
> - }
> -
> + ret = spl_load(spl_image, bootdev, &load, header, 0, sector);
> end:
> if (ret) {
> #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
Viele Grüße,
Stefan Roese
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list