On 28/11/17 05:57, yinbo.zhu@xxxxxxx wrote: > From: "yinbo.zhu" <yinbo.zhu@xxxxxxx> > > When system wakes up from sleep on ls1046ardb, the SD operation fails > with mmc error messages since ESDHC_TB_EN bit couldn’t be cleaned by > eSDHC_SYSCTL[RSTA]. It's proper to clean this bit in esdhc_reset() > rather than in probe. > > Signed-off-by: yinbo.zhu <yinbo.zhu@xxxxxxx> Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > --- > drivers/mmc/host/sdhci-of-esdhc.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c > index ac2505a95403..5ee0d86a2f4d 100644 > --- a/drivers/mmc/host/sdhci-of-esdhc.c > +++ b/drivers/mmc/host/sdhci-of-esdhc.c > @@ -578,10 +578,18 @@ static void esdhc_clock_enable(struct sdhci_host *host, bool enable) > > static void esdhc_reset(struct sdhci_host *host, u8 mask) > { > + u32 val; > + > sdhci_reset(host, mask); > > sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); > sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); > + > + if (mask & SDHCI_RESET_ALL) { > + val = sdhci_readl(host, ESDHC_TBCTL); > + val &= ~ESDHC_TB_EN; > + sdhci_writel(host, val, ESDHC_TBCTL); > + } > } > > /* The SCFG, Supplemental Configuration Unit, provides SoC specific > @@ -771,10 +779,6 @@ static void esdhc_init(struct platform_device *pdev, struct sdhci_host *host) > pltfm_host = sdhci_priv(host); > esdhc = sdhci_pltfm_priv(pltfm_host); > > - val = sdhci_readl(host, ESDHC_TBCTL); > - val &= ~ESDHC_TB_EN; > - sdhci_writel(host, val, ESDHC_TBCTL); > - > host_ver = sdhci_readw(host, SDHCI_HOST_VERSION); > esdhc->vendor_ver = (host_ver & SDHCI_VENDOR_VER_MASK) >> > SDHCI_VENDOR_VER_SHIFT; > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html