From 2b50cecea6d8bc99f59f1680e149fc88aecf71ba Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Wed, 26 Jan 2011 20:48:50 +0000 Subject: [PATCH] ramips: add watchdog device for RT288x SVN-Revision: 25129 --- .../include/asm/mach-ralink/rt288x_regs.h | 4 +++ .../files/arch/mips/ralink/rt288x/devices.c | 27 +++++++++++++++++++ .../files/arch/mips/ralink/rt288x/devices.h | 2 ++ 3 files changed, 33 insertions(+) diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt288x_regs.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt288x_regs.h index 1dd6c2dceca..a95cb829635 100644 --- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt288x_regs.h +++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt288x_regs.h @@ -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) diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c index 6a5cf392e0b..fd6122f581f 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c @@ -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); +} diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h index 1ffbfb2a8a0..0df17368a6b 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h +++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h @@ -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 */ -- 2.30.2