diff options
author | Andrew Victor <andrew@sanpeople.com> | 2006-11-30 04:01:47 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-11-30 17:51:36 -0500 |
commit | 1f4fd0a0d28fabf965815755f1a74ef91dfb5ca6 (patch) | |
tree | 09562e8467136cf545b5631a257a0e9d53a31a89 /arch/arm/mach-at91rm9200/at91rm9200.c | |
parent | 20127f6863990e1313178debe8c9cfe32d43b1dc (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.c | 17 |
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 | ||
226 | static 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 | ||