[PATCH] mmc: dw_mmc: Fixes timeout issue for FIFO mode

Jaehoon Chung jh80.chung at samsung.com
Wed Jan 12 12:15:29 CET 2022


Hi,

On 1/12/22 3:17 PM, gtXfined H. wrote:
> Hi,
> 
> I switched back to master branch and only made the following changes.
> 
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -167,6 +167,10 @@ static int dwmci_data_transfer(struct dwmci_host
> *host, struct mmc_data *data)
>                         len = 0;
>                         if (data->flags == MMC_DATA_READ &&
>                             (mask & (DWMCI_INTMSK_RXDR |
> DWMCI_INTMSK_DTO))) {
> +                               if (!(mask & DWMCI_INTMSK_DTO) &&
> +                                    (dwmci_readl(host, DWMCI_RINTSTS) &
> DWMCI_INTMSK_DTO)) {
> +                                       printf("warn: DTO changed to 1\n");
> +                               }
>                                 dwmci_writel(host, DWMCI_RINTSTS,
>                                              DWMCI_INTMSK_RXDR |

You need to set your email-client environment.
https://www.kernel.org/doc/html/v5.16/process/email-clients.html?highlight=email



> DWMCI_INTMSK_DTO);
>                                 while (size) {
> @@ -224,6 +228,11 @@ static int dwmci_data_transfer(struct dwmci_host
> *host, struct mmc_data *data)
> 
>         dwmci_writel(host, DWMCI_RINTSTS, mask);
> 
> +#ifdef CONFIG_SPL_BUILD
> +       printf("mmc: transfer %8p, %5d, in %4ld  (%d, %02x)\n",
> +                       buf, data->blocks, get_timer(start), size, mask);
> +#endif
> +
>         return ret;
>  }
> 
> Then tried the same test and reproduced the timeout issue with the
> following logs.
> 
> U-Boot SPL 2022.01-00373-gfe04d885fb-dirty (Jan 12 2022 - 13:52:15 +0800)
> Trying to boot from MMC1
> mmc: transfer  3fffac8,     1, in    0  (0, 0c)
> mmc: transfer  3fffb80,     1, in    2  (0, 0c)
> mmc: transfer  3fffd00,     1, in    1  (0, 0c)
> warn: DTO changed to 1
> mmc: transfer   2001c0,     1, in 1001  (0, 04)
> mmc_load_image_raw_sector: mmc block read error
> Trying to boot from MMC1
> warn: DTO changed to 1
> mmc: transfer   2001c0,     1, in 1001  (0, 04)
> mmc_load_image_raw_sector: mmc block read error
> SPL: failed to boot from all boot devices
> ### ERROR ### Please RESET the board ###
> 
> According to the logs, you can see that the DTO interrupt was
> unintentionally cleared

I had been tested after set the fifo-mode. It's occurred timeout error. 
But your patch doesn't work, too. It's not solution to solve this problem.

Well, I have checked some code. It seems that there are some bugs about fifo-mode.

Best Regards,
Jaehoon Chung

> 
> 
> BR,
> Jensen, Huang
> 
> 
> On Wed, Jan 12, 2022 at 7:04 AM Jaehoon Chung <jh80.chung at samsung.com>
> wrote:
> 
>> On 1/11/22 8:05 PM, gtXfined H. wrote:
>>> Hi,
>>>
>>>>  Which board did you test? When you do power-on, is it reproduced every
>>> time?
>>>
>>> I am using Rockchip RK3399 based board - NanoPi R4S for this test.
>>> It doesn't appear every time, but it should be encountered once about 20
>>> times.
>>> I have run "setenv bootcmd reset; saveenv; reset" for automated testing.
>>
>> This patch doesn't clarify.
>>
>> The below commit had been fixed that doesn't work when data read.
>> "mmc: dw_mmc: Fixes data read when receiving DTO interrupt in FIFO mode"
>>
>> It seems that not clearing during reset card.
>> (power glitch or other problem..?)
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>>
>>>
>>>> Could you change from your ID to your name?
>>>
>>> This is my first time sending a patch, sorry I didn't notice this, do I
>>> need to resend this patch?
>>>
>>>
>>> BR,
>>> Jensen, Huang
>>>
>>>
>>> On Tue, Jan 11, 2022 at 6:38 PM Jaehoon Chung <jh80.chung at samsung.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> On 1/11/22 7:24 PM, hmz007 wrote:
>>>>> Clearing the DTO interrupt should be unnecessary, and it would
>>>>> potentially result in never receiving this interrupt again.
>>>>>
>>>>> Do power-on or reset from uboot for a while can reproduce the issue:
>>>>>   dwmci_data_transfer: Timeout waiting for data!
>>>>>   mmc_load_image_raw_sector: mmc block read error
>>>>
>>>> Which board did you test? When you do power-on, is it reproduced every
>>>> time?
>>>>
>>>>>
>>>>> Tested on NanoPi R4S with SanDisk Extreme PRO 32GB.
>>>>>
>>>>> Fixes: 8cb9d3ed3a ("mmc: dw_mmc: Fixes data read when receiving DTO
>>>> interrupt in FIFO mode")
>>>>> Signed-off-by: hmz007 <hmz007 at gmail.com>
>>>>
>>>> Could you change from your ID to your name?
>>>>
>>>> Best Regards,
>>>> Jaehoon Chung
>>>>
>>>>> ---
>>>>>  drivers/mmc/dw_mmc.c | 2 +-
>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
>>>>> index a949dad574..8fa26b340b 100644
>>>>> --- a/drivers/mmc/dw_mmc.c
>>>>> +++ b/drivers/mmc/dw_mmc.c
>>>>> @@ -168,7 +168,7 @@ static int dwmci_data_transfer(struct dwmci_host
>>>> *host, struct mmc_data *data)
>>>>>                       if (data->flags == MMC_DATA_READ &&
>>>>>                           (mask & (DWMCI_INTMSK_RXDR |
>>>> DWMCI_INTMSK_DTO))) {
>>>>>                               dwmci_writel(host, DWMCI_RINTSTS,
>>>>> -                                          DWMCI_INTMSK_RXDR |
>>>> DWMCI_INTMSK_DTO);
>>>>> +                                          DWMCI_INTMSK_RXDR);
>>>>>                               while (size) {
>>>>>                                       ret = dwmci_fifo_ready(host,
>>>>>                                                       DWMCI_FIFO_EMPTY,
>>>>>
>>>>
>>>>
>>>
>>
>>
> 



More information about the U-Boot mailing list