[RFC PATCH v1 1/1] mmc: zynq_sdhci: Only evaluate card-stable signal if card was detected

Michal Simek michal.simek at amd.com
Wed May 29 17:03:21 CEST 2024



On 4/24/24 10:23, lukas.funke-oss at weidmueller.com wrote:
> From: Lukas Funke <lukas.funke at 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 at 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--;
> +			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


More information about the U-Boot mailing list