diff options
-rw-r--r-- | common/spl/spl_mmc.c | 14 | ||||
-rw-r--r-- | drivers/mmc/mmc.c | 24 | ||||
-rw-r--r-- | include/mmc.h | 1 |
3 files changed, 29 insertions, 10 deletions
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index ebc566081a..ea07687fd8 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -123,31 +123,25 @@ static int spl_mmc_get_device_index(u32 boot_device) static int spl_mmc_find_device(struct mmc **mmcp, u32 boot_device) { -#if CONFIG_IS_ENABLED(DM_MMC) - struct udevice *dev; -#endif int err, mmc_dev; mmc_dev = spl_mmc_get_device_index(boot_device); if (mmc_dev < 0) return mmc_dev; +#if CONFIG_IS_ENABLED(DM_MMC) + err = mmc_init_device(mmc_dev); +#else err = mmc_initialize(NULL); +#endif /* DM_MMC */ if (err) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT printf("spl: could not initialize mmc. error: %d\n", err); #endif return err; } - -#if CONFIG_IS_ENABLED(DM_MMC) - err = uclass_get_device(UCLASS_MMC, mmc_dev, &dev); - if (!err) - *mmcp = mmc_get_mmc_dev(dev); -#else *mmcp = find_mmc_device(mmc_dev); err = *mmcp ? 0 : -ENODEV; -#endif if (err) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT printf("spl: could not find mmc device %d. error: %d\n", diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 6bece7f307..c2c85ba144 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -2998,6 +2998,30 @@ int mmc_initialize(bd_t *bis) return 0; } +#if CONFIG_IS_ENABLED(DM_MMC) +int mmc_init_device(int num) +{ + struct udevice *dev; + struct mmc *m; + int ret; + + ret = uclass_get_device(UCLASS_MMC, num, &dev); + if (ret) + return ret; + + m = mmc_get_mmc_dev(dev); + if (!m) + return 0; +#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT + mmc_set_preinit(m, 1); +#endif + if (m->preinit) + mmc_start_init(m); + + return 0; +} +#endif + #ifdef CONFIG_CMD_BKOPS_ENABLE int mmc_set_bkops_enable(struct mmc *mmc) { diff --git a/include/mmc.h b/include/mmc.h index 686ba00656..8c29c8d4ab 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -698,6 +698,7 @@ void mmc_destroy(struct mmc *mmc); */ int mmc_unbind(struct udevice *dev); int mmc_initialize(bd_t *bis); +int mmc_init_device(int num); int mmc_init(struct mmc *mmc); int mmc_send_tuning(struct mmc *mmc, u32 opcode, int *cmd_error); |