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:
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 <ray....@broadcom.com>
Reviewed-by: Vladimir Olovyannikov <vladimir.olovyanni...@broadcom.com>
Reviewed-by: Scott Branden <scott.bran...@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

Reply via email to