diff mbox series

[U-Boot,2/4,v5] watchdog: cadence: Remove driver specific "timeout-sec" handling

Message ID 20190425071703.9647-2-sr@denx.de
State Awaiting Upstream
Delegated to: Stefan Roese
Headers show
Series [U-Boot,1/4,v5] watchdog: Implement generic watchdog_reset() version | expand

Commit Message

Stefan Roese April 25, 2019, 7:17 a.m. UTC
Now that we have a generic DT property "timeout-sec" handling, the
driver specific implementation can be dropped.

This patch also changes the timeout restriction to the min and max
values (clipping). Before this patch, the value provided via
"timeout-sec" was used if the parameter was too high or low. Now
the driver specific min and max values are used instead.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Michal Simek <michal.simek@xilinx.com>
Tested-by: Michal Simek <michal.simek@xilinx.com> (on zcu100)
---
v5:
- No Change

v4:
- No Change

v3:
- Divide timeout in _start() by 1000 to get value in seconds

v2:
- New patch

 drivers/watchdog/cdns_wdt.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

Comments

Stefan Roese April 26, 2019, 10:48 a.m. UTC | #1
On 25.04.19 09:17, Stefan Roese wrote:
> Now that we have a generic DT property "timeout-sec" handling, the
> driver specific implementation can be dropped.
> 
> This patch also changes the timeout restriction to the min and max
> values (clipping). Before this patch, the value provided via
> "timeout-sec" was used if the parameter was too high or low. Now
> the driver specific min and max values are used instead.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Reviewed-by: Michal Simek <michal.simek@xilinx.com>
> Tested-by: Michal Simek <michal.simek@xilinx.com> (on zcu100)

Applied to u-boot-marvell/master.

Thanks,
Stefan
diff mbox series

Patch

diff --git a/drivers/watchdog/cdns_wdt.c b/drivers/watchdog/cdns_wdt.c
index fc85fbcec2..6a608b6371 100644
--- a/drivers/watchdog/cdns_wdt.c
+++ b/drivers/watchdog/cdns_wdt.c
@@ -10,6 +10,7 @@ 
 #include <dm.h>
 #include <wdt.h>
 #include <clk.h>
+#include <div64.h>
 #include <linux/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -23,7 +24,6 @@  struct cdns_regs {
 
 struct cdns_wdt_priv {
 	bool rst;
-	u32 timeout;
 	struct cdns_regs *regs;
 };
 
@@ -142,10 +142,10 @@  static int cdns_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
 		return -1;
 	}
 
-	if ((timeout < CDNS_WDT_MIN_TIMEOUT) ||
-	    (timeout > CDNS_WDT_MAX_TIMEOUT)) {
-		timeout = priv->timeout;
-	}
+	/* Calculate timeout in seconds and restrict to min and max value */
+	do_div(timeout, 1000);
+	timeout = max_t(u64, timeout, CDNS_WDT_MIN_TIMEOUT);
+	timeout = min_t(u64, timeout, CDNS_WDT_MAX_TIMEOUT);
 
 	debug("%s: CLK_FREQ %ld, timeout %lld\n", __func__, clk_f, timeout);
 
@@ -235,12 +235,9 @@  static int cdns_wdt_ofdata_to_platdata(struct udevice *dev)
 	if (IS_ERR(priv->regs))
 		return PTR_ERR(priv->regs);
 
-	priv->timeout = dev_read_u32_default(dev, "timeout-sec",
-					     CDNS_WDT_DEFAULT_TIMEOUT);
-
 	priv->rst = dev_read_bool(dev, "reset-on-timeout");
 
-	debug("%s: timeout %d, reset %d\n", __func__, priv->timeout, priv->rst);
+	debug("%s: reset %d\n", __func__, priv->rst);
 
 	return 0;
 }