mmc: fsl_esdhc: fix probe issue without CONFIG_BLK enabled
authorYangbo Lu <yangbo.lu@nxp.com>
Thu, 23 May 2019 03:05:46 +0000 (11:05 +0800)
committerPrabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
Wed, 19 Jun 2019 07:24:56 +0000 (12:54 +0530)
u-boot is trying to make CONFIG_BLK as a hard requirement
for DM_MMC. But now it's still not.

config BLK
bool "Support block devices"
depends on DM
default y if DM_MMC

When fsl_esdhc driver was reworked for DM_MMC support, DM_MMC
without CONFIG_BLK enabled wasn't considered. This patch is to
fix probe issue without CONFIG_BLK enabled.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
Reviewed-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
drivers/mmc/fsl_esdhc.c

index 672691fa6a716034b84f3140daec214970d12b7a..6a191a1765473331997271ca6b7d3a8aa6ac6cf1 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright 2007, 2010-2011 Freescale Semiconductor, Inc
+ * Copyright 2019 NXP Semiconductors
  * Andy Fleming
  *
  * Based vaguely on the pxa mmc code:
 #include <asm-generic/gpio.h>
 #include <dm/pinctrl.h>
 
+#if !CONFIG_IS_ENABLED(BLK)
+#include "mmc_private.h"
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 #define SDHCI_IRQ_EN_BITS              (IRQSTATEN_CC | IRQSTATEN_TC | \
@@ -34,6 +39,7 @@ DECLARE_GLOBAL_DATA_PTR;
                                IRQSTATEN_DEBE | IRQSTATEN_BRR | IRQSTATEN_BWR | \
                                IRQSTATEN_DINT)
 #define MAX_TUNING_LOOP 40
+#define ESDHC_DRIVER_STAGE_VALUE 0xffffffff
 
 struct fsl_esdhc {
        uint    dsaddr;         /* SDMA system address register */
@@ -1457,6 +1463,9 @@ static int fsl_esdhc_probe(struct udevice *dev)
        fdt_addr_t addr;
        unsigned int val;
        struct mmc *mmc;
+#if !CONFIG_IS_ENABLED(BLK)
+       struct blk_desc *bdesc;
+#endif
        int ret;
 
        addr = dev_read_addr(dev);
@@ -1593,6 +1602,26 @@ static int fsl_esdhc_probe(struct udevice *dev)
        mmc = &plat->mmc;
        mmc->cfg = &plat->cfg;
        mmc->dev = dev;
+#if !CONFIG_IS_ENABLED(BLK)
+       mmc->priv = priv;
+
+       /* Setup dsr related values */
+       mmc->dsr_imp = 0;
+       mmc->dsr = ESDHC_DRIVER_STAGE_VALUE;
+       /* Setup the universal parts of the block interface just once */
+       bdesc = mmc_get_blk_desc(mmc);
+       bdesc->if_type = IF_TYPE_MMC;
+       bdesc->removable = 1;
+       bdesc->devnum = mmc_get_next_devnum();
+       bdesc->block_read = mmc_bread;
+       bdesc->block_write = mmc_bwrite;
+       bdesc->block_erase = mmc_berase;
+
+       /* setup initial part type */
+       bdesc->part_type = mmc->cfg->part_type;
+       mmc_list_add(mmc);
+#endif
+
        upriv->mmc = mmc;
 
        return esdhc_init_common(priv, mmc);