[U-Boot] [PATCH] mmd: sdhci: fix non GPIO card detect

Faiz Abbas faiz_abbas at ti.com
Tue Jul 23 10:05:31 UTC 2019


Hi Baruch,

On 23/07/19 2:39 PM, Baruch Siach wrote:
> Hi Faiz,
> 
> On Tue, Jul 23, 2019 at 02:27:28PM +0530, Faiz Abbas wrote:
>> On 23/07/19 1:30 PM, Peng Fan wrote:
>>> + Faiz
>>>
>>>> Subject: [PATCH] mmd: sdhci: fix non GPIO card detect
>>>>
>>>> Some SD cards do not assert the SDHCI_CARD_PRESENT bit. Only the
>>>> SDHCI_CARD_DETECT_PIN_LEVEL is enabled. Consider that enough for card
>>>> detect indication.
>>>>
>>>> This fixes SD card access from SPL, since DM_GPIO is not available in SPL
>>>> code.
>>>>
>>>> Fixes: da18c62b6e6a ("mmc: sdhci: Implement SDHCI card detect")
>>>> Cc: T Karthik Reddy <t.karthik.reddy at xilinx.com>
>>>> Cc: Michal Simek <michal.simek at xilinx.com>
>>>> Signed-off-by: Baruch Siach <baruch at tkos.co.il>
>>>> ---
>>>>  drivers/mmc/sdhci.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index
>>>> 2779bca93f08..17a28181fcca 100644
>>>> --- a/drivers/mmc/sdhci.c
>>>> +++ b/drivers/mmc/sdhci.c
>>>> @@ -683,7 +683,7 @@ int sdhci_get_cd(struct udevice *dev)
>>>>  	}
>>>>  #endif
>>>>  	value = !!(sdhci_readl(host, SDHCI_PRESENT_STATE) &
>>>> -		   SDHCI_CARD_PRESENT);
>>>> +		   (SDHCI_CARD_PRESENT | SDHCI_CARD_DETECT_PIN_LEVEL));
>>>
>>> Faiz, are you fine with this change?
>>
>> Not really. The spec is pretty clear that DETECT_PIN_LEVEL is not to be
>> trusted. Also how does the CARD_PRESENT assertion depend on the SD card
>> you use? Are you normally muxing the SDCD line to the IP (for hardware
>> to detect) or are you connecting it as a gpio which software must detect?
> 
> I tested SanDisk 8GB SD card, class 10, UHS1, on Armada 388 based SolidRun 
> Clearfog Base. The SDHCI_PRESENT_STATE register consistently reads 0x01f60000, 
> that is, CARD_PRESENT is disabled, DETECT_PIN_LEVEL is enabled.
> 
> The SD card-detect GPIO is present at the hardware level, but it is not 
> accessible from SPL code because there is currently no SPL_DM_GPIO. The main 
> U-Boot image detects the SD card correctly (once the other MMC patches I 
> posted are applied).
> 
> Without this patch boot from SD card is broken. What is the right fix then?
> 

There are two choices to implement card detect:

1. Mux the card detect line from the SD card cage directly to the host
controller and expect PRESENT state register to indicate whether card is
present or not.

2. Mux the card detect line as a GPIO and use software
(dm_gpio_get_value() call) to detect whether card is present or not. In
that case, PRESENT_STATE[16,17,18] are completely useless because there
is no card detect line going into the IP.

It seems that you are using #2. What confuses me is how any cards are
able to assert CARD_DETECT.

Thanks,
Faiz


More information about the U-Boot mailing list