[PATCH v4 6/7] mmc: zynq_sdhci: Wait till sd card detect state is stable
Ashok Reddy Soma
ashokred at xilinx.com
Tue Aug 3 06:57:32 CEST 2021
HI Jaehoon,
> -----Original Message-----
> From: Jaehoon Chung <jh80.chung at samsung.com>
> Sent: Tuesday, August 3, 2021 3:45 AM
> To: Ashok Reddy Soma <ashokred at xilinx.com>; u-boot at lists.denx.de
> Cc: peng.fan at nxp.com; faiz_abbas at ti.com; sjg at chromium.org;
> michael at walle.cc; git <git at xilinx.com>; monstr at monstr.eu;
> somaashokreddy at gmail.com; T Karthik Reddy <tkarthik at 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.reddy at 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.reddy at xilinx.com>
> > Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at 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.
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);
> > }
> >
> >
More information about the U-Boot
mailing list