at91rm9200: Reset update
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Fri, 27 Mar 2009 22:26:43 +0000 (23:26 +0100)
committerJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Sat, 4 Apr 2009 18:42:21 +0000 (20:42 +0200)
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>
board/atmel/at91rm9200dk/at91rm9200dk.c
cpu/arm920t/at91rm9200/interrupts.c

index b89a3fd..c761dd7 100644 (file)
@@ -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;
index 15e22bf..cff4916 100644 (file)
@@ -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 */