driver: watchdog: reset watchdog in designware_wdt_stop() function

In uboot command line environment, watchdog is not able to be
stopped with below commands:
SOCFPGA_STRATIX10 # wdt dev watchdog@ffd00200
SOCFPGA_STRATIX10 # wdt stop
Refer to watchdog driver in linux kernel, it is also need to reset
watchdog after disable it so that the disable action takes effect.

Signed-off-by: Meng Li <Meng.Li@windriver.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Sean Anderson <sean.anderson@seco.com>
This commit is contained in:
MengLi 2021-05-24 10:22:48 +08:00 committed by Stefan Roese
parent d3fc3da9a4
commit 4f7abafe1c

View File

@ -22,6 +22,7 @@
struct designware_wdt_priv {
void __iomem *base;
unsigned int clk_khz;
struct reset_ctl_bulk *resets;
};
/*
@ -95,6 +96,18 @@ static int designware_wdt_stop(struct udevice *dev)
designware_wdt_reset(dev);
writel(0, priv->base + DW_WDT_CR);
if (CONFIG_IS_ENABLED(DM_RESET)) {
int ret;
ret = reset_assert_bulk(priv->resets);
if (ret)
return ret;
ret = reset_deassert_bulk(priv->resets);
if (ret)
return ret;
}
return 0;
}
@ -143,13 +156,11 @@ static int designware_wdt_probe(struct udevice *dev)
#endif
if (CONFIG_IS_ENABLED(DM_RESET)) {
struct reset_ctl_bulk resets;
ret = reset_get_bulk(dev, &resets);
ret = reset_get_bulk(dev, priv->resets);
if (ret)
goto err;
ret = reset_deassert_bulk(&resets);
ret = reset_deassert_bulk(priv->resets);
if (ret)
goto err;
}