aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2008-02-04 11:41:01 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-02-04 12:52:25 -0500
commitc4057f5260650f165054bc56e16acc4aa0510d4f (patch)
tree8f1bf4de169c49fc61dd6dc0717b1d184c067d39
parent7dd19e755dbe481ae42590dbd921dfd47e94779c (diff)
[ARM] 4819/1: RealView: Fix entry-macro.S to work with multiple platforms
This patch modifies the get_irqnr_preamble macro to work with multiple platforms at run-time by reading the address of the GIC controller from the gic_cpu_base_addr variable. This variable is defined in core.c and intialised in realview_eb.c (gic_init_irq). Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/mach-realview/core.c3
-rw-r--r--arch/arm/mach-realview/core.h1
-rw-r--r--arch/arm/mach-realview/realview_eb.c6
-rw-r--r--include/asm-arm/arch-realview/entry-macro.S8
4 files changed, 10 insertions, 8 deletions
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c
index 046d31ce27b0..29514ac94f34 100644
--- a/arch/arm/mach-realview/core.c
+++ b/arch/arm/mach-realview/core.c
@@ -50,6 +50,9 @@
50 50
51#define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) 51#define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET)
52 52
53/* used by entry-macro.S */
54void __iomem *gic_cpu_base_addr;
55
53/* 56/*
54 * This is the RealView sched_clock implementation. This has 57 * This is the RealView sched_clock implementation. This has
55 * a resolution of 41.7ns, and a maximum value of about 179s. 58 * a resolution of 41.7ns, and a maximum value of about 179s.
diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h
index 9206db7b80bc..1c091372be6c 100644
--- a/arch/arm/mach-realview/core.h
+++ b/arch/arm/mach-realview/core.h
@@ -52,6 +52,7 @@ extern struct mmc_platform_data realview_mmc0_plat_data;
52extern struct mmc_platform_data realview_mmc1_plat_data; 52extern struct mmc_platform_data realview_mmc1_plat_data;
53extern struct clk realview_clcd_clk; 53extern struct clk realview_clcd_clk;
54extern struct clcd_board clcd_plat_data; 54extern struct clcd_board clcd_plat_data;
55extern void __iomem *gic_cpu_base_addr;
55 56
56extern void realview_leds_event(led_event_t ledevt); 57extern void realview_leds_event(led_event_t ledevt);
57 58
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c
index e42ac56e4db5..f36af1335024 100644
--- a/arch/arm/mach-realview/realview_eb.c
+++ b/arch/arm/mach-realview/realview_eb.c
@@ -256,8 +256,9 @@ static void __init gic_init_irq(void)
256 writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); 256 writel(0x00000000, __io_address(REALVIEW_SYS_LOCK));
257 257
258 /* core tile GIC, primary */ 258 /* core tile GIC, primary */
259 gic_cpu_base_addr = __io_address(REALVIEW_EB11MP_GIC_CPU_BASE);
259 gic_dist_init(0, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), 29); 260 gic_dist_init(0, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), 29);
260 gic_cpu_init(0, __io_address(REALVIEW_EB11MP_GIC_CPU_BASE)); 261 gic_cpu_init(0, gic_cpu_base_addr);
261 262
262#ifndef CONFIG_REALVIEW_MPCORE_REVB 263#ifndef CONFIG_REALVIEW_MPCORE_REVB
263 /* board GIC, secondary */ 264 /* board GIC, secondary */
@@ -267,8 +268,9 @@ static void __init gic_init_irq(void)
267#endif 268#endif
268 } else { 269 } else {
269 /* board GIC, primary */ 270 /* board GIC, primary */
271 gic_cpu_base_addr = __io_address(REALVIEW_GIC_CPU_BASE);
270 gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); 272 gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29);
271 gic_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE)); 273 gic_cpu_init(0, gic_cpu_base_addr);
272 } 274 }
273} 275}
274 276
diff --git a/include/asm-arm/arch-realview/entry-macro.S b/include/asm-arm/arch-realview/entry-macro.S
index 629944deed50..cd26306d8e57 100644
--- a/include/asm-arm/arch-realview/entry-macro.S
+++ b/include/asm-arm/arch-realview/entry-macro.S
@@ -9,17 +9,13 @@
9 */ 9 */
10#include <asm/hardware.h> 10#include <asm/hardware.h>
11#include <asm/hardware/gic.h> 11#include <asm/hardware/gic.h>
12#include <asm/arch/board-eb.h>
13 12
14 .macro disable_fiq 13 .macro disable_fiq
15 .endm 14 .endm
16 15
17 .macro get_irqnr_preamble, base, tmp 16 .macro get_irqnr_preamble, base, tmp
18#ifdef CONFIG_REALVIEW_MPCORE 17 ldr \base, =gic_cpu_base_addr
19 ldr \base, =IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE) 18 ldr \base, [\base]
20#else
21 ldr \base, =IO_ADDRESS(REALVIEW_GIC_CPU_BASE)
22#endif
23 .endm 19 .endm
24 20
25 .macro arch_ret_to_user, tmp1, tmp2 21 .macro arch_ret_to_user, tmp1, tmp2