2020-01-07 15:53:16

by Jack Mitchell

[permalink] [raw]
Subject: [PATCH v2] watchdog: dw_wdt: ping watchdog to reset countdown before start

Currently on an rk3288 SoC when trying to use the watchdog the SoC will
instantly reset. This is due to the watchdog countdown counter being set
to its initial value of 0x0. Reset the watchdog counter before start in
order to correctly start the countdown timer from the right position.

Signed-off-by: Jack Mitchell <[email protected]>
---
drivers/watchdog/dw_wdt.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
index fef7c61f5555..4a902d015bc2 100644
--- a/drivers/watchdog/dw_wdt.c
+++ b/drivers/watchdog/dw_wdt.c
@@ -135,6 +135,7 @@ static int dw_wdt_start(struct watchdog_device *wdd)
struct dw_wdt *dw_wdt = to_dw_wdt(wdd);

dw_wdt_set_timeout(wdd, wdd->timeout);
+ dw_wdt_ping(&dw_wdt->wdd);
dw_wdt_arm_system_reset(dw_wdt);

return 0;
--
2.24.1


2020-01-07 18:28:17

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH v2] watchdog: dw_wdt: ping watchdog to reset countdown before start

On Tue, Jan 07, 2020 at 03:51:55PM +0000, Jack Mitchell wrote:
> Currently on an rk3288 SoC when trying to use the watchdog the SoC will
> instantly reset. This is due to the watchdog countdown counter being set
> to its initial value of 0x0. Reset the watchdog counter before start in
> order to correctly start the countdown timer from the right position.
>
> Signed-off-by: Jack Mitchell <[email protected]>

You sent this three times, one with v2, no explanation for v2.
On top of that, the To: destination is messed up in all three versions.
Excellent example for how not to send a patch.

Anyway,

Reviewed-by: Guenter Roeck <[email protected]>

> ---
> drivers/watchdog/dw_wdt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/watchdog/dw_wdt.c b/drivers/watchdog/dw_wdt.c
> index fef7c61f5555..4a902d015bc2 100644
> --- a/drivers/watchdog/dw_wdt.c
> +++ b/drivers/watchdog/dw_wdt.c
> @@ -135,6 +135,7 @@ static int dw_wdt_start(struct watchdog_device *wdd)
> struct dw_wdt *dw_wdt = to_dw_wdt(wdd);
>
> dw_wdt_set_timeout(wdd, wdd->timeout);
> + dw_wdt_ping(&dw_wdt->wdd);
> dw_wdt_arm_system_reset(dw_wdt);
>
> return 0;
> --
> 2.24.1
>