diff --git a/board/atmel/at91rm9200dk/at91rm9200dk.c b/board/atmel/at91rm9200dk/at91rm9200dk.c index b89a3fd548b463bf70aeed4f4ae79e3dc2b48bb7..c761dd7467dbf46f2ee23d09cf5fc29488cde4d0 100644 --- a/board/atmel/at91rm9200dk/at91rm9200dk.c +++ b/board/atmel/at91rm9200dk/at91rm9200dk.c @@ -54,6 +54,16 @@ int board_init (void) return 0; } +void board_reset (void) +{ + AT91PS_PIO pio = AT91C_BASE_PIOA; + + /* Clear PA19 to trigger the hard reset */ + writel(0x00080000, pio->PIO_CODR); + writel(0x00080000, pio->PIO_OER); + writel(0x00080000, pio->PIO_PER); +} + int dram_init (void) { gd->bd->bi_dram[0].start = PHYS_SDRAM; diff --git a/cpu/arm920t/at91rm9200/interrupts.c b/cpu/arm920t/at91rm9200/interrupts.c index 15e22bf6cf483405d44d4a7b43db0bdd3bbdcc3f..cff49166437241ff9fe2dc904da8b4087119988b 100644 --- a/cpu/arm920t/at91rm9200/interrupts.c +++ b/cpu/arm920t/at91rm9200/interrupts.c @@ -45,6 +45,8 @@ AT91PS_TC tmr; static ulong timestamp; static ulong lastinc; +void board_reset(void) __attribute__((__weak__)); + int interrupt_init (void) { tmr = AT91C_BASE_TC0; @@ -166,21 +168,13 @@ ulong get_tbclk (void) void reset_cpu (ulong ignored) { -#ifdef CONFIG_AT91RM9200DK - AT91PS_PIO pio = AT91C_BASE_PIOA; -#endif - #if defined(CONFIG_AT91RM9200_USART) /*shutdown the console to avoid strange chars during reset */ serial_exit(); #endif -#ifdef CONFIG_AT91RM9200DK - /* Clear PA19 to trigger the hard reset */ - pio->PIO_CODR = 0x00080000; - pio->PIO_OER = 0x00080000; - pio->PIO_PER = 0x00080000; -#endif + if (board_reset) + board_reset(); /* this is the way Linux does it */