diff options
3 files changed, 33 insertions, 0 deletions
| 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 1dd6c2dce..a95cb8296 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 6a5cf392e..fd6122f58 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 1ffbfb2a8..0df17368a 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 */ | 
