summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2009-03-27 23:26:43 +0100
committerJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2009-04-04 20:42:21 +0200
commitf82518d7f443ebac5f8821103a3c521c963aa6ee (patch)
tree2e9d268371311b19943e5f41ec6d15dfdeb7e766
parent3524049cd053746298e4cfab2449882e75c146fc (diff)
at91rm9200: Reset update
Update the rm9200 reset sequence to try executing a board-specific reset function and move specific board reset to board. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-rw-r--r--board/atmel/at91rm9200dk/at91rm9200dk.c10
-rw-r--r--cpu/arm920t/at91rm9200/interrupts.c14
2 files changed, 14 insertions, 10 deletions
diff --git a/board/atmel/at91rm9200dk/at91rm9200dk.c b/board/atmel/at91rm9200dk/at91rm9200dk.c
index b89a3fd548..c761dd7467 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 15e22bf6cf..cff4916643 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 */