提交 c4057f52 编写于 作者: C Catalin Marinas 提交者: Russell King

[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: NCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 7dd19e75
...@@ -50,6 +50,9 @@ ...@@ -50,6 +50,9 @@
#define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET) #define REALVIEW_REFCOUNTER (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_24MHz_OFFSET)
/* used by entry-macro.S */
void __iomem *gic_cpu_base_addr;
/* /*
* This is the RealView sched_clock implementation. This has * This is the RealView sched_clock implementation. This has
* a resolution of 41.7ns, and a maximum value of about 179s. * a resolution of 41.7ns, and a maximum value of about 179s.
......
...@@ -52,6 +52,7 @@ extern struct mmc_platform_data realview_mmc0_plat_data; ...@@ -52,6 +52,7 @@ extern struct mmc_platform_data realview_mmc0_plat_data;
extern struct mmc_platform_data realview_mmc1_plat_data; extern struct mmc_platform_data realview_mmc1_plat_data;
extern struct clk realview_clcd_clk; extern struct clk realview_clcd_clk;
extern struct clcd_board clcd_plat_data; extern struct clcd_board clcd_plat_data;
extern void __iomem *gic_cpu_base_addr;
extern void realview_leds_event(led_event_t ledevt); extern void realview_leds_event(led_event_t ledevt);
......
...@@ -256,8 +256,9 @@ static void __init gic_init_irq(void) ...@@ -256,8 +256,9 @@ static void __init gic_init_irq(void)
writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); writel(0x00000000, __io_address(REALVIEW_SYS_LOCK));
/* core tile GIC, primary */ /* core tile GIC, primary */
gic_cpu_base_addr = __io_address(REALVIEW_EB11MP_GIC_CPU_BASE);
gic_dist_init(0, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), 29); gic_dist_init(0, __io_address(REALVIEW_EB11MP_GIC_DIST_BASE), 29);
gic_cpu_init(0, __io_address(REALVIEW_EB11MP_GIC_CPU_BASE)); gic_cpu_init(0, gic_cpu_base_addr);
#ifndef CONFIG_REALVIEW_MPCORE_REVB #ifndef CONFIG_REALVIEW_MPCORE_REVB
/* board GIC, secondary */ /* board GIC, secondary */
...@@ -267,8 +268,9 @@ static void __init gic_init_irq(void) ...@@ -267,8 +268,9 @@ static void __init gic_init_irq(void)
#endif #endif
} else { } else {
/* board GIC, primary */ /* board GIC, primary */
gic_cpu_base_addr = __io_address(REALVIEW_GIC_CPU_BASE);
gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29);
gic_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE)); gic_cpu_init(0, gic_cpu_base_addr);
} }
} }
......
...@@ -9,17 +9,13 @@ ...@@ -9,17 +9,13 @@
*/ */
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
#include <asm/arch/board-eb.h>
.macro disable_fiq .macro disable_fiq
.endm .endm
.macro get_irqnr_preamble, base, tmp .macro get_irqnr_preamble, base, tmp
#ifdef CONFIG_REALVIEW_MPCORE ldr \base, =gic_cpu_base_addr
ldr \base, =IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE) ldr \base, [\base]
#else
ldr \base, =IO_ADDRESS(REALVIEW_GIC_CPU_BASE)
#endif
.endm .endm
.macro arch_ret_to_user, tmp1, tmp2 .macro arch_ret_to_user, tmp1, tmp2
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册