* [PATCH v3 1/4] watchdog: da9052_wdt: add support for nowayout
2025-03-26 8:29 [PATCH v3 0/4] Various fixes for the da9052 watchdog Marcus Folkesson
@ 2025-03-26 8:29 ` Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 2/4] watchdog: da9052_wdt: use timeout value from external inputs Marcus Folkesson
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Marcus Folkesson @ 2025-03-26 8:29 UTC (permalink / raw)
To: Support Opensource, Wim Van Sebroeck, Guenter Roeck
Cc: linux-watchdog, linux-kernel, Marcus Folkesson
Add nowayout module parameter for not stopping the
watchdog when userspae application quits.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
drivers/watchdog/da9052_wdt.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/watchdog/da9052_wdt.c b/drivers/watchdog/da9052_wdt.c
index 77039f2f0be54273df1666fe40c413b6c89285a1..a8ff1e6a7903f6f139c5bb60d7d92ca39077ee04 100644
--- a/drivers/watchdog/da9052_wdt.c
+++ b/drivers/watchdog/da9052_wdt.c
@@ -30,6 +30,12 @@ struct da9052_wdt_data {
unsigned long jpast;
};
+static bool nowayout = WATCHDOG_NOWAYOUT;
+module_param(nowayout, bool, 0);
+MODULE_PARM_DESC(nowayout,
+ "Watchdog cannot be stopped once started (default="
+ __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+
static const struct {
u8 reg_val;
int time; /* Seconds */
@@ -172,6 +178,7 @@ static int da9052_wdt_probe(struct platform_device *pdev)
da9052_wdt->ops = &da9052_wdt_ops;
da9052_wdt->parent = dev;
watchdog_set_drvdata(da9052_wdt, driver_data);
+ watchdog_set_nowayout(da9052_wdt, nowayout);
if (da9052->fault_log & DA9052_FAULTLOG_TWDERROR)
da9052_wdt->bootstatus |= WDIOF_CARDRESET;
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 2/4] watchdog: da9052_wdt: use timeout value from external inputs
2025-03-26 8:29 [PATCH v3 0/4] Various fixes for the da9052 watchdog Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 1/4] watchdog: da9052_wdt: add support for nowayout Marcus Folkesson
@ 2025-03-26 8:29 ` Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 3/4] watchdog: da9052_wdt: do not disable wdt during probe Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 4/4] watchdog: da9052_wdt: respect TWDMIN Marcus Folkesson
3 siblings, 0 replies; 6+ messages in thread
From: Marcus Folkesson @ 2025-03-26 8:29 UTC (permalink / raw)
To: Support Opensource, Wim Van Sebroeck, Guenter Roeck
Cc: linux-watchdog, linux-kernel, Marcus Folkesson
Introduce the `timeout` module parameter and pass it to
watchdog_init_timeout(). If the parameter is not set or contains an
invalid value, fallback on the `timeout-secs` devicetree property value.
If none of the above is valid, go for the old default value.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
drivers/watchdog/da9052_wdt.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/watchdog/da9052_wdt.c b/drivers/watchdog/da9052_wdt.c
index a8ff1e6a7903f6f139c5bb60d7d92ca39077ee04..fa9078d4c136a52f1193768fe93dc04189519679 100644
--- a/drivers/watchdog/da9052_wdt.c
+++ b/drivers/watchdog/da9052_wdt.c
@@ -36,6 +36,12 @@ MODULE_PARM_DESC(nowayout,
"Watchdog cannot be stopped once started (default="
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+static int timeout;
+module_param(timeout, int, 0);
+MODULE_PARM_DESC(timeout,
+ "Watchdog timeout in seconds. (default = "
+ __MODULE_STRING(WDT_DEFAULT_TIMEOUT) ")");
+
static const struct {
u8 reg_val;
int time; /* Seconds */
@@ -178,6 +184,7 @@ static int da9052_wdt_probe(struct platform_device *pdev)
da9052_wdt->ops = &da9052_wdt_ops;
da9052_wdt->parent = dev;
watchdog_set_drvdata(da9052_wdt, driver_data);
+ watchdog_init_timeout(da9052_wdt, timeout, dev);
watchdog_set_nowayout(da9052_wdt, nowayout);
if (da9052->fault_log & DA9052_FAULTLOG_TWDERROR)
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 3/4] watchdog: da9052_wdt: do not disable wdt during probe
2025-03-26 8:29 [PATCH v3 0/4] Various fixes for the da9052 watchdog Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 1/4] watchdog: da9052_wdt: add support for nowayout Marcus Folkesson
2025-03-26 8:29 ` [PATCH v3 2/4] watchdog: da9052_wdt: use timeout value from external inputs Marcus Folkesson
@ 2025-03-26 8:29 ` Marcus Folkesson
2025-03-26 13:51 ` Guenter Roeck
2025-03-26 8:29 ` [PATCH v3 4/4] watchdog: da9052_wdt: respect TWDMIN Marcus Folkesson
3 siblings, 1 reply; 6+ messages in thread
From: Marcus Folkesson @ 2025-03-26 8:29 UTC (permalink / raw)
To: Support Opensource, Wim Van Sebroeck, Guenter Roeck
Cc: linux-watchdog, linux-kernel, Marcus Folkesson
If the watchog is started by the bootloader, we do not want the watchdog
to be disabled.
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
drivers/watchdog/da9052_wdt.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/watchdog/da9052_wdt.c b/drivers/watchdog/da9052_wdt.c
index fa9078d4c136a52f1193768fe93dc04189519679..5bef70cb74b36412b427f5cf7255f16b8eb00ac7 100644
--- a/drivers/watchdog/da9052_wdt.c
+++ b/drivers/watchdog/da9052_wdt.c
@@ -194,11 +194,15 @@ static int da9052_wdt_probe(struct platform_device *pdev)
if (da9052->fault_log & DA9052_FAULTLOG_VDDFAULT)
da9052_wdt->bootstatus |= WDIOF_POWERUNDER;
- ret = da9052_reg_update(da9052, DA9052_CONTROL_D_REG,
- DA9052_CONTROLD_TWDSCALE, 0);
- if (ret < 0) {
- dev_err(dev, "Failed to disable watchdog bits, %d\n", ret);
+ ret = da9052_reg_read(da9052, DA9052_CONTROL_D_REG);
+ if (ret < 0)
return ret;
+
+ /* Check if FW enabled the watchdog */
+ if (ret & DA9052_CONTROLD_TWDSCALE) {
+ /* Ensure proper initialization */
+ da9052_wdt_start(da9052_wdt);
+ set_bit(WDOG_HW_RUNNING, &da9052_wdt->status);
}
return devm_watchdog_register_device(dev, &driver_data->wdt);
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 4/4] watchdog: da9052_wdt: respect TWDMIN
2025-03-26 8:29 [PATCH v3 0/4] Various fixes for the da9052 watchdog Marcus Folkesson
` (2 preceding siblings ...)
2025-03-26 8:29 ` [PATCH v3 3/4] watchdog: da9052_wdt: do not disable wdt during probe Marcus Folkesson
@ 2025-03-26 8:29 ` Marcus Folkesson
3 siblings, 0 replies; 6+ messages in thread
From: Marcus Folkesson @ 2025-03-26 8:29 UTC (permalink / raw)
To: Support Opensource, Wim Van Sebroeck, Guenter Roeck
Cc: linux-watchdog, linux-kernel, Marcus Folkesson
We have to wait at least the minimium time for the watchdog window
(TWDMIN) before writings to the wdt register after the
watchdog is activated.
Otherwise the chip will assert TWD_ERROR and power down to reset mode.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
drivers/watchdog/da9052_wdt.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/watchdog/da9052_wdt.c b/drivers/watchdog/da9052_wdt.c
index 5bef70cb74b36412b427f5cf7255f16b8eb00ac7..afb7887c3a1e865d3c581c5ab77bb91a5533ff07 100644
--- a/drivers/watchdog/da9052_wdt.c
+++ b/drivers/watchdog/da9052_wdt.c
@@ -180,6 +180,7 @@ static int da9052_wdt_probe(struct platform_device *pdev)
da9052_wdt = &driver_data->wdt;
da9052_wdt->timeout = DA9052_DEF_TIMEOUT;
+ da9052_wdt->min_hw_heartbeat_ms = DA9052_TWDMIN;
da9052_wdt->info = &da9052_wdt_info;
da9052_wdt->ops = &da9052_wdt_ops;
da9052_wdt->parent = dev;
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread