mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450
authorGiulio Benetti <giulio.benetti@benettiengineering.com>
Fri, 11 Aug 2023 21:48:53 +0000 (23:48 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Fri, 18 Aug 2023 09:14:13 +0000 (11:14 +0200)
Errata ERR010450 only shows up if voltage is 1.8V, but if the device is
supplied by 3v3 the errata can be ignored. So let's check for if quirk
SDHCI_QUIRK2_NO_1_8_V is defined or not before limiting the frequency.

Cc: Jim Reinhart <jimr@tekvox.com>
Cc: James Autry <jautry@tekvox.com>
Cc: Matthew Maron <matthewm@tekvox.com>
Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
Acked-by: Haibo Chen <haibo.chen@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20230811214853.8623-1-giulio.benetti@benettiengineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-esdhc-imx.c

index a8bdb3c5ecd5cadec45e1cecfa38660ce260782d..3b8030f3552af821311e9b5fce1dbf04013ca271 100644 (file)
 #define ESDHC_FLAG_HS400               BIT(9)
 /*
  * The IP has errata ERR010450
- * uSDHC: Due to the I/O timing limit, for SDR mode, SD card clock can't
- * exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz.
+ * uSDHC: At 1.8V due to the I/O timing limit, for SDR mode, SD card
+ * clock can't exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz.
  */
 #define ESDHC_FLAG_ERR010450           BIT(10)
 /* The IP supports HS400ES mode */
@@ -961,7 +961,8 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host,
                | ESDHC_CLOCK_MASK);
        sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL);
 
-       if (imx_data->socdata->flags & ESDHC_FLAG_ERR010450) {
+       if ((imx_data->socdata->flags & ESDHC_FLAG_ERR010450) &&
+           (!(host->quirks2 & SDHCI_QUIRK2_NO_1_8_V))) {
                unsigned int max_clock;
 
                max_clock = imx_data->is_ddr ? 45000000 : 150000000;