[PATCH] drivers: mmc: Reset watchdog when accessing mmc device

Stefan Roese sr at denx.de
Thu Oct 27 09:03:59 CEST 2022


On 27.10.22 08:49, qianfan wrote:
> 
> 
> 在 2022/10/26 17:18, Jaehoon Chung 写道:
>> Hi,
>>
>>> -----Original Message-----
>>> From: qianfan [mailto:qianfanguijin at 163.com]
>>> Sent: Tuesday, August 30, 2022 12:43 PM
>>> To: Jaehoon Chung <jh80.chung at samsung.com>; u-boot at lists.denx.de
>>> Cc: Peng Fan <peng.fan at nxp.com>
>>> Subject: Re: [PATCH] drivers: mmc: Reset watchdog when accessing mmc 
>>> device
>>>
>>>
>>>
>>> 在 2022/7/26 16:31, Jaehoon Chung 写道:
>>>> On 7/13/22 16:32, qianfanguijin at 163.com wrote:
>>>>> From: qianfan Zhao <qianfanguijin at 163.com>
>>>>>
>>>>> watchdog will reset when 'mmc read' or 'ext4load' a large file from
>>>>> mmc device. Reset watchdog when accessing mmc device.
>>>> I don't know why this patch is need.
>>> Hi:
>>>
>>> maybe your's board doesn't have a hardware watchdog.
>>> on my board there has a gpio watchdog and we should trigger it no 
>>> more than 1.2 second.
>>> otherwise it will reset CPU.
>>>
>>> But 'mmc read' command doesn't trigger watchdog, it's ok if we load a 
>>> smaller imges, but if we
>>> load a very bigger image which more than 100MiB, the watchdog will 
>>> dead and trigger a system reset.
>> Sorry for too late. I had missed your email.
>> Is there a case to load more bigger image than 100MiB?
> The case is loading rootfs.img from mmc and upgrade. The rootfs based on 
> debian or ubuntu
> is very bigger.
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>
>>> So I make this patch to make sure we can trigger watchdog while 
>>> loading mmc.
>>>> Best Regards,
>>>> Jaehoon Chung
>>>>
>>>>> Signed-off-by: qianfan Zhao <qianfanguijin at 163.com>
>>>>> ---
>>>>>    drivers/mmc/mmc.c | 4 ++++
>>>>>    1 file changed, 4 insertions(+)
>>>>>
>>>>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index
>>>>> 4d9871d69f..27ffdb7fa7 100644
>>>>> --- a/drivers/mmc/mmc.c
>>>>> +++ b/drivers/mmc/mmc.c
>>>>> @@ -24,6 +24,7 @@
>>>>>    #include <memalign.h>
>>>>>    #include <linux/list.h>
>>>>>    #include <div64.h>
>>>>> +#include <watchdog.h>

Please include cyclic.h now.

>>>>>    #include "mmc_private.h"
>>>>>
>>>>>    #define DEFAULT_CMD6_TIMEOUT_MS  500 @@ -297,6 +298,7 @@ int
>>>>> mmc_poll_for_busy(struct mmc *mmc, int timeout_ms)
>>>>>            if (timeout_ms-- <= 0)
>>>>>                break;
>>>>>
>>>>> +        WATCHDOG_RESET();

And please use schedule() here now instead of WATCHDOG_RESET().

Thanks,
Stefan

>>>>>            udelay(1000);
>>>>>        }
>>>>>
>>>>> @@ -500,6 +502,8 @@ ulong mmc_bread(struct blk_desc *block_dev, 
>>>>> lbaint_t start, lbaint_t blkcnt,
>>>>>            blocks_todo -= cur;
>>>>>            start += cur;
>>>>>            dst += cur * mmc->read_bl_len;
>>>>> +
>>>>> +        WATCHDOG_RESET();
>>>>>        } while (blocks_todo > 0);
>>>>>
>>>>>        return blkcnt;
>>
>>
> 

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list