
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@seco.com
Reviewed-by: Stefan Roese sr@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