提交 7168bcde 编写于 作者: T Tom Rini

Merge https://source.denx.de/u-boot/custodians/u-boot-marvell

- Enhance WDT handling (starting / stopping) and introduce
  CONFIG_WATCHDOG_AUTOSTART to allow disabling of autostart of
  the WDT (Pali)
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册