Re: [PATCH] sdhci: Fix SD card detection issue

From: richard clark
Date: Mon Apr 15 2024 - 22:16:19 EST


On Mon, Apr 15, 2024 at 4:23 PM Russell King (Oracle)
<linux@xxxxxxxxxxxxxxx> wrote:
>
> On Mon, Apr 15, 2024 at 04:17:14PM +0800, richard clark wrote:
> > On Mon, Apr 15, 2024 at 3:22 PM Russell King (Oracle)
> > <linux@xxxxxxxxxxxxxxx> wrote:
> > >
> > > On Mon, Apr 15, 2024 at 10:18:39AM +0300, Adrian Hunter wrote:
> > > > On 15/04/24 10:06, Richard Clark wrote:
> > > > > The mmc_gpio_get_cd(...) will return 0 called from sdhci_get_cd(..), which means
> > > > > the card is not present. Actually, the card detection pin is active low by default
> > > > > according to the SDHCI psec, thus the card detection result is not correct, more
> > > >
> > > > SDHCI spec covers the SDHCI lines. GPIO is separate.
> > >
> > > ... and the key bit of information that should be mentioned is in the
> > > case of a GPIO, the GPIO library can be told if a GPIO is active-high
> > > or active-low in either firmware or via the GPIO lookup data, and this
> > > should be used instead of drivers inventing their own "quirking".
> > >
> > Agree! But unfortunately, it seems I can't find the right place to
> > handle this from either firmware or via the GPIO lookup data. Will be
> > appreciated if any suggestion about that?!
>
> If you're using DT, then, for example:
>
> cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
>
> is all it takes. If you are using firmware then GPIO lookup data isn't
> what you should be using. I'm afraid I don't know the ACPI bindings for
> SDHCI.
>
Ah, this seems to be a bug of the Nvidia DT, its cd-gpios=<... 0x00>
meaning the GPIO_ACTIVE_HIGH, but the CD gpio value is 0 when the card
is inserted. In the kernel v5.10, the sdhci-tegra use below logic as
the card present indicator:

if (!host->mmc->cd_cap_invert)
host->mmc->rem_card_present = (mmc_gpio_get_cd(host->mmc) == 0);

But the newer version kernel removes the 'rem_card_present', and the
CD gpio still value 0 will be interpreted as the card is not present,
thus the issue happens...

> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!