Message ID | CA+sos7_y76fz5kLEhudeS7cp2AvzcGfgpEMJjTO+PyVif3=AvA@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> Can you please try the change below? If it works and everyone is fine > with it, I will send a proper patch. Thank you! That fixed the problem. Tested-by: Wladimir J. van der Laan <laanwj@gmail.com> > --- > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > @@ -687,6 +687,20 @@ static inline void esdhc_pltfm_set_clock(struct > sdhci_host *host, > return; > } > > + /* For i.MX53 eSDHCv3, SYSCTL.SDCLKFS may not be set to 0. */ > + if (is_imx53_esdhc(imx_data)) { > + /* > + * According to the i.MX53 reference manual, if DLLCTRL[10] can > + * be set, then the controller is eSDHCv3, else it is eSDHCv2. > + */ > + val = readl(host->ioaddr + ESDHC_DLL_CTRL); > + writel(val | BIT(10), host->ioaddr + ESDHC_DLL_CTRL); > + temp = readl(host->ioaddr + ESDHC_DLL_CTRL); > + writel(val, host->ioaddr + ESDHC_DLL_CTRL); > + if (temp & BIT(10)) > + pre_div = 2; > + } > + > temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); > temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN > | ESDHC_CLOCK_MASK); -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -687,6 +687,20 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host, return; } + /* For i.MX53 eSDHCv3, SYSCTL.SDCLKFS may not be set to 0. */ + if (is_imx53_esdhc(imx_data)) { + /* + * According to the i.MX53 reference manual, if DLLCTRL[10] can + * be set, then the controller is eSDHCv3, else it is eSDHCv2. + */ + val = readl(host->ioaddr + ESDHC_DLL_CTRL); + writel(val | BIT(10), host->ioaddr + ESDHC_DLL_CTRL); + temp = readl(host->ioaddr + ESDHC_DLL_CTRL); + writel(val, host->ioaddr + ESDHC_DLL_CTRL); + if (temp & BIT(10)) + pre_div = 2; + } + temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); temp &= ~(ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN