sizeof(struct image_header));
/* read image header to find the image size & load address */
- count = mmc->block_dev.block_read(0, sector, 1, header);
+ count = mmc->block_dev.block_read(&mmc->block_dev, sector, 1, header);
debug("read sector %lx, count=%lu\n", sector, count);
if (count == 0)
goto end;
mmc->read_bl_len;
/* Read the header too to avoid extra memcpy */
- count = mmc->block_dev.block_read(0, sector, image_size_sectors,
+ count = mmc->block_dev.block_read(&mmc->block_dev, sector,
+ image_size_sectors,
(void *)(ulong)spl_image.load_addr);
debug("read %x sectors to %x\n", image_size_sectors,
spl_image.load_addr);
return -ENODEV;
}
-#ifdef CONFIG_DM_MMC
-static int spl_mmc_find_device(struct mmc **mmc, u32 boot_device)
+static int spl_mmc_find_device(struct mmc **mmcp, u32 boot_device)
{
+#ifdef CONFIG_DM_MMC
struct udevice *dev;
+#endif
int err, mmc_dev;
mmc_dev = spl_mmc_get_device_index(boot_device);
return err;
}
+#ifdef CONFIG_DM_MMC
err = uclass_get_device(UCLASS_MMC, mmc_dev, &dev);
- if (err) {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
- printf("spl: could not find mmc device. error: %d\n", err);
-#endif
- return err;
- }
-
- *mmc = NULL;
- *mmc = mmc_get_mmc_dev(dev);
- return *mmc != NULL ? 0 : -ENODEV;
-}
+ if (!err)
+ *mmcp = mmc_get_mmc_dev(dev);
#else
-static int spl_mmc_find_device(struct mmc **mmc, u32 boot_device)
-{
- int err, mmc_dev;
-
- mmc_dev = spl_mmc_get_device_index(boot_device);
- if (mmc_dev < 0)
- return mmc_dev;
-
- err = mmc_initialize(gd->bd);
+ *mmcp = find_mmc_device(mmc_dev);
+ err = *mmcp ? 0 : -ENODEV;
+#endif
if (err) {
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
- printf("spl: could not initialize mmc. error: %d\n", err);
+ printf("spl: could not find mmc device. error: %d\n", err);
#endif
return err;
}
- /* We register only one device. So, the dev id is always 0 */
- *mmc = find_mmc_device(mmc_dev);
- if (!*mmc) {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
- puts("spl: mmc device not found\n");
-#endif
- return -ENODEV;
- }
-
return 0;
}
-#endif
#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
{
unsigned long count;
- count = mmc->block_dev.block_read(0,
+ count = mmc->block_dev.block_read(&mmc->block_dev,
CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,
CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS,
(void *) CONFIG_SYS_SPL_ARGS_ADDR);
int spl_mmc_load_image(u32 boot_device)
{
- struct mmc *mmc;
+ struct mmc *mmc = NULL;
u32 boot_mode;
int err = 0;
__maybe_unused int part;