Merge git://www.linux-watchdog.org/linux-watchdog
Linus Torvalds [Wed, 28 Mar 2012 20:03:26 +0000 (13:03 -0700)]
Pull watchdog updates from Wim Van Sebroeck:
 - Removal of the Documentation/watchdog/00-INDEX file
 - Fix boot status reporting for imx2_wdt
 - clean-up sp805_wdt, pnx4008_wdt and mpcore_wdt
 - convert printk in watchdog drivers to pr_ functions
 - change nowayout module parameter to bool for every watchdog device
 - conversion of jz4740_wdt, pnx4008_wdt, max63xx_wdt, softdog,
   ep93xx_wdt, coh901327 and txx9wdt to new watchdog API
 - Add support for the WDIOC_GETTIMELEFT ioctl call to the new watchdog
   API
 - Change the new watchdog API so that the driver updates the timeout
   value
 - two fixes for the xen_wdt driver

Fix up conflicts in ep93xx driver due to the same patches being merged
through separate branches.

* git://www.linux-watchdog.org/linux-watchdog: (33 commits)
  watchdog: txx9wdt: fix timeout
  watchdog: Convert txx9wdt driver to watchdog framework
  watchdog: coh901327_wdt.c: fix timeout
  watchdog: coh901327: convert to use watchdog core
  watchdog: Add support for WDIOC_GETTIMELEFT IOCTL in watchdog core
  watchdog: ep93xx_wdt: timeout is an unsigned int value.
  watchdog: ep93xx_wdt: Fix timeout after conversion to watchdog core
  watchdog: Convert ep93xx driver to watchdog core
  watchdog: sp805: Use devm routines
  watchdog: sp805: replace readl/writel with lighter _relaxed variants
  watchdog: sp805: Fix documentation style comment
  watchdog: mpcore_wdt: Allow platform_get_irq() to fail
  watchdog: mpcore_wdt: Use devm routines
  watchdog: mpcore_wdt: Rename dev to pdev for pointing to struct platform_device
  watchdog: xen: don't clear is_active when xen_wdt_stop() failed
  watchdog: xen: don't unconditionally enable the watchdog during resume
  watchdog: fix compiler error for missing parenthesis
  watchdog: ep93xx_wdt.c: fix platform probe
  watchdog: ep93xx: Convert the watchdog driver into a platform device.
  watchdog: fix set_timeout operations
  ...

1  2 
drivers/watchdog/Kconfig
drivers/watchdog/at91rm9200_wdt.c
drivers/watchdog/orion_wdt.c

diff --combined drivers/watchdog/Kconfig
@@@ -55,6 -55,7 +55,7 @@@ comment "Watchdog Device Drivers
  
  config SOFT_WATCHDOG
        tristate "Software watchdog"
+       select WATCHDOG_CORE
        help
          A software monitoring watchdog. This will fail to reboot your system
          from some situations that the hardware watchdog will recover
@@@ -74,6 -75,7 +75,7 @@@ config WM831X_WATCHDO
  config WM8350_WATCHDOG
        tristate "WM8350 watchdog"
        depends on MFD_WM8350
+       select WATCHDOG_CORE
        help
          Support for the watchdog in the WM8350 AudioPlus PMIC.  When
          the watchdog triggers the system will be reset.
@@@ -170,7 -172,7 +172,7 @@@ config HAVE_S3C2410_WATCHDO
  
  config S3C2410_WATCHDOG
        tristate "S3C2410 Watchdog"
 -      depends on ARCH_S3C2410 || HAVE_S3C2410_WATCHDOG
 +      depends on HAVE_S3C2410_WATCHDOG
        select WATCHDOG_CORE
        help
          Watchdog timer block in the Samsung SoCs. This will reboot
@@@ -217,6 -219,7 +219,7 @@@ config MPCORE_WATCHDO
  config EP93XX_WATCHDOG
        tristate "EP93xx Watchdog"
        depends on ARCH_EP93XX
+       select WATCHDOG_CORE
        help
          Say Y here if to include support for the watchdog timer
          embedded in the Cirrus Logic EP93xx family of devices.
@@@ -234,6 -237,7 +237,7 @@@ config OMAP_WATCHDO
  config PNX4008_WATCHDOG
        tristate "PNX4008 and LPC32XX Watchdog"
        depends on ARCH_PNX4008 || ARCH_LPC32XX
+       select WATCHDOG_CORE
        help
          Say Y here if to include support for the watchdog timer
          in the PNX4008 or LPC32XX processor.
@@@ -283,6 -287,7 +287,7 @@@ config COH901327_WATCHDO
        bool "ST-Ericsson COH 901 327 watchdog"
        depends on ARCH_U300
        default y if MACH_U300
+       select WATCHDOG_CORE
        help
          Say Y here to include Watchdog timer support for the
          watchdog embedded into the ST-Ericsson U300 series platforms.
@@@ -328,6 -333,7 +333,7 @@@ config TS72XX_WATCHDO
  config MAX63XX_WATCHDOG
        tristate "Max63xx watchdog"
        depends on ARM && HAS_IOMEM
+       select WATCHDOG_CORE
        help
          Support for memory mapped max63{69,70,71,72,73,74} watchdog timer.
  
@@@ -955,6 -961,7 +961,7 @@@ config INDYDO
  config JZ4740_WDT
        tristate "Ingenic jz4740 SoC hardware watchdog"
        depends on MACH_JZ4740
+       select WATCHDOG_CORE
        help
          Hardware driver for the built-in watchdog timer on Ingenic jz4740 SoCs.
  
@@@ -996,6 -1003,7 +1003,7 @@@ config AR7_WD
  config TXX9_WDT
        tristate "Toshiba TXx9 Watchdog Timer"
        depends on CPU_TX39XX || CPU_TX49XX
+       select WATCHDOG_CORE
        help
          Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
  
@@@ -9,6 -9,8 +9,8 @@@
   * 2 of the License, or (at your option) any later version.
   */
  
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  #include <linux/bitops.h>
  #include <linux/errno.h>
  #include <linux/fs.h>
  #define WDT_MAX_TIME          256     /* seconds */
  
  static int wdt_time = WDT_DEFAULT_TIME;
- static int nowayout = WATCHDOG_NOWAYOUT;
+ static bool nowayout = WATCHDOG_NOWAYOUT;
  
  module_param(wdt_time, int, 0);
  MODULE_PARM_DESC(wdt_time, "Watchdog time in seconds. (default="
                                __MODULE_STRING(WDT_DEFAULT_TIME) ")");
  
  #ifdef CONFIG_WATCHDOG_NOWAYOUT
- module_param(nowayout, int, 0);
+ module_param(nowayout, bool, 0);
  MODULE_PARM_DESC(nowayout,
                "Watchdog cannot be stopped once started (default="
                                __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
@@@ -51,7 -53,7 +53,7 @@@ static unsigned long at91wdt_busy
   */
  static inline void at91_wdt_stop(void)
  {
 -      at91_sys_write(AT91_ST_WDMR, AT91_ST_EXTEN);
 +      at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN);
  }
  
  /*
@@@ -59,9 -61,9 +61,9 @@@
   */
  static inline void at91_wdt_start(void)
  {
 -      at91_sys_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
 +      at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
                                (((65536 * wdt_time) >> 8) & AT91_ST_WDV));
 -      at91_sys_write(AT91_ST_CR, AT91_ST_WDRST);
 +      at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
  }
  
  /*
@@@ -69,7 -71,7 +71,7 @@@
   */
  static inline void at91_wdt_reload(void)
  {
 -      at91_sys_write(AT91_ST_CR, AT91_ST_WDRST);
 +      at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
  }
  
  /* ......................................................................... */
@@@ -209,8 -211,8 +211,8 @@@ static int __devinit at91wdt_probe(stru
        if (res)
                return res;
  
-       printk(KERN_INFO "AT91 Watchdog Timer enabled (%d seconds%s)\n",
-                               wdt_time, nowayout ? ", nowayout" : "");
+       pr_info("AT91 Watchdog Timer enabled (%d seconds%s)\n",
+               wdt_time, nowayout ? ", nowayout" : "");
        return 0;
  }
  
@@@ -268,8 -270,8 +270,8 @@@ static int __init at91_wdt_init(void
           if not reset to the default */
        if (at91_wdt_settimeout(wdt_time)) {
                at91_wdt_settimeout(WDT_DEFAULT_TIME);
-               pr_info("at91_wdt: wdt_time value must be 1 <= wdt_time <= 256"
-                                               ", using %d\n", wdt_time);
+               pr_info("wdt_time value must be 1 <= wdt_time <= 256, using %d\n",
+                       wdt_time);
        }
  
        return platform_driver_register(&at91wdt_driver);
@@@ -10,6 -10,8 +10,8 @@@
   * warranty of any kind, whether express or implied.
   */
  
+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  #include <linux/module.h>
  #include <linux/moduleparam.h>
  #include <linux/types.h>
  /*
   * Watchdog timer block registers.
   */
 -#define TIMER_CTRL            (TIMER_VIRT_BASE + 0x0000)
 +#define TIMER_CTRL            0x0000
  #define  WDT_EN                       0x0010
 -#define WDT_VAL                       (TIMER_VIRT_BASE + 0x0024)
 +#define WDT_VAL                       0x0024
  
  #define WDT_MAX_CYCLE_COUNT   0xffffffff
  #define WDT_IN_USE            0
  #define WDT_OK_TO_CLOSE               1
  
- static int nowayout = WATCHDOG_NOWAYOUT;
+ static bool nowayout = WATCHDOG_NOWAYOUT;
  static int heartbeat = -1;            /* module parameter (seconds) */
  static unsigned int wdt_max_duration; /* (seconds) */
  static unsigned int wdt_tclk;
 +static void __iomem *wdt_reg;
  static unsigned long wdt_status;
  static DEFINE_SPINLOCK(wdt_lock);
  
@@@ -49,7 -50,7 +51,7 @@@ static void orion_wdt_ping(void
        spin_lock(&wdt_lock);
  
        /* Reload watchdog duration */
 -      writel(wdt_tclk * heartbeat, WDT_VAL);
 +      writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
  
        spin_unlock(&wdt_lock);
  }
@@@ -61,7 -62,7 +63,7 @@@ static void orion_wdt_enable(void
        spin_lock(&wdt_lock);
  
        /* Set watchdog duration */
 -      writel(wdt_tclk * heartbeat, WDT_VAL);
 +      writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
  
        /* Clear watchdog timer interrupt */
        reg = readl(BRIDGE_CAUSE);
@@@ -69,9 -70,9 +71,9 @@@
        writel(reg, BRIDGE_CAUSE);
  
        /* Enable watchdog timer */
 -      reg = readl(TIMER_CTRL);
 +      reg = readl(wdt_reg + TIMER_CTRL);
        reg |= WDT_EN;
 -      writel(reg, TIMER_CTRL);
 +      writel(reg, wdt_reg + TIMER_CTRL);
  
        /* Enable reset on watchdog */
        reg = readl(RSTOUTn_MASK);
@@@ -93,9 -94,9 +95,9 @@@ static void orion_wdt_disable(void
        writel(reg, RSTOUTn_MASK);
  
        /* Disable watchdog timer */
 -      reg = readl(TIMER_CTRL);
 +      reg = readl(wdt_reg + TIMER_CTRL);
        reg &= ~WDT_EN;
 -      writel(reg, TIMER_CTRL);
 +      writel(reg, wdt_reg + TIMER_CTRL);
  
        spin_unlock(&wdt_lock);
  }
  static int orion_wdt_get_timeleft(int *time_left)
  {
        spin_lock(&wdt_lock);
 -      *time_left = readl(WDT_VAL) / wdt_tclk;
 +      *time_left = readl(wdt_reg + WDT_VAL) / wdt_tclk;
        spin_unlock(&wdt_lock);
        return 0;
  }
@@@ -210,8 -211,7 +212,7 @@@ static int orion_wdt_release(struct ino
        if (test_bit(WDT_OK_TO_CLOSE, &wdt_status))
                orion_wdt_disable();
        else
-               printk(KERN_CRIT "WATCHDOG: Device closed unexpectedly - "
-                                       "timer will not stop\n");
+               pr_crit("Device closed unexpectedly - timer will not stop\n");
        clear_bit(WDT_IN_USE, &wdt_status);
        clear_bit(WDT_OK_TO_CLOSE, &wdt_status);
  
@@@ -237,20 -237,15 +238,20 @@@ static struct miscdevice orion_wdt_misc
  static int __devinit orion_wdt_probe(struct platform_device *pdev)
  {
        struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
 +      struct resource *res;
        int ret;
  
        if (pdata) {
                wdt_tclk = pdata->tclk;
        } else {
-               printk(KERN_ERR "Orion Watchdog misses platform data\n");
+               pr_err("misses platform data\n");
                return -ENODEV;
        }
  
 +      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 +
 +      wdt_reg = ioremap(res->start, resource_size(res));
 +
        if (orion_wdt_miscdev.parent)
                return -EBUSY;
        orion_wdt_miscdev.parent = &pdev->dev;
        if (ret)
                return ret;
  
-       printk(KERN_INFO "Orion Watchdog Timer: Initial timeout %d sec%s\n",
-                               heartbeat, nowayout ? ", nowayout" : "");
+       pr_info("Initial timeout %d sec%s\n",
+               heartbeat, nowayout ? ", nowayout" : "");
        return 0;
  }
  
@@@ -308,7 -303,7 +309,7 @@@ MODULE_DESCRIPTION("Orion Processor Wat
  module_param(heartbeat, int, 0);
  MODULE_PARM_DESC(heartbeat, "Initial watchdog heartbeat in seconds");
  
- module_param(nowayout, int, 0);
+ module_param(nowayout, bool, 0);
  MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
                                __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");