ramips: add watchdog device for RT288x
authorGabor Juhos <juhosg@openwrt.org>
Wed, 26 Jan 2011 20:48:50 +0000 (20:48 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Wed, 26 Jan 2011 20:48:50 +0000 (20:48 +0000)
SVN-Revision: 25129

target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt288x_regs.h
target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c
target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h

index 1dd6c2d..a95cb82 100644 (file)
@@ -33,6 +33,7 @@
 #define RT2880_SDRAM_BASE      0x08000000
 
 #define RT2880_SYSC_SIZE       0x100
+#define RT2880_TIMER_SIZE      0x100
 #define RT2880_INTC_SIZE       0x100
 #define RT2880_MEMC_SIZE       0x100
 #define RT2880_UART0_SIZE      0x100
@@ -45,6 +46,7 @@
 #define SYSC_REG_CHIP_NAME1    0x004   /* Chip Name 1 */
 #define SYSC_REG_CHIP_ID       0x00c   /* Chip Identification */
 #define SYSC_REG_SYSTEM_CONFIG 0x010   /* System Configuration */
+#define SYSC_REG_CLKCFG                0x030
 #define SYSC_REG_RESET_CTRL    0x034   /* Reset Control*/
 #define SYSC_REG_RESET_STATUS  0x038   /* Reset Status*/
 #define SYSC_REG_GPIO_MODE     0x060   /* GPIO Purpose Select */
@@ -62,6 +64,8 @@
 #define SYSTEM_CONFIG_CPUCLK_280       0x2
 #define SYSTEM_CONFIG_CPUCLK_300       0x3
 
+#define CLKCFG_SRAM_CS_N_WDT   BIT(9)
+
 #define RT2880_RESET_SYSTEM    BIT(0)
 #define RT2880_RESET_TIMER     BIT(1)
 #define RT2880_RESET_INTC      BIT(2)
index 6a5cf39..fd6122f 100644 (file)
@@ -171,3 +171,30 @@ void __init rt288x_register_ethernet(void)
 
        platform_device_register(&rt288x_eth_device);
 }
+
+static struct resource rt288x_wdt_resources[] = {
+       {
+               .start  = RT2880_TIMER_BASE,
+               .end    = RT2880_TIMER_BASE + RT2880_TIMER_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device rt288x_wdt_device = {
+       .name           = "ramips-wdt",
+       .id             = -1,
+       .resource       = rt288x_wdt_resources,
+       .num_resources  = ARRAY_SIZE(rt288x_wdt_resources),
+};
+
+void __init rt288x_register_wdt(void)
+{
+       u32 t;
+
+       /* enable WDT reset output on pin SRAM_CS_N */
+       t = rt288x_sysc_rr(SYSC_REG_CLKCFG);
+       t |= CLKCFG_SRAM_CS_N_WDT;
+       rt288x_sysc_wr(t, SYSC_REG_CLKCFG);
+
+       platform_device_register(&rt288x_wdt_device);
+}
index 1ffbfb2..0df1736 100644 (file)
@@ -20,4 +20,6 @@ void rt288x_register_wifi(void);
 extern struct ramips_eth_platform_data rt288x_eth_data;
 void rt288x_register_ethernet(void);
 
+void rt288x_register_wdt(void);
+
 #endif  /* __ASM_MACH_RT288X_PLATFORM_H */