aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile/setup-r8a7779.c
diff options
context:
space:
mode:
authorMagnus Damm <damm+renesas@opensource.se>2015-01-15 20:49:19 -0500
committerSimon Horman <horms+renesas@verge.net.au>2015-01-16 19:28:41 -0500
commitf469cde20a7ee342070b4a459b6fce469a3186db (patch)
tree1d75df70458ba48e2269c58231686cc653dbfe48 /arch/arm/mach-shmobile/setup-r8a7779.c
parent1fbbc3f0c5440a4c674b3d6de0a9dd447666b508 (diff)
ARM: shmobile: r8a7779: Instantiate GIC from C board code in legacy builds
As of commit 9a1091ef0017c40a ("irqchip: gic: Support hierarchy irq domain."), Marzen legacy hangs during boot with: Image Name: 'Linux-3.19.0-rc4' Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3445880 Bytes = 3.3 MiB Load Address: 60008000 Entry Point: 60008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Enabling DEBUG_LL does not seem to change the situation, however this patch by itself fixes this issue and re-enables normal boot. This issue happens because the IRQ numbers of the GIC are now virtual, and no longer match the hardcoded hardware IRQ numbers in the platform board code. To fix this, instantiate the GIC from platform board code when compiling a legacy kernel, like is done for the sh73a0, r8a7740 and r8a7778 legacy code. Follows same style as the r8a7740 legacy GIC fix by Geert Uytterhoeven, thanks to him for the initial work. Signed-off-by: Magnus Damm <damm+renesas@opensource.se> Acked-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Diffstat (limited to 'arch/arm/mach-shmobile/setup-r8a7779.c')
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7779.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm/mach-shmobile/setup-r8a7779.c b/arch/arm/mach-shmobile/setup-r8a7779.c
index 434d1504066a..ca60683452b9 100644
--- a/arch/arm/mach-shmobile/setup-r8a7779.c
+++ b/arch/arm/mach-shmobile/setup-r8a7779.c
@@ -724,10 +724,17 @@ static int r8a7779_set_wake(struct irq_data *data, unsigned int on)
724 724
725void __init r8a7779_init_irq_dt(void) 725void __init r8a7779_init_irq_dt(void)
726{ 726{
727#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
728 void __iomem *gic_dist_base = ioremap_nocache(0xf0001000, 0x1000);
729 void __iomem *gic_cpu_base = ioremap_nocache(0xf0000100, 0x1000);
730#endif
727 gic_arch_extn.irq_set_wake = r8a7779_set_wake; 731 gic_arch_extn.irq_set_wake = r8a7779_set_wake;
728 732
733#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
734 gic_init(0, 29, gic_dist_base, gic_cpu_base);
735#else
729 irqchip_init(); 736 irqchip_init();
730 737#endif
731 /* route all interrupts to ARM */ 738 /* route all interrupts to ARM */
732 __raw_writel(0xffffffff, INT2NTSR0); 739 __raw_writel(0xffffffff, INT2NTSR0);
733 __raw_writel(0x3fffffff, INT2NTSR1); 740 __raw_writel(0x3fffffff, INT2NTSR1);