public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 05/13 v3] watchdog: at91sam9_wdt: Fix WDT setup in at91_wdt_start()
Date: Tue,  2 Apr 2019 10:57:19 +0200	[thread overview]
Message-ID: <20190402085727.14552-5-sr@denx.de> (raw)
In-Reply-To: <20190402085727.14552-1-sr@denx.de>

This patch fixes the timer register setup in at91_wdt_start() to
correctly configure the register again. The input timeout value is
now in milli-seconds instead of seconds with the new watchdog API.
Make sure to take this into account and only use a max timeout
value of 16 seconds as appropriate for this SoC.

Also the check against a lower timeout value than 0 is removed. This
check makes no sense, as the timeout value is unsigned.

Signed-off-by: Stefan Roese <sr@denx.de>
Reported-by: Heiko Schocher <hs@denx.de>
Cc: Heiko Schocher <hs@denx.de>
Cc: Andreas Bießmann <andreas@biessmann.org>
Cc: Eugen Hristev <eugen.hristev@microchip.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
Tested on the taurus board:
Tested-by: Heiko Schocher <hs@denx.de>
---
v3:
- No change

v2:
- No change

 drivers/watchdog/at91sam9_wdt.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c
index 13f8772e41..b0a3b4ed58 100644
--- a/drivers/watchdog/at91sam9_wdt.c
+++ b/drivers/watchdog/at91sam9_wdt.c
@@ -17,6 +17,7 @@
 #include <asm/io.h>
 #include <asm/arch/at91_wdt.h>
 #include <common.h>
+#include <div64.h>
 #include <dm.h>
 #include <errno.h>
 #include <wdt.h>
@@ -31,27 +32,30 @@ DECLARE_GLOBAL_DATA_PTR;
 #define WDT_SEC2TICKS(s)	(((s) << 8) - 1)
 
 /* Hardware timeout in seconds */
-#define WDT_MAX_TIMEOUT 16
-#define WDT_MIN_TIMEOUT 0
-#define WDT_DEFAULT_TIMEOUT 2
+#define WDT_MAX_TIMEOUT		16
+#define WDT_DEFAULT_TIMEOUT	2
 
 struct at91_wdt_priv {
 	void __iomem *regs;
-	u32	regval;
-	u32	timeout;
+	u32 regval;
+	u32 timeout;
 };
 
 /*
  * Set the watchdog time interval in 1/256Hz (write-once)
  * Counter is 12 bit.
  */
-static int at91_wdt_start(struct udevice *dev, u64 timeout_s, ulong flags)
+static int at91_wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
 {
 	struct at91_wdt_priv *priv = dev_get_priv(dev);
-	u32 timeout = WDT_SEC2TICKS(timeout_s);
+	u64 timeout;
+	u32 ticks;
 
-	if (timeout_s > WDT_MAX_TIMEOUT || timeout_s < WDT_MIN_TIMEOUT)
-		timeout = priv->timeout;
+	/* Calculate timeout in seconds and the resulting ticks */
+	timeout = timeout_ms;
+	do_div(timeout, 1000);
+	timeout = min_t(u64, timeout, WDT_MAX_TIMEOUT);
+	ticks = WDT_SEC2TICKS(timeout);
 
 	/* Check if disabled */
 	if (readl(priv->regs + AT91_WDT_MR) & AT91_WDT_MR_WDDIS) {
@@ -65,12 +69,10 @@ static int at91_wdt_start(struct udevice *dev, u64 timeout_s, ulong flags)
 	 * Since WDV is a 12-bit counter, the maximum period is
 	 * 4096 / 256 = 16 seconds.
 	 */
-
 	priv->regval = AT91_WDT_MR_WDRSTEN	/* causes watchdog reset */
 		| AT91_WDT_MR_WDDBGHLT		/* disabled in debug mode */
 		| AT91_WDT_MR_WDD(0xfff)	/* restart at any time */
-		| AT91_WDT_MR_WDV(timeout);	/* timer value */
-
+		| AT91_WDT_MR_WDV(ticks);	/* timer value */
 	writel(priv->regval, priv->regs + AT91_WDT_MR);
 
 	return 0;
-- 
2.21.0

  parent reply	other threads:[~2019-04-02  8:57 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-02  8:57 [U-Boot] [PATCH 01/13 v3] arm: at91: Makefile: Compile lowlevel_init only when really necessary Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 02/13 v3] arm: at91: spl_at91.c: Call spl_early_init() if OF_CONTROL is enabled Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 03/13 v3] serial: atmel_usart: Use fixed clock value in SPL version with DM_SERIAL Stefan Roese
2019-04-02 10:12   ` Eugen.Hristev at microchip.com
2019-04-02 10:40     ` Stefan Roese
2019-04-02 10:45       ` Eugen.Hristev at microchip.com
2019-04-02 11:21       ` [U-Boot] [PATCH 3/13 v4] " Stefan Roese
2019-04-03 10:52         ` Eugen.Hristev at microchip.com
2019-04-03 10:58           ` Stefan Roese
2019-04-03 11:05             ` Eugen.Hristev at microchip.com
2019-04-03 11:11               ` Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 04/13 v3] watchdog: Handle SPL build with watchdog disabled Stefan Roese
2019-04-02  8:57 ` Stefan Roese [this message]
2019-04-02  8:57 ` [U-Boot] [PATCH 06/13 v3] arm: at91: Remove CONFIG_AT91_HW_WDT_TIMEOUT Stefan Roese
2019-04-02 11:19   ` Eugen.Hristev at microchip.com
2019-04-03  5:37   ` [U-Boot] [PATCH 06/13 v4] " Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 07/13 v3] arm: at91: Enable watchdog support Stefan Roese
2019-04-02 11:26   ` Eugen.Hristev at microchip.com
2019-04-02 11:50     ` Stefan Roese
2019-04-03  5:40       ` Stefan Roese
2019-04-03  5:37   ` [U-Boot] [PATCH 07/13 v4] " Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 08/13 v3] arm: at91: arm926ejs/u-boot-spl.lds: Add _image_binary_end to SPL lds Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 09/13 v3] Makefile.spl: Move generated AT91SAM NAND image boot.bin to spl directory Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 10/13 v3] Makefile: Add Kconfig option CONFIG_SPL_IMAGE to select the SPL binary Stefan Roese
2019-04-03 11:08   ` Eugen.Hristev at microchip.com
2019-04-03 11:11     ` Eugen.Hristev at microchip.com
2019-04-03 11:21       ` Stefan Roese
2019-04-03 12:22         ` Stefan Roese
2019-04-03 12:31           ` Eugen.Hristev at microchip.com
2019-04-03 12:38             ` Stefan Roese
2019-04-03 12:46               ` Eugen.Hristev at microchip.com
2019-04-03 11:19     ` Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 11/13 v3] arm: at91: siemens: Add support to generate combined SPL+U-Boot image Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 12/13 v3] arm: at91: at91sam9x5.dtsi: Add watchdog handle Stefan Roese
2019-04-02  8:57 ` [U-Boot] [PATCH 13/13 v3] arm: at91: Add gardena-gateway-at91sam support Stefan Roese

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190402085727.14552-5-sr@denx.de \
    --to=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox