在 2022/10/26 17:18, Jaehoon Chung 写道:
Hi,

-----Original Message-----
From: qianfan [mailto:qianfangui...@163.com]
Sent: Tuesday, August 30, 2022 12:43 PM
To: Jaehoon Chung <jh80.ch...@samsung.com>; u-boot@lists.denx.de
Cc: Peng Fan <peng....@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, qianfangui...@163.com wrote:
From: qianfan Zhao <qianfangui...@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 <qianfangui...@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>
   #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();
                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;



Reply via email to