• Matt Redfearn's avatar
    irqchip/mips-gic: Replace static map with dynamic · 8ada00a6
    Matt Redfearn authored
    Commit 4cfffcfa ("irqchip/mips-gic: Fix local interrupts") fixed
    local interrupts by creating virq mappings for them all at startup.
    Unfortunately this change broke legacy IRQ controllers in the same
    system, such as the i8259 on the Malta platform, as it allocates virq
    numbers that were expected to be available for the legacy controller.
    
    Instead of creating the mappings statically when the GIC is probed,
    re-introduce the irq domain .map function, removed by commit e875bd66
    ("irqchip/mips-gic: Fix local interrupts") and use it to set up the irq
    handler and chip. Since a good deal of the required functionality is
    already implemented by gic_irq_domain_alloc, repurpose that function for
    gic_irq_domain_map and add a new gic_irq_domain_alloc which wraps
    gic_irq_domain_map with the necessary conversion.
    
    This change fixes the legacy interrupt controller of the Malta platform
    without breaking the perf interrupt fixed by commit e875bd66
    ("irqchip/mips-gic: Fix local interrupts").
    Signed-off-by: default avatarMatt Redfearn <matt.redfearn@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Cc: Jason Cooper <jason@lakedaemon.net>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Link: http://lkml.kernel.org/r/1492679256-14513-4-git-send-email-matt.redfearn@imgtec.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    8ada00a6
irq-mips-gic.c 25.6 KB