register watchdog only if enabled in hardware (#2378)
authorFlorian Fainelli <florian@openwrt.org>
Tue, 4 Aug 2009 21:05:55 +0000 (21:05 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Tue, 4 Aug 2009 21:05:55 +0000 (21:05 +0000)
SVN-Revision: 17125

target/linux/ar7/patches-2.6.27/140-watchdog_bootcr.patch [new file with mode: 0644]
target/linux/ar7/patches-2.6.30/140-watchdog_bootcr.patch [new file with mode: 0644]

diff --git a/target/linux/ar7/patches-2.6.27/140-watchdog_bootcr.patch b/target/linux/ar7/patches-2.6.27/140-watchdog_bootcr.patch
new file mode 100644 (file)
index 0000000..95535de
--- /dev/null
@@ -0,0 +1,29 @@
+--- a/drivers/watchdog/ar7_wdt.c       2009-01-25 01:17:01.000000000 +1300
++++ b/drivers/watchdog/ar7_wdt.c       2009-01-25 01:19:15.000000000 +1300
+@@ -293,12 +293,26 @@
+       .fops           = &ar7_wdt_fops,
+ };
++#define AR7_WDT_HARDWARE_ENABLE 0x10
++
+ static int __init ar7_wdt_init(void)
+ {
+       int rc;
++      u32 *bootcr;
++      u32 bootcr_value;
+       ar7_wdt_get_regs();
++      /* arch/mips/ar7/clocks.c is the only other thing that reads this */
++      bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4);
++      bootcr_value = *bootcr;
++      iounmap(bootcr);
++
++      if (!(bootcr_value & AR7_WDT_HARDWARE_ENABLE)) {
++              printk(KERN_INFO DRVNAME ": watchdog disabled in hardware (bootcr=%#x)\n", bootcr_value);
++              return -ENODEV;
++      }
++
+       if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt),
+                                                       LONGNAME)) {
+               printk(KERN_WARNING DRVNAME ": watchdog I/O region busy\n");
diff --git a/target/linux/ar7/patches-2.6.30/140-watchdog_bootcr.patch b/target/linux/ar7/patches-2.6.30/140-watchdog_bootcr.patch
new file mode 100644 (file)
index 0000000..21c95a7
--- /dev/null
@@ -0,0 +1,31 @@
+--- a/drivers/watchdog/ar7_wdt.c
++++ b/drivers/watchdog/ar7_wdt.c
+@@ -298,14 +298,28 @@ static struct miscdevice ar7_wdt_miscdev
+       .fops           = &ar7_wdt_fops,
+ };
++#define AR7_WDT_HARDWARE_ENABLE 0x10
++
+ static int __init ar7_wdt_init(void)
+ {
+       int rc;
++      u32 *bootcr;
++      u32 bootcr_value;
+       spin_lock_init(&wdt_lock);
+       ar7_wdt_get_regs();
++      /* arch/mips/ar7/clocks.c is the only other thing that reads this */
++      bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4);
++      bootcr_value = *bootcr;
++      iounmap(bootcr);
++
++      if (!(bootcr_value & AR7_WDT_HARDWARE_ENABLE)) { 
++              printk(KERN_INFO DRVNAME ": watchdog disabled in hardware (bootcr=%#x)\n", bootcr_value);
++              return -ENODEV; 
++        } 
++
+       if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt),
+                                                       LONGNAME)) {
+               printk(KERN_WARNING DRVNAME ": watchdog I/O region busy\n");