mmc: sdhci-esdhc-imx: Add HS400 support for iMX7ULP
[platform/kernel/u-boot.git] / drivers / mmc / fsl_esdhc_imx.c
index 2ee53c7..4c06361 100644 (file)
@@ -727,17 +727,20 @@ static void esdhc_set_strobe_dll(struct mmc *mmc)
 
        if (priv->clock > ESDHC_STROBE_DLL_CLK_FREQ) {
                esdhc_write32(&regs->strobe_dllctrl, ESDHC_STROBE_DLL_CTRL_RESET);
+               /* clear the reset bit on strobe dll before any setting */
+               esdhc_write32(&regs->strobe_dllctrl, 0);
 
                /*
                 * enable strobe dll ctrl and adjust the delay target
                 * for the uSDHC loopback read clock
                 */
                val = ESDHC_STROBE_DLL_CTRL_ENABLE |
+                       ESDHC_STROBE_DLL_CTRL_SLV_UPDATE_INT_DEFAULT |
                        (priv->strobe_dll_delay_target <<
                         ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_SHIFT);
                esdhc_write32(&regs->strobe_dllctrl, val);
-               /* wait 1us to make sure strobe dll status register stable */
-               mdelay(1);
+               /* wait 5us to make sure strobe dll status register stable */
+               mdelay(5);
                val = esdhc_read32(&regs->strobe_dllstat);
                if (!(val & ESDHC_STROBE_DLL_STS_REF_LOCK))
                        pr_warn("HS400 strobe DLL status REF not lock!\n");
@@ -1709,7 +1712,8 @@ static struct esdhc_soc_data usdhc_imx7d_data = {
 
 static struct esdhc_soc_data usdhc_imx7ulp_data = {
        .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING
-                       | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200,
+                       | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200
+                       | ESDHC_FLAG_HS400,
 };
 
 static struct esdhc_soc_data usdhc_imx8qm_data = {