mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 16:10:58 +00:00
watchdog: wdt-uclass.c: keep track of each device's running state
As a step towards handling all DM watchdogs in watchdog_reset(), use a
per-device flag to keep track of whether the device has been started
instead of a bit in gd->flags.
We will still need that bit to know whether we are past
initr_watchdog() and hence have populated gd->watchdog_dev -
incidentally, that is how it was used prior to commit 9c44ff1c5f
.
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
This commit is contained in:
parent
3eaf6e2e42
commit
f1b112afbb
1 changed files with 16 additions and 4 deletions
|
@ -33,6 +33,8 @@ struct wdt_priv {
|
|||
* ->reset().
|
||||
*/
|
||||
ulong next_reset;
|
||||
/* Whether watchdog_start() has been called on the device. */
|
||||
bool running;
|
||||
};
|
||||
|
||||
static void init_watchdog_dev(struct udevice *dev)
|
||||
|
@ -74,6 +76,7 @@ int initr_watchdog(void)
|
|||
}
|
||||
init_watchdog_dev(gd->watchdog_dev);
|
||||
|
||||
gd->flags |= GD_FLG_WDT_READY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -86,8 +89,11 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
|
|||
return -ENOSYS;
|
||||
|
||||
ret = ops->start(dev, timeout_ms, flags);
|
||||
if (ret == 0)
|
||||
gd->flags |= GD_FLG_WDT_READY;
|
||||
if (ret == 0) {
|
||||
struct wdt_priv *priv = dev_get_uclass_priv(dev);
|
||||
|
||||
priv->running = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -101,8 +107,11 @@ int wdt_stop(struct udevice *dev)
|
|||
return -ENOSYS;
|
||||
|
||||
ret = ops->stop(dev);
|
||||
if (ret == 0)
|
||||
gd->flags &= ~GD_FLG_WDT_READY;
|
||||
if (ret == 0) {
|
||||
struct wdt_priv *priv = dev_get_uclass_priv(dev);
|
||||
|
||||
priv->running = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -156,6 +165,9 @@ void watchdog_reset(void)
|
|||
|
||||
dev = gd->watchdog_dev;
|
||||
priv = dev_get_uclass_priv(dev);
|
||||
if (!priv->running)
|
||||
return;
|
||||
|
||||
/* Do not reset the watchdog too often */
|
||||
now = get_timer(0);
|
||||
if (time_after_eq(now, priv->next_reset)) {
|
||||
|
|
Loading…
Reference in a new issue