From a0269bb6e891c6c3b984a2f3d6a12c07e244484a Mon Sep 17 00:00:00 2001 From: Fiach Antaw Date: Wed, 25 Jan 2017 19:00:24 +1000 Subject: [PATCH] mmc: init mmc block devices on probe MMC devices accessed exclusively via the driver model were not being initialized before being exposed as block devices, causing issues in scenarios where the MMC device is first accessed via the uclass block interface. Signed-off-by: Fiach Antaw --- drivers/mmc/mmc-uclass.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index de7acb6826..5bb446bcc2 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -254,6 +254,17 @@ static int mmc_select_hwpart(struct udevice *bdev, int hwpart) return mmc_switch_part(mmc, hwpart); } +static int mmc_blk_probe(struct udevice *dev) +{ + struct blk_desc *block_dev = dev_get_uclass_platdata(dev); + int dev_num = block_dev->devnum; + struct mmc *mmc = find_mmc_device(dev_num); + + if (!mmc) + return -ENODEV; + return mmc_init(mmc); +} + static const struct blk_ops mmc_blk_ops = { .read = mmc_bread, #ifndef CONFIG_SPL_BUILD @@ -267,6 +278,7 @@ U_BOOT_DRIVER(mmc_blk) = { .name = "mmc_blk", .id = UCLASS_BLK, .ops = &mmc_blk_ops, + .probe = mmc_blk_probe, }; #endif /* CONFIG_BLK */