return 0;
 }
 
+void hw_watchdog_disable(void)
+{
+       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
+
+       /*
+        * Disable watchdog
+        */
+       writel(0xAAAA, &wdt->wdtwspr);
+       while (readl(&wdt->wdtwwps) != 0x0)
+               ;
+       writel(0x5555, &wdt->wdtwspr);
+       while (readl(&wdt->wdtwwps) != 0x0)
+               ;
+}
+
 void hw_watchdog_init(void)
 {
        struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
 
+       /*
+        * Make sure the watchdog is disabled. This is unfortunately required
+        * because writing to various registers with the watchdog running has no
+        * effect.
+        */
+       hw_watchdog_disable();
+
        /* initialize prescaler */
        while (readl(&wdt->wdtwwps) & WDT_WWPS_PEND_WCLR)
                ;
        while ((readl(&wdt->wdtwwps)) & WDT_WWPS_PEND_WSPR)
                ;
 }
-
-void hw_watchdog_disable(void)
-{
-       struct wd_timer *wdt = (struct wd_timer *)WDT_BASE;
-
-       /*
-        * Disable watchdog
-        */
-       writel(0xAAAA, &wdt->wdtwspr);
-       while (readl(&wdt->wdtwwps) != 0x0)
-               ;
-       writel(0x5555, &wdt->wdtwspr);
-       while (readl(&wdt->wdtwwps) != 0x0)
-               ;
-}