linux/drivers/irqchip
Maxime Ripard 016958bf05 irqchip: armada-370-xp: Fix chained per-cpu interrupts
[ Upstream commit 5724be8464 ]

On the Cortex-A9-based Armada SoCs, the MPIC is not the primary interrupt
controller. Yet, it still has to handle some per-cpu interrupt.

To do so, it is chained with the GIC using a per-cpu interrupt. However, the
current code only call irq_set_chained_handler, which is called and enable that
interrupt only on the boot CPU, which means that the parent per-CPU interrupt
is never unmasked on the secondary CPUs, preventing the per-CPU interrupt to
actually work as expected.

This was not seen until now since the only MPIC PPI users were the Marvell
timers that were not working, but not used either since the system use the ARM
TWD by default, and the ethernet controllers, that are faking there interrupts
as SPI, and don't really expect to have interrupts on the secondary cores
anyway.

Add a CPU notifier that will enable the PPI on the secondary cores when they
are brought up.

Cc: <stable@vger.kernel.org> # 3.15+
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Link: https://lkml.kernel.org/r/1425378443-28822-1-git-send-email-maxime.ripard@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2015-03-28 10:03:20 -04:00
..
exynos-combiner.c irqchip: exynos-combiner: Fix compilation error on ARM64 2014-09-03 11:56:39 +00:00
irq-armada-370-xp.c irqchip: armada-370-xp: Fix chained per-cpu interrupts 2015-03-28 10:03:20 -04:00
irq-atmel-aic-common.c irqchip: atmel-aic-common: Prevent clobbering of priority when changing IRQ type 2015-01-29 17:40:45 -08:00
irq-atmel-aic-common.h irqchip: atmel-aic: Implement RTC irq fixup 2014-07-17 13:38:54 +00:00
irq-atmel-aic.c irqchip: atmel-aic: Convert to handle_domain_irq 2014-09-03 13:10:51 +00:00
irq-atmel-aic5.c Merge branch 'irqchip/atmel' into irqchip/core 2014-10-02 13:03:48 +00:00
irq-bcm2835.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-bcm7120-l2.c irqchip: bcm7120-l2: Fix error handling of irq_of_parse_and_map 2014-11-26 06:26:38 +00:00
irq-brcmstb-l2.c irqchip: brcmstb-l2: Fix error handling of irq_of_parse_and_map 2014-11-26 06:28:42 +00:00
irq-clps711x.c irqchip: clps711x: Convert to handle_domain_irq 2014-09-03 13:10:32 +00:00
irq-crossbar.c irqchip: crossbar: Off by one bugs in init 2014-08-18 11:48:11 +00:00
irq-dw-apb-ictl.c irqchip: add DesignWare APB ICTL interrupt controller 2013-12-13 16:29:40 +01:00
irq-gic-common.c irqchip: gic: Replace hex numbers with defines. 2014-08-19 15:07:46 +00:00
irq-gic-common.h irqchip: gic: Move some bits of GICv2 to a library-type file 2014-07-08 21:49:14 +00:00
irq-gic-v3.c Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-10-09 06:42:04 -04:00
irq-gic.c Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu 2014-10-15 07:48:18 +02:00
irq-hip04.c irqchip: hip04: Enable Hisilicon HiP04 interrupt controller 2014-08-20 12:25:49 +00:00
irq-imgpdc.c irq-imgpdc: add ImgTec PDC irqchip driver 2013-08-21 14:17:56 +01:00
irq-keystone.c irqchip: keystone: Remove warning unsigned 'kirq->irq' is never less than zero 2014-09-03 11:48:44 +00:00
irq-metag-ext.c irq-metag*: stop set_affinity vectoring to offline cpus 2014-02-25 22:35:06 +00:00
irq-metag.c irq-metag*: stop set_affinity vectoring to offline cpus 2014-02-25 22:35:06 +00:00
irq-mmp.c irqchip: mmp: Convert to handle_domain_irq 2014-09-03 13:10:34 +00:00
irq-moxart.c irqchip: Remove asmlinkage from static functions 2014-03-12 13:00:41 +01:00
irq-mxs.c irqchip: mxs: Convert to handle_domain_irq 2014-09-03 13:10:35 +00:00
irq-nvic.c irqchip: nvic: Use the generic noop function 2014-06-21 02:12:42 +00:00
irq-omap-intc.c irqchip: omap-intc: Fix legacy DMA regression 2015-01-29 17:40:44 -08:00
irq-or1k-pic.c irqchip: or1k-pic: Convert to handle_domain_irq 2014-09-03 13:10:54 +00:00
irq-orion.c irqchip: orion: Convert to handle_domain_irq 2014-09-03 13:10:37 +00:00
irq-renesas-intc-irqpin.c irqchip: renesas-intc-irqpin: Add minimal runtime PM support 2014-09-14 06:47:40 +00:00
irq-renesas-irqc.c irqchip: renesas-irqc: Enable mask on suspend 2014-01-22 21:48:55 +01:00
irq-s3c24xx.c irqchip: s3c24xx: Convert to handle_domain_irq 2014-09-03 13:10:38 +00:00
irq-sirfsoc.c irqchip: sirfsoc: Convert to handle_domain_irq 2014-09-03 13:10:40 +00:00
irq-sun4i.c irqchip: sun4i: Convert to handle_domain_irq 2014-09-03 13:10:42 +00:00
irq-sunxi-nmi.c irqchip: sun7i/sun6i: Disable NMI before registering the handler 2014-03-31 11:12:57 +02:00
irq-tb10x.c irqchip: Add TB10x interrupt controller driver 2013-06-25 18:54:21 +02:00
irq-versatile-fpga.c irqchip: versatile-fpga: Convert to handle_domain_irq 2014-09-03 13:10:43 +00:00
irq-vic.c irqchip: vic: Convert to handle_domain_irq 2014-09-03 13:10:45 +00:00
irq-vt8500.c irqchip: vt8500: Convert to handle_domain_irq 2014-09-03 13:10:46 +00:00
irq-xtensa-mx.c irqchip: xtensa: Select only an online cpu 2014-03-04 17:37:55 +01:00
irq-xtensa-pic.c xtensa: move built-in PIC to drivers/irqchip 2014-01-14 10:19:56 -08:00
irq-zevio.c irqchip: zevio: Convert to handle_domain_irq 2014-09-03 13:10:48 +00:00
irqchip.c irqchip: align irqchip OF match table section naming 2014-05-20 14:24:40 -05:00
irqchip.h of: consolidate linker section OF match table declarations 2014-05-20 14:25:24 -05:00
Kconfig Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-10-09 06:42:04 -04:00
Makefile Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-10-09 06:42:04 -04:00
spear-shirq.c irqchip: spear_shirq: Simplify register access code 2014-06-24 12:38:45 +00:00