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

From: qianfan Zhao qianfanguijin@163.com
watchdog will reset when 'mmc read' or 'ext4load' a large file from mmc device. Reset watchdog when accessing mmc device.
Signed-off-by: qianfan Zhao qianfanguijin@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;

On 7/13/22 16:32, qianfanguijin@163.com wrote:
From: qianfan Zhao qianfanguijin@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.
Best Regards, Jaehoon Chung
Signed-off-by: qianfan Zhao qianfanguijin@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;
udelay(1000); }WATCHDOG_RESET();
@@ -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;

在 2022/7/26 16:31, Jaehoon Chung 写道:
On 7/13/22 16:32, qianfanguijin@163.com wrote:
From: qianfan Zhao qianfanguijin@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.
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@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;
udelay(1000); }WATCHDOG_RESET();
@@ -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;

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

在 2022/10/26 17:18, Jaehoon Chung 写道:
Hi,
-----Original Message----- From: qianfan [mailto:qianfanguijin@163.com] Sent: Tuesday, August 30, 2022 12:43 PM To: Jaehoon Chung jh80.chung@samsung.com; u-boot@lists.denx.de Cc: Peng Fan peng.fan@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@163.com wrote:
From: qianfan Zhao qianfanguijin@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@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;

On 27.10.22 08:49, qianfan wrote:
在 2022/10/26 17:18, Jaehoon Chung 写道:
Hi,
-----Original Message----- From: qianfan [mailto:qianfanguijin@163.com] Sent: Tuesday, August 30, 2022 12:43 PM To: Jaehoon Chung jh80.chung@samsung.com; u-boot@lists.denx.de Cc: Peng Fan peng.fan@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@163.com wrote:
From: qianfan Zhao qianfanguijin@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@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
participants (4)
-
Jaehoon Chung
-
qianfan
-
qianfanguijin@163.com
-
Stefan Roese