mmc: f-sdh30: Add support for non-removable media
authorKunihiko Hayashi <hayashi.kunihiko@socionext.com>
Fri, 11 Nov 2022 08:10:32 +0000 (17:10 +0900)
committerUlf Hansson <ulf.hansson@linaro.org>
Wed, 7 Dec 2022 12:22:36 +0000 (13:22 +0100)
To use F_SDH30 for non-removable meda like eMMC,
need to enable FORCE_CARD_INSERT bit to skip the delay for detection.

Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Acked-by: Jassi Brar <jaswinder.singh@linaro.org>
Link: https://lore.kernel.org/r/20221111081033.3813-6-hayashi.kunihiko@socionext.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci_f_sdh30.c
drivers/mmc/host/sdhci_f_sdh30.h

index 556f460..afbe173 100644 (file)
@@ -77,6 +77,13 @@ static void sdhci_f_sdh30_reset(struct sdhci_host *host, u8 mask)
                ctl |= F_SDH30_CMD_DAT_DELAY;
                sdhci_writel(host, ctl, F_SDH30_ESD_CONTROL);
        }
+
+       if ((host->mmc->caps & MMC_CAP_NONREMOVABLE) &&
+           !(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)) {
+               ctl = sdhci_readl(host, F_SDH30_TEST);
+               ctl |= F_SDH30_FORCE_CARD_INSERT;
+               sdhci_writel(host, ctl, F_SDH30_TEST);
+       }
 }
 
 static const struct sdhci_ops sdhci_f_sdh30_ops = {
index fc1ad28..7c3c662 100644 (file)
@@ -29,4 +29,7 @@
 #define  F_SDH30_CMD_DAT_DELAY BIT(9)
 #define         F_SDH30_EMMC_HS200             BIT(24)
 
+#define F_SDH30_TEST           0x158
+#define F_SDH30_FORCE_CARD_INSERT      BIT(6)
+
 #define F_SDH30_MIN_CLOCK              400000