|
@@ -14,6 +14,7 @@
|
|
|
|
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/mach/map.h>
|
|
#include <asm/mach/map.h>
|
|
|
|
+#include <asm/arch/at91rm9200.h>
|
|
|
|
|
|
#include <asm/hardware.h>
|
|
#include <asm/hardware.h>
|
|
#include "generic.h"
|
|
#include "generic.h"
|
|
@@ -222,6 +223,16 @@ static struct at91_gpio_bank at91rm9200_gpio[] = {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static void at91rm9200_reset(void)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * Perform a hardware reset with the use of the Watchdog timer.
|
|
|
|
+ */
|
|
|
|
+ at91_sys_write(AT91_ST_WDMR, AT91_ST_RSTEN | AT91_ST_EXTEN | 1);
|
|
|
|
+ at91_sys_write(AT91_ST_CR, AT91_ST_WDRST);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
/* --------------------------------------------------------------------
|
|
/* --------------------------------------------------------------------
|
|
* AT91RM9200 processor initialization
|
|
* AT91RM9200 processor initialization
|
|
* -------------------------------------------------------------------- */
|
|
* -------------------------------------------------------------------- */
|
|
@@ -230,6 +241,12 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
|
|
/* Map peripherals */
|
|
/* Map peripherals */
|
|
iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
|
|
iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
|
|
|
|
|
|
|
|
+ at91_arch_reset = at91rm9200_reset;
|
|
|
|
+ at91_extern_irq = (1 << AT91RM9200_ID_IRQ0) | (1 << AT91RM9200_ID_IRQ1)
|
|
|
|
+ | (1 << AT91RM9200_ID_IRQ2) | (1 << AT91RM9200_ID_IRQ3)
|
|
|
|
+ | (1 << AT91RM9200_ID_IRQ4) | (1 << AT91RM9200_ID_IRQ5)
|
|
|
|
+ | (1 << AT91RM9200_ID_IRQ6);
|
|
|
|
+
|
|
/* Init clock subsystem */
|
|
/* Init clock subsystem */
|
|
at91_clock_init(main_clock);
|
|
at91_clock_init(main_clock);
|
|
|
|
|