splash: support raw image from MMC

The user has now the choice to specify the splash location in the MMC
as a raw storage.

Signed-off-by: Julien Masson <jmasson@baylibre.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Julien Masson 2022-10-17 10:33:21 +02:00 committed by Anatolij Gustschin
parent c830e285f4
commit a638d9a47c
2 changed files with 32 additions and 0 deletions

View file

@ -39,6 +39,12 @@ static struct splash_location default_splash_locations[] = {
.flags = SPLASH_STORAGE_FS,
.devpart = "0:1",
},
{
.name = "mmc_raw",
.storage = SPLASH_STORAGE_MMC,
.flags = SPLASH_STORAGE_RAW,
.devpart = "0:1",
},
{
.name = "usb_fs",
.storage = SPLASH_STORAGE_USB,

View file

@ -65,6 +65,30 @@ static int splash_nand_read_raw(u32 bmp_load_addr, int offset, size_t read_size)
}
#endif
static int splash_mmc_read_raw(u32 bmp_load_addr, struct splash_location *location,
size_t read_size)
{
struct disk_partition partition;
struct blk_desc *desc;
lbaint_t blkcnt;
int ret, n;
if (!IS_ENABLED(CONFIG_CMD_MMC)) {
debug("%s: mmc support not available\n", __func__);
return -ENOSYS;
}
ret = part_get_info_by_dev_and_name_or_num("mmc", location->devpart, &desc,
&partition, 1);
if (ret < 0)
return ret;
blkcnt = DIV_ROUND_UP(read_size, partition.blksz);
n = blk_dread(desc, partition.start, blkcnt, (void *)(uintptr_t)bmp_load_addr);
return (n == blkcnt) ? 0 : -EIO;
}
static int splash_storage_read_raw(struct splash_location *location,
u32 bmp_load_addr, size_t read_size)
{
@ -75,6 +99,8 @@ static int splash_storage_read_raw(struct splash_location *location,
offset = location->offset;
switch (location->storage) {
case SPLASH_STORAGE_MMC:
return splash_mmc_read_raw(bmp_load_addr, location, read_size);
case SPLASH_STORAGE_NAND:
return splash_nand_read_raw(bmp_load_addr, offset, read_size);
case SPLASH_STORAGE_SF: