On Tue, 11 Aug 2020 at 10:42, <haibo.chen@xxxxxxx> wrote: > > From: Haibo Chen <haibo.chen@xxxxxxx> > > According to IC suggestion, everytime before sending the tuning command, > need to reset the usdhc, so to reset the tuning circuit, to let every > tuning command work well for the manual tuning method. For standard > tuning method, IC already add the reset operation in the hardware logic. > > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx> Applied for next, thanks! Kind regards Uffe > --- > drivers/mmc/host/sdhci-esdhc-imx.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c > index a76b4513fbec..cf335c661cc7 100644 > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > @@ -987,10 +987,20 @@ static int usdhc_execute_tuning(struct mmc_host *mmc, u32 opcode) > static void esdhc_prepare_tuning(struct sdhci_host *host, u32 val) > { > u32 reg; > + u8 sw_rst; > + int ret; > > /* FIXME: delay a bit for card to be ready for next tuning due to errors */ > mdelay(1); > > + /* IC suggest to reset USDHC before every tuning command */ > + esdhc_clrset_le(host, 0xff, SDHCI_RESET_ALL, SDHCI_SOFTWARE_RESET); > + ret = readb_poll_timeout(host->ioaddr + SDHCI_SOFTWARE_RESET, sw_rst, > + !(sw_rst & SDHCI_RESET_ALL), 10, 100); > + if (ret == -ETIMEDOUT) > + dev_warn(mmc_dev(host->mmc), > + "warning! RESET_ALL never complete before sending tuning command\n"); > + > reg = readl(host->ioaddr + ESDHC_MIX_CTRL); > reg |= ESDHC_MIX_CTRL_EXE_TUNE | ESDHC_MIX_CTRL_SMPCLK_SEL | > ESDHC_MIX_CTRL_FBCLK_SEL; > -- > 2.17.1 >