summaryrefslogtreecommitdiff
path: root/arch/arm/lib/interrupts.c
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2010-09-17 13:10:39 +0200
committerWolfgang Denk <wd@denx.de>2010-09-19 19:29:53 +0200
commitf1d2b313c9eb6808d30c16a9eb5251240452a56c (patch)
tree8b5488d9e882947ef493c0e579aebaa5f40413f4 /arch/arm/lib/interrupts.c
parent4fff329df2516a7d9242d0642c07c4506f859051 (diff)
downloadu-boot-imx-f1d2b313c9eb6808d30c16a9eb5251240452a56c.zip
u-boot-imx-f1d2b313c9eb6808d30c16a9eb5251240452a56c.tar.gz
u-boot-imx-f1d2b313c9eb6808d30c16a9eb5251240452a56c.tar.bz2
ARM: add relocation support
!! This breaks support for all arm boards !! To compile in old style, you must define CONFIG_SYS_ARM_WITHOUT_RELOC or you can compile with "CONFIG_SYS_ARM_WITHOUT_RELOC=1 ./MAKEALL board" !! This define will be removed soon, so convert your board to use relocation support Portions of this work were supported by funding from the CE Linux Forum. Signed-off-by: Heiko Schocher <hs@denx.de> Fix boot from NAND for non-ARM systems Signed-off-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'arch/arm/lib/interrupts.c')
-rw-r--r--arch/arm/lib/interrupts.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/arch/arm/lib/interrupts.c b/arch/arm/lib/interrupts.c
index 1f2b815..9a21e7b 100644
--- a/arch/arm/lib/interrupts.c
+++ b/arch/arm/lib/interrupts.c
@@ -38,15 +38,20 @@
#include <common.h>
#include <asm/proc-armv/ptrace.h>
-#ifdef CONFIG_USE_IRQ
DECLARE_GLOBAL_DATA_PTR;
+#ifdef CONFIG_USE_IRQ
int interrupt_init (void)
{
/*
* setup up stacks if necessary
*/
+#if !defined(CONFIG_SYS_ARM_WITHOUT_RELOC)
+ IRQ_STACK_START = gd->irq_sp - 4;
+ IRQ_STACK_START_IN = gd->irq_sp + 8;
+#else
IRQ_STACK_START = _armboot_start - CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4;
+#endif
FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
return arch_interrupt_init();
@@ -81,6 +86,18 @@ int disable_interrupts (void)
return (old & 0x80) == 0;
}
#else
+#if !defined(CONFIG_SYS_ARM_WITHOUT_RELOC)
+int interrupt_init (void)
+{
+ /*
+ * setup up stacks if necessary
+ */
+ IRQ_STACK_START_IN = gd->irq_sp + 8;
+
+ return 0;
+}
+#endif
+
void enable_interrupts (void)
{
return;