diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c
index de7acb682629a2bd40a3e97f5b03d3d370da60b9..5bb446bcc2a8ff91d42b73071828bdd43ce810ce 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 */