Hi Lukas, The polling of card-stable bit alone is enough, as if card-detect bit is not set anyways the card-stable bit won't be set which leads to timeout. I don’t think it is specific to zynqmp platform.
Could you please let me know if you observe this issue on any of the zynqmp board? Thanks Venkatesh > -----Original Message----- > From: Simek, Michal <[email protected]> > Sent: Wednesday, May 29, 2024 8:33 PM > To: [email protected]; [email protected]; Abbarapu, > Venkatesh <[email protected]> > Cc: Stefan Herbrechtsmeier <[email protected]>; > Ashok Reddy Soma <[email protected]>; Lukas Funke > <[email protected]>; Jaehoon Chung > <[email protected]>; Johan Jonker <[email protected]>; Peng Fan > <[email protected]>; Simon Glass <[email protected]>; Tom Rini > <[email protected]> > Subject: Re: [RFC PATCH v1 1/1] mmc: zynq_sdhci: Only evaluate card-stable > signal if card was detected > > > > On 4/24/24 10:23, [email protected] wrote: > > From: Lukas Funke <[email protected]> > > > > On ZynqMp there seems to be a dependency between the card-stable bit > > and the card-detect bit. The card-stable bit is set *if and only if* > > the card-detect bit was set before, indicating that the signal was > > stable and reliable during card insertion. > > > > If the card-detect bit is *not* evaluated the corresponding check > > leads to a timeout indicating that the card-detect was not stable. > > > > Signed-off-by: Lukas Funke <[email protected]> > > --- > > > > drivers/mmc/zynq_sdhci.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index > > 935540d171..d0bccd41cc 100644 > > --- a/drivers/mmc/zynq_sdhci.c > > +++ b/drivers/mmc/zynq_sdhci.c > > @@ -1168,11 +1168,14 @@ static int arasan_sdhci_probe(struct udevice > *dev) > > */ > > if (IS_ENABLED(CONFIG_ARCH_ZYNQMP) || > IS_ENABLED(CONFIG_ARCH_VERSAL)) { > > u32 timeout = 1000000; > > + u32 value; > > > > - while (((sdhci_readl(host, SDHCI_PRESENT_STATE) & > > - SDHCI_CARD_STATE_STABLE) == 0) && timeout) { > > + value = sdhci_readl(host, SDHCI_PRESENT_STATE); > > + while ((value & SDHCI_CARD_PRESENT) && > > + ((value & SDHCI_CARD_STATE_STABLE) == 0) && timeout) > { > > udelay(1); > > timeout--; > > + value = sdhci_readl(host, SDHCI_PRESENT_STATE); > > } > > if (!timeout) { > > dev_err(dev, "Sdhci card detect state not stable\n"); > > Venkatesh: Can you please take a look at this? > > Thanks, > Michal

