]> git.baikalelectronics.ru Git - kernel.git/commit
ARCv2: SMP: Mask only private-per-core IRQ lines on boot at core intc
authorAlexey Brodkin <abrodkin@synopsys.com>
Mon, 28 Aug 2017 22:03:58 +0000 (15:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Aug 2017 23:11:15 +0000 (16:11 -0700)
commitbf125d1a8d591129b48fdc552364baec68ae5936
treea1e22d334fca7cc712a96d57ac62089ec00235b2
parent6403ae8f29339b271eb034d0da5d6a451a46aa70
ARCv2: SMP: Mask only private-per-core IRQ lines on boot at core intc

Recent commit ea587f61ce83 "arc: Mask individual IRQ lines during core
INTC init" breaks interrupt handling on ARCv2 SMP systems.

That commit masked all interrupts at onset, as some controllers on some
boards (customer as well as internal), would assert interrutps early
before any handlers were installed.  For SMP systems, the masking was
done at each cpu's core-intc.  Later, when the IRQ was actually
requested, it was unmasked, but only on the requesting cpu.

For "common" interrupts, which were wired up from the 2nd level IDU
intc, this was as issue as they needed to be enabled on ALL the cpus
(given that IDU IRQs are by default served Round Robin across cpus)

So fix that by NOT masking "common" interrupts at core-intc, but instead
at the 2nd level IDU intc (latter already being done in idu_of_init())

Fixes: ea587f61ce83 ("arc: Mask individual IRQ lines during core INTC init")
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
[vgupta: reworked changelog, removed the extraneous idu_irq_mask_raw()]
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/arc/kernel/intc-arcv2.c
arch/arc/kernel/intc-compact.c