On 8/3/21 1:57 PM, Ashok Reddy Soma wrote: > HI Jaehoon, > >> -----Original Message----- >> From: Jaehoon Chung <jh80.ch...@samsung.com> >> Sent: Tuesday, August 3, 2021 3:45 AM >> To: Ashok Reddy Soma <ashok...@xilinx.com>; u-boot@lists.denx.de >> Cc: peng....@nxp.com; faiz_ab...@ti.com; s...@chromium.org; >> mich...@walle.cc; git <g...@xilinx.com>; mon...@monstr.eu; >> somaashokre...@gmail.com; T Karthik Reddy <tkart...@xilinx.com> >> Subject: Re: [PATCH v4 6/7] mmc: zynq_sdhci: Wait till sd card detect state >> is >> stable >> >> Hi Ashok, >> >> On 8/2/21 7:16 PM, Ashok Reddy Soma wrote: >>> From: T Karthik Reddy <t.karthik.re...@xilinx.com> >>> >>> As per SD spec when SD host controller is reset, it takes 1000msec to >>> detect the card state. In case, if we enable the sd bus voltage & card >>> detect state is not stable, then host controller will disable the sd >>> bus voltage. >>> >>> In case of warm/subsystem reboot, due to unstable card detect state >>> host controller is disabling the sd bus voltage to sd card causing sd >>> card timeout error. So we wait for a maximum of 1000msec to get the >>> card detect state stable before we enable the sd bus voltage. >>> >>> This current fix is workaround for now, this needs to be analysed >>> further. Zynqmp platform should behave the same as Versal, but we did >>> not encounter this issue as of now. So we are fixing it for Versal >>> only. >>> >>> Signed-off-by: T Karthik Reddy <t.karthik.re...@xilinx.com> >>> Signed-off-by: Ashok Reddy Soma <ashok.reddy.s...@xilinx.com> >>> --- >>> >>> (no changes since v2) >>> >>> Changes in v2: >>> - Changed return error from -EIO to -ETIMEDOUT in arasan_sdhci_probe() >>> in card detect state stable workaround >>> >>> drivers/mmc/zynq_sdhci.c | 17 +++++++++++++++++ >>> 1 file changed, 17 insertions(+) >>> >>> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index >>> 9a1693940a..89776f48eb 100644 >>> --- a/drivers/mmc/zynq_sdhci.c >>> +++ b/drivers/mmc/zynq_sdhci.c >>> @@ -776,6 +776,23 @@ static int arasan_sdhci_probe(struct udevice *dev) >>> return ret; >>> upriv->mmc = host->mmc; >>> >>> + /* >>> + * Wait for 1000msec till the card detect state gets stable >>> + * else host controller will set sd power bus voltage to 0. >>> + */ >> >> According to commit-msg, this is workaround code, right? >> Then could you add FIXME or WORKAROUND in comment. > > Sure, I will add WORKAROUND in comment and send V5.
I hope that it will be reverted after fixed in future. Reviewed-by: Jaehoon Chung <jh80.ch...@samsung.com> Best Regards, Jaehoon Chung > > Thanks, > Ashok > >> >> Best Regards, >> Jaehoon Chung >> >>> + if (IS_ENABLED(CONFIG_ARCH_VERSAL)) { >>> + u32 timeout = 1000; >>> + >>> + while (((sdhci_readl(host, SDHCI_PRESENT_STATE) & >>> + SDHCI_CARD_STATE_STABLE) == 0) && timeout--) { >>> + mdelay(1); >>> + } >>> + if (!timeout) { >>> + dev_err(dev, "Sdhci card detect state not stable\n"); >>> + return -ETIMEDOUT; >>> + } >>> + } >>> + >>> return sdhci_probe(dev); >>> } >>> >>> >