
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 michal.simek@amd.com Sent: Wednesday, May 29, 2024 8:33 PM To: lukas.funke-oss@weidmueller.com; u-boot@lists.denx.de; Abbarapu, Venkatesh venkatesh.abbarapu@amd.com Cc: Stefan Herbrechtsmeier Stefan.Herbrechtsmeier@weidmueller.com; Ashok Reddy Soma ashok.reddy.soma@amd.com; Lukas Funke lukas.funke@weidmueller.com; Jaehoon Chung jh80.chung@samsung.com; Johan Jonker jbx6244@gmail.com; Peng Fan peng.fan@nxp.com; Simon Glass sjg@chromium.org; Tom Rini trini@konsulko.com 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, lukas.funke-oss@weidmueller.com wrote:
From: Lukas Funke lukas.funke@weidmueller.com
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 lukas.funke@weidmueller.com
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--;
} if (!timeout) { dev_err(dev, "Sdhci card detect state not stable\n");value = sdhci_readl(host, SDHCI_PRESENT_STATE);
Venkatesh: Can you please take a look at this?
Thanks, Michal