aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91rm9200/at91rm9200.c
diff options
context:
space:
mode:
authorAndrew Victor <andrew@sanpeople.com>2006-11-30 04:01:47 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-11-30 17:51:36 -0500
commit1f4fd0a0d28fabf965815755f1a74ef91dfb5ca6 (patch)
tree09562e8467136cf545b5631a257a0e9d53a31a89 /arch/arm/mach-at91rm9200/at91rm9200.c
parent20127f6863990e1313178debe8c9cfe32d43b1dc (diff)
[ARM] 3946/1: AT91: at91_arch_reset and at91_extern_irq
The external interrupt sources are different on the various AT91 processors. This patch introduces the global 'at91_extern_irq' variable that contains a bitset of the available external interrupt sources. The processor reset mechanism also differs on the various AT91 processors. This patch also adds a global 'at91_arch_reset' callback (from system.h) into the processor-specific code to perform the reset. Signed-off-by: Andrew Victor <andrew@sanpeople.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-at91rm9200/at91rm9200.c')
-rw-r--r--arch/arm/mach-at91rm9200/at91rm9200.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/mach-at91rm9200/at91rm9200.c b/arch/arm/mach-at91rm9200/at91rm9200.c
index dcf6136fedf9..0422593032fc 100644
--- a/arch/arm/mach-at91rm9200/at91rm9200.c
+++ b/arch/arm/mach-at91rm9200/at91rm9200.c
@@ -14,6 +14,7 @@
14 14
15#include <asm/mach/arch.h> 15#include <asm/mach/arch.h>
16#include <asm/mach/map.h> 16#include <asm/mach/map.h>
17#include <asm/arch/at91rm9200.h>
17 18
18#include <asm/hardware.h> 19#include <asm/hardware.h>
19#include "generic.h" 20#include "generic.h"
@@ -222,6 +223,16 @@ static struct at91_gpio_bank at91rm9200_gpio[] = {
222 } 223 }
223}; 224};
224 225
226static void at91rm9200_reset(void)
227{
228 /*
229 * Perform a hardware reset with the use of the Watchdog timer.
230 */
231 at91_sys_write(AT91_ST_WDMR, AT91_ST_RSTEN | AT91_ST_EXTEN | 1);
232 at91_sys_write(AT91_ST_CR, AT91_ST_WDRST);
233}
234
235
225/* -------------------------------------------------------------------- 236/* --------------------------------------------------------------------
226 * AT91RM9200 processor initialization 237 * AT91RM9200 processor initialization
227 * -------------------------------------------------------------------- */ 238 * -------------------------------------------------------------------- */
@@ -230,6 +241,12 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
230 /* Map peripherals */ 241 /* Map peripherals */
231 iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc)); 242 iotable_init(at91rm9200_io_desc, ARRAY_SIZE(at91rm9200_io_desc));
232 243
244 at91_arch_reset = at91rm9200_reset;
245 at91_extern_irq = (1 << AT91RM9200_ID_IRQ0) | (1 << AT91RM9200_ID_IRQ1)
246 | (1 << AT91RM9200_ID_IRQ2) | (1 << AT91RM9200_ID_IRQ3)
247 | (1 << AT91RM9200_ID_IRQ4) | (1 << AT91RM9200_ID_IRQ5)
248 | (1 << AT91RM9200_ID_IRQ6);
249
233 /* Init clock subsystem */ 250 /* Init clock subsystem */
234 at91_clock_init(main_clock); 251 at91_clock_init(main_clock);
235 252