- Enhance WDT handling (starting / stopping) and introduce CONFIG_WATCHDOG_AUTOSTART to allow disabling of autostart of the WDT (Pali)
This commit is contained in:
@@ -32,6 +32,7 @@ CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_WDT=y
|
||||
CONFIG_CMD_TFTPPUT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
@@ -88,4 +89,7 @@ CONFIG_USB_ETHER_ASIX=y
|
||||
CONFIG_USB_ETHER_MCS7830=y
|
||||
CONFIG_USB_ETHER_RTL8152=y
|
||||
CONFIG_USB_ETHER_SMSC95XX=y
|
||||
# CONFIG_WATCHDOG_AUTOSTART is not set
|
||||
CONFIG_WDT=y
|
||||
CONFIG_WDT_ARMADA_37XX=y
|
||||
CONFIG_SHA1=y
|
||||
|
||||
@@ -9,6 +9,19 @@ config WATCHDOG
|
||||
this option if you want to service enabled watchdog by U-Boot. Disable
|
||||
this option if you want U-Boot to start watchdog but never service it.
|
||||
|
||||
config WATCHDOG_AUTOSTART
|
||||
bool "Automatically start watchdog timer"
|
||||
depends on WDT
|
||||
default y
|
||||
help
|
||||
Automatically start watchdog timer and start servicing it during
|
||||
init phase. Enabled by default. Disable this option if you want
|
||||
to compile U-Boot with CONFIG_WDT support but do not want to
|
||||
activate watchdog, like when CONFIG_WDT option is disabled. You
|
||||
would be able to start watchdog manually by 'wdt' command. Useful
|
||||
when you want to have support for 'wdt' command but do not want
|
||||
to have watchdog enabled by default.
|
||||
|
||||
config WATCHDOG_TIMEOUT_MSECS
|
||||
int "Watchdog timeout in msec"
|
||||
default 128000 if ARCH_MX25 || ARCH_MX31 || ARCH_MX5 || ARCH_MX6
|
||||
|
||||
@@ -27,6 +27,7 @@ static ulong reset_period = 1000;
|
||||
int initr_watchdog(void)
|
||||
{
|
||||
u32 timeout = WATCHDOG_TIMEOUT_SECS;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Init watchdog: This will call the probe function of the
|
||||
@@ -50,8 +51,17 @@ int initr_watchdog(void)
|
||||
4 * reset_period) / 4;
|
||||
}
|
||||
|
||||
wdt_start(gd->watchdog_dev, timeout * 1000, 0);
|
||||
gd->flags |= GD_FLG_WDT_READY;
|
||||
if (!CONFIG_IS_ENABLED(WATCHDOG_AUTOSTART)) {
|
||||
printf("WDT: Not starting\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = wdt_start(gd->watchdog_dev, timeout * 1000, 0);
|
||||
if (ret != 0) {
|
||||
printf("WDT: Failed to start\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("WDT: Started with%s servicing (%ds timeout)\n",
|
||||
IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", timeout);
|
||||
|
||||
@@ -61,21 +71,31 @@ int initr_watchdog(void)
|
||||
int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
|
||||
{
|
||||
const struct wdt_ops *ops = device_get_ops(dev);
|
||||
int ret;
|
||||
|
||||
if (!ops->start)
|
||||
return -ENOSYS;
|
||||
|
||||
return ops->start(dev, timeout_ms, flags);
|
||||
ret = ops->start(dev, timeout_ms, flags);
|
||||
if (ret == 0)
|
||||
gd->flags |= GD_FLG_WDT_READY;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wdt_stop(struct udevice *dev)
|
||||
{
|
||||
const struct wdt_ops *ops = device_get_ops(dev);
|
||||
int ret;
|
||||
|
||||
if (!ops->stop)
|
||||
return -ENOSYS;
|
||||
|
||||
return ops->stop(dev);
|
||||
ret = ops->stop(dev);
|
||||
if (ret == 0)
|
||||
gd->flags &= ~GD_FLG_WDT_READY;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wdt_reset(struct udevice *dev)
|
||||
|
||||
Reference in New Issue
Block a user