watchdog: sama5d4: fix WDD value to be always set to max
authorEugen Hristev <eugen.hristev@microchip.com>
Wed, 8 May 2019 14:15:03 +0000 (14:15 +0000)
committerWim Van Sebroeck <wim@linux-watchdog.org>
Mon, 8 Jul 2019 14:08:32 +0000 (16:08 +0200)
WDD value must be always set to max (0xFFF) otherwise the hardware
block will reset the board on the first ping of the watchdog.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
drivers/watchdog/sama5d4_wdt.c

index cd3d62f9940e31bc2abad49d37c8be2b59da2792..dc3c0695116f01d07f0dba1442e8b3c4363ad1a8 100644 (file)
@@ -110,9 +110,7 @@ static int sama5d4_wdt_set_timeout(struct watchdog_device *wdd,
        u32 value = WDT_SEC2TICKS(timeout);
 
        wdt->mr &= ~AT91_WDT_WDV;
-       wdt->mr &= ~AT91_WDT_WDD;
        wdt->mr |= AT91_WDT_SET_WDV(value);
-       wdt->mr |= AT91_WDT_SET_WDD(value);
 
        /*
         * WDDIS has to be 0 when updating WDD/WDV. The datasheet states: When
@@ -248,7 +246,7 @@ static int sama5d4_wdt_probe(struct platform_device *pdev)
 
        timeout = WDT_SEC2TICKS(wdd->timeout);
 
-       wdt->mr |= AT91_WDT_SET_WDD(timeout);
+       wdt->mr |= AT91_WDT_SET_WDD(WDT_SEC2TICKS(MAX_WDT_TIMEOUT));
        wdt->mr |= AT91_WDT_SET_WDV(timeout);
 
        ret = sama5d4_wdt_init(wdt);