u32 v;
 
        if (host->mmc->actual_clock > ESDHC_STROBE_DLL_CLK_FREQ) {
+               /* disable clock before enabling strobe dll */
+               writel(readl(host->ioaddr + ESDHC_VENDOR_SPEC) &
+                      ~ESDHC_VENDOR_SPEC_FRC_SDCLK_ON,
+                      host->ioaddr + ESDHC_VENDOR_SPEC);
+
                /* force a reset on strobe dll */
                writel(ESDHC_STROBE_DLL_CTRL_RESET,
                        host->ioaddr + ESDHC_STROBE_DLL_CTRL);
                m |= ESDHC_MIX_CTRL_DDREN | ESDHC_MIX_CTRL_HS400_EN;
                writel(m, host->ioaddr + ESDHC_MIX_CTRL);
                imx_data->is_ddr = 1;
+               /* update clock after enable DDR for strobe DLL lock */
+               host->ops->set_clock(host, host->clock);
                esdhc_set_strobe_dll(host);
                break;
        }