[PATCH v4 6/7] mmc: zynq_sdhci: Wait till sd card detect state is stable
Jaehoon Chung
jh80.chung at samsung.com
Tue Aug 3 07:05:38 CEST 2021
On 8/3/21 1:57 PM, Ashok Reddy Soma wrote:
> HI Jaehoon,
>
>> -----Original Message-----
>> From: Jaehoon Chung <jh80.chung at samsung.com>
>> Sent: Tuesday, August 3, 2021 3:45 AM
>> To: Ashok Reddy Soma <ashokred at xilinx.com>; u-boot at lists.denx.de
>> Cc: peng.fan at nxp.com; faiz_abbas at ti.com; sjg at chromium.org;
>> michael at walle.cc; git <git at xilinx.com>; monstr at monstr.eu;
>> somaashokreddy at gmail.com; T Karthik Reddy <tkarthik at xilinx.com>
>> Subject: Re: [PATCH v4 6/7] mmc: zynq_sdhci: Wait till sd card detect state is
>> stable
>>
>> Hi Ashok,
>>
>> On 8/2/21 7:16 PM, Ashok Reddy Soma wrote:
>>> From: T Karthik Reddy <t.karthik.reddy at xilinx.com>
>>>
>>> As per SD spec when SD host controller is reset, it takes 1000msec to
>>> detect the card state. In case, if we enable the sd bus voltage & card
>>> detect state is not stable, then host controller will disable the sd
>>> bus voltage.
>>>
>>> In case of warm/subsystem reboot, due to unstable card detect state
>>> host controller is disabling the sd bus voltage to sd card causing sd
>>> card timeout error. So we wait for a maximum of 1000msec to get the
>>> card detect state stable before we enable the sd bus voltage.
>>>
>>> This current fix is workaround for now, this needs to be analysed
>>> further. Zynqmp platform should behave the same as Versal, but we did
>>> not encounter this issue as of now. So we are fixing it for Versal
>>> only.
>>>
>>> Signed-off-by: T Karthik Reddy <t.karthik.reddy at xilinx.com>
>>> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at xilinx.com>
>>> ---
>>>
>>> (no changes since v2)
>>>
>>> Changes in v2:
>>> - Changed return error from -EIO to -ETIMEDOUT in arasan_sdhci_probe()
>>> in card detect state stable workaround
>>>
>>> drivers/mmc/zynq_sdhci.c | 17 +++++++++++++++++
>>> 1 file changed, 17 insertions(+)
>>>
>>> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index
>>> 9a1693940a..89776f48eb 100644
>>> --- a/drivers/mmc/zynq_sdhci.c
>>> +++ b/drivers/mmc/zynq_sdhci.c
>>> @@ -776,6 +776,23 @@ static int arasan_sdhci_probe(struct udevice *dev)
>>> return ret;
>>> upriv->mmc = host->mmc;
>>>
>>> + /*
>>> + * Wait for 1000msec till the card detect state gets stable
>>> + * else host controller will set sd power bus voltage to 0.
>>> + */
>>
>> According to commit-msg, this is workaround code, right?
>> Then could you add FIXME or WORKAROUND in comment.
>
> Sure, I will add WORKAROUND in comment and send V5.
I hope that it will be reverted after fixed in future.
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
>
> Thanks,
> Ashok
>
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>> + if (IS_ENABLED(CONFIG_ARCH_VERSAL)) {
>>> + u32 timeout = 1000;
>>> +
>>> + while (((sdhci_readl(host, SDHCI_PRESENT_STATE) &
>>> + SDHCI_CARD_STATE_STABLE) == 0) && timeout--) {
>>> + mdelay(1);
>>> + }
>>> + if (!timeout) {
>>> + dev_err(dev, "Sdhci card detect state not stable\n");
>>> + return -ETIMEDOUT;
>>> + }
>>> + }
>>> +
>>> return sdhci_probe(dev);
>>> }
>>>
>>>
>
More information about the U-Boot
mailing list