Thread (26 messages) 26 messages, 5 authors, 2018-05-24

[PATCH 3/5] watchdog: sp805: set WDOG_HW_RUNNING when appropriate

From: Ray Jui <hidden>
Date: 2018-05-22 23:24:33
Also in: linux-devicetree, linux-watchdog, lkml

Hi Guenter,

On 5/22/2018 1:54 PM, Guenter Roeck wrote:
On Tue, May 22, 2018 at 11:47:18AM -0700, Ray Jui wrote:
quoted
If the watchdog hardware is already enabled during the boot process,
when the Linux watchdog driver loads, it should reset the watchdog and
tell the watchdog framework. As a result, ping can be generated from
the watchdog framework, until the userspace watchdog daemon takes over
control

Signed-off-by: Ray Jui <redacted>
Reviewed-by: Vladimir Olovyannikov <redacted>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
---
  drivers/watchdog/sp805_wdt.c | 22 ++++++++++++++++++++++
  1 file changed, 22 insertions(+)
diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c
index 1484609..408ffbe 100644
--- a/drivers/watchdog/sp805_wdt.c
+++ b/drivers/watchdog/sp805_wdt.c
@@ -42,6 +42,7 @@
  	/* control register masks */
  	#define	INT_ENABLE	(1 << 0)
  	#define	RESET_ENABLE	(1 << 1)
+	#define	ENABLE_MASK	(INT_ENABLE | RESET_ENABLE)
  #define WDTINTCLR		0x00C
  #define WDTRIS			0x010
  #define WDTMIS			0x014
@@ -74,6 +75,18 @@ module_param(nowayout, bool, 0);
  MODULE_PARM_DESC(nowayout,
  		"Set to 1 to keep watchdog running after device release");
  
+/* returns true if wdt is running; otherwise returns false */
+static bool wdt_is_running(struct watchdog_device *wdd)
+{
+	struct sp805_wdt *wdt = watchdog_get_drvdata(wdd);
+
+	if ((readl_relaxed(wdt->base + WDTCONTROL) & ENABLE_MASK) ==
+	    ENABLE_MASK)
+		return true;
+	else
+		return false;
	return !!(readl_relaxed(wdt->base + WDTCONTROL) & ENABLE_MASK));
Note ENABLE_MASK contains two bits (INT_ENABLE and RESET_ENABLE); 
therefore, a simple !!(expression) would not work? That is, the masked 
result needs to be compared against the mask again to ensure both bits 
are set, right?

Thanks,

Ray
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help