aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorQuentin Schulz <quentin.schulz@theobroma-systems.com>2022-11-15 11:20:14 +0100
committerStefan Roese <sr@denx.de>2022-11-22 08:56:26 +0100
commitdca313ff9dea03d523e3a63568b5ed265f811c91 (patch)
tree145e87f81c9d9ebea2dc628d0b7acfb0c8d54eee /drivers
parent16e49a14b2af1421cbaeefb9ce8ee863e45fd71b (diff)
downloadu-boot-dca313ff9dea03d523e3a63568b5ed265f811c91.zip
u-boot-dca313ff9dea03d523e3a63568b5ed265f811c91.tar.gz
u-boot-dca313ff9dea03d523e3a63568b5ed265f811c91.tar.bz2
watchdog: designware: make reset really optional
Checking for DM_RESET is not enough since not all watchdog implementations use a reset lane. Such is the case for Rockchip implementation for example. Since reset_assert_bulk will only succeed if the resets property exists in the watchdog DT node, it needs to be called only if a reset property is present. This adds a condition on the resets property presence in the watchdog DT node before assuming a reset lane needs to be fetched with reset_assert_bulk, by calling ofnode_read_prop. Cc: Quentin Schulz <foss+uboot@0leil.net> Reviewed-by: Stefan Roese <sr@denx.de> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/watchdog/designware_wdt.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/watchdog/designware_wdt.c b/drivers/watchdog/designware_wdt.c
index cad756a..f8df191 100644
--- a/drivers/watchdog/designware_wdt.c
+++ b/drivers/watchdog/designware_wdt.c
@@ -72,13 +72,13 @@ static int designware_wdt_reset(struct udevice *dev)
static int designware_wdt_stop(struct udevice *dev)
{
struct designware_wdt_priv *priv = dev_get_priv(dev);
+ __maybe_unused int ret;
designware_wdt_reset(dev);
writel(0, priv->base + DW_WDT_CR);
- if (CONFIG_IS_ENABLED(DM_RESET)) {
- int ret;
-
+ if (CONFIG_IS_ENABLED(DM_RESET) &&
+ ofnode_read_prop(dev_ofnode(dev), "resets", &ret)) {
ret = reset_assert_bulk(&priv->resets);
if (ret)
return ret;
@@ -135,7 +135,8 @@ static int designware_wdt_probe(struct udevice *dev)
priv->clk_khz = CONFIG_DW_WDT_CLOCK_KHZ;
#endif
- if (CONFIG_IS_ENABLED(DM_RESET)) {
+ if (CONFIG_IS_ENABLED(DM_RESET) &&
+ ofnode_read_prop(dev_ofnode(dev), "resets", &ret)) {
ret = reset_get_bulk(dev, &priv->resets);
if (ret)
goto err;