|
@@ -853,6 +853,11 @@ static void esdhc_set_strobe_dll(struct sdhci_host *host)
|
|
|
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);
|
|
@@ -914,6 +919,8 @@ static void esdhc_set_uhs_signaling(struct sdhci_host *host, unsigned timing)
|
|
|
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;
|
|
|
}
|