Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4057f52 authored by Catalin Marinas's avatar Catalin Marinas Committed by Russell King
Browse files

[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: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 7dd19e75
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -50,6 +50,9 @@

#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
 * a resolution of 41.7ns, and a maximum value of about 179s.
+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ extern struct mmc_platform_data realview_mmc0_plat_data;
extern struct mmc_platform_data realview_mmc1_plat_data;
extern struct clk realview_clcd_clk;
extern struct clcd_board clcd_plat_data;
extern void __iomem *gic_cpu_base_addr;

extern void realview_leds_event(led_event_t ledevt);

+4 −2
Original line number Diff line number Diff line
@@ -256,8 +256,9 @@ static void __init gic_init_irq(void)
		writel(0x00000000, __io_address(REALVIEW_SYS_LOCK));

		/* 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_cpu_init(0, __io_address(REALVIEW_EB11MP_GIC_CPU_BASE));
		gic_cpu_init(0, gic_cpu_base_addr);

#ifndef CONFIG_REALVIEW_MPCORE_REVB
		/* board GIC, secondary */
@@ -267,8 +268,9 @@ static void __init gic_init_irq(void)
#endif
	} else {
		/* 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_cpu_init(0, __io_address(REALVIEW_GIC_CPU_BASE));
		gic_cpu_init(0, gic_cpu_base_addr);
	}
}

+2 −6
Original line number Diff line number Diff line
@@ -9,17 +9,13 @@
 */
#include <asm/hardware.h>
#include <asm/hardware/gic.h>
#include <asm/arch/board-eb.h>

		.macro	disable_fiq
		.endm

		.macro  get_irqnr_preamble, base, tmp
#ifdef CONFIG_REALVIEW_MPCORE
		ldr     \base, =IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE)
#else
		ldr     \base, =IO_ADDRESS(REALVIEW_GIC_CPU_BASE)
#endif
		ldr	\base, =gic_cpu_base_addr
		ldr	\base, [\base]
		.endm

		.macro  arch_ret_to_user, tmp1, tmp2