• Alexey Brodkin's avatar
    ARCv2: SMP: Mask only private-per-core IRQ lines on boot at core intc · e8206d2b
    Alexey Brodkin authored
    Recent commit a8ec3ee8 "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: a8ec3ee8 ("arc: Mask individual IRQ lines during core INTC init")
    Signed-off-by: default avatarAlexey Brodkin <abrodkin@synopsys.com>
    [vgupta: reworked changelog, removed the extraneous idu_irq_mask_raw()]
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e8206d2b
intc-compact.c 4.78 KB