From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 05/11] watchdog: at91sam9_wdt: Fix WDT setup in at91_wdt_start()
Date: Tue, 19 Mar 2019 16:56:26 +0100 [thread overview]
Message-ID: <20190319155632.5680-5-sr@denx.de> (raw)
In-Reply-To: <20190319155632.5680-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>
---
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
next prev parent reply other threads:[~2019-03-19 15:56 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-19 15:56 [U-Boot] [PATCH 01/11] arm: at91: Makefile: Compile lowlevel_init only when really necessary Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 02/11] arm: at91: spl_at91.c: Call spl_early_init() if OF_CONTROL is enabled Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 03/11] serial: atmel_usart: Use fixed clock value in SPL version Stefan Roese
2019-03-20 7:25 ` Eugen.Hristev at microchip.com
2019-03-20 7:30 ` Stefan Roese
2019-03-25 14:27 ` Eugen.Hristev at microchip.com
2019-03-25 14:57 ` Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 04/11] watchdog: Handle SPL build with watchdog disabled Stefan Roese
2019-03-20 7:30 ` Eugen.Hristev at microchip.com
2019-03-20 7:33 ` Stefan Roese
2019-03-20 7:41 ` Eugen.Hristev at microchip.com
2019-03-20 7:48 ` Stefan Roese
2019-03-20 8:06 ` Eugen.Hristev at microchip.com
2019-03-20 8:10 ` Stefan Roese
2019-03-19 15:56 ` Stefan Roese [this message]
2019-03-19 15:56 ` [U-Boot] [PATCH 06/11] arm: at91: Enable watchdog support Stefan Roese
2019-03-21 10:23 ` Eugen.Hristev at microchip.com
2019-03-21 12:00 ` Stefan Roese
2019-03-21 12:07 ` Eugen.Hristev at microchip.com
2019-03-19 15:56 ` [U-Boot] [PATCH 07/11] arm: at91: arm926ejs/u-boot-spl.lds: Add _image_binary_end to SPL lds Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 08/11] Makefile.spl: Move generate AT91SAM NAND image boot.bin to spl directory Stefan Roese
2019-03-25 14:22 ` Eugen.Hristev at microchip.com
2019-03-25 14:24 ` Stefan Roese
2019-03-26 7:06 ` Heiko Schocher
2019-03-19 15:56 ` [U-Boot] [PATCH 09/11] Makefile: Add Kconfig option CONFIG_SPL_IMAGE to select the SPL binary Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 10/11] arm: at91: siemens: Add support to generate combined SPL+U-Boot image Stefan Roese
2019-03-19 15:56 ` [U-Boot] [PATCH 11/11] 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=20190319155632.5680-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