[U-Boot] [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 fiach.antaw@uqconnect.edu.au
---
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 2fe5d61..a1c31a5 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -247,6 +247,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 @@ -260,6 +271,7 @@ U_BOOT_DRIVER(mmc_blk) = { .name = "mmc_blk", .id = UCLASS_BLK, .ops = &mmc_blk_ops, + .probe = mmc_blk_probe, }; #endif /* CONFIG_BLK */

Hi Fiach,
On 01/25/2017 06:00 PM, Fiach Antaw wrote:
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 fiach.antaw@uqconnect.edu.au
I will check this patch with my boards. After that, i will apply this. Thanks!
Best Regards, Jaehoon Chung
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 2fe5d61..a1c31a5 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -247,6 +247,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 @@ -260,6 +271,7 @@ U_BOOT_DRIVER(mmc_blk) = { .name = "mmc_blk", .id = UCLASS_BLK, .ops = &mmc_blk_ops,
- .probe = mmc_blk_probe,
}; #endif /* CONFIG_BLK */

On 01/25/2017 06:00 PM, Fiach Antaw wrote:
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 fiach.antaw@uqconnect.edu.au
Applied on u-boot-mmc. Thanks!
Best Regards, Jaehoon Chung
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 2fe5d61..a1c31a5 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -247,6 +247,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 @@ -260,6 +271,7 @@ U_BOOT_DRIVER(mmc_blk) = { .name = "mmc_blk", .id = UCLASS_BLK, .ops = &mmc_blk_ops,
- .probe = mmc_blk_probe,
}; #endif /* CONFIG_BLK */
participants (2)
-
Fiach Antaw
-
Jaehoon Chung