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 */