aboutsummaryrefslogtreecommitdiff
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>2022-09-27 11:54:03 +0200
committerStefan Roese <sr@denx.de>2022-10-24 11:09:19 +0200
commit27836705839c4751ac28239ee6fa1f3984e46d4d (patch)
treef2d870bb3ac574bf660add626e36fe8b4c1c6b5e /drivers/watchdog
parent0ab55cb6f713abeb0b0f0cc1af2d2d16353b5ee0 (diff)
downloadu-boot-27836705839c4751ac28239ee6fa1f3984e46d4d.zip
u-boot-27836705839c4751ac28239ee6fa1f3984e46d4d.tar.gz
u-boot-27836705839c4751ac28239ee6fa1f3984e46d4d.tar.bz2
watchdog: introduce a u-boot,autostart property
This is a companion to u-boot,noautostart. If one has a single watchdog device that one does want to have auto-started, but several others that one doesn't, the only way currently is to set the CONFIG_WATCHDOG_AUTOSTART and then use the opt-out for the majority. The main motivation for this is to add an autostarted watchdog device to the sandbox (to test a fix) without having to set AUTOSTART in sandbox_defconfig and add the noautostart property to the existing devices. But it's also nice for symmetry, and the logic in init_watchdog_dev() becomes simpler to read because we avoid all the negations. Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/wdt-uclass.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c
index 3f342cd..82df0ff 100644
--- a/drivers/watchdog/wdt-uclass.c
+++ b/drivers/watchdog/wdt-uclass.c
@@ -37,8 +37,8 @@ struct wdt_priv {
ulong next_reset;
/* Whether watchdog_start() has been called on the device. */
bool running;
- /* No autostart */
- bool noautostart;
+ /* autostart */
+ bool autostart;
struct cyclic_info *cyclic;
};
@@ -72,7 +72,7 @@ static void init_watchdog_dev(struct udevice *dev)
dev->name);
}
- if (!IS_ENABLED(CONFIG_WATCHDOG_AUTOSTART) || priv->noautostart) {
+ if (!priv->autostart) {
printf("WDT: Not starting %s\n", dev->name);
return;
}
@@ -267,19 +267,22 @@ static int wdt_pre_probe(struct udevice *dev)
* indicated by a hw_margin_ms property.
*/
ulong reset_period = 1000;
- bool noautostart = false;
+ bool autostart = IS_ENABLED(CONFIG_WATCHDOG_AUTOSTART);
struct wdt_priv *priv;
if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
timeout = dev_read_u32_default(dev, "timeout-sec", timeout);
reset_period = dev_read_u32_default(dev, "hw_margin_ms",
4 * reset_period) / 4;
- noautostart = dev_read_bool(dev, "u-boot,noautostart");
+ if (dev_read_bool(dev, "u-boot,noautostart"))
+ autostart = false;
+ else if (dev_read_bool(dev, "u-boot,autostart"))
+ autostart = true;
}
priv = dev_get_uclass_priv(dev);
priv->timeout = timeout;
priv->reset_period = reset_period;
- priv->noautostart = noautostart;
+ priv->autostart = autostart;
/*
* Pretend this device was last reset "long" ago so the first
* watchdog_reset will actually call its ->reset method.