irqchip: Add LPC32xx interrupt controller driver
authorVladimir Zapolskiy <vz@mleia.com>
Mon, 25 Apr 2016 01:00:38 +0000 (04:00 +0300)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 11 May 2016 09:12:11 +0000 (10:12 +0100)
commit8cb17b5ed0177d1b613aadd53c7e570b81625728
treeb9fd1a3cdcafec5d09ef1c83ed664c73903c5532
parentf86c4fbd930ff6fecf3d8a1c313182bd0f49f496
irqchip: Add LPC32xx interrupt controller driver

The change adds improved support of NXP LPC32xx MIC, SIC1 and SIC2
interrupt controllers.

This is a list of new features in comparison to the legacy driver:
* irq types are taken from device tree settings, no more need to
  hardcode them,
* old driver is based on irq_domain_add_legacy, which causes problems
  with handling MIC hardware interrupt 0 produced by SIC1,
* there is one driver for MIC, SIC1 and SIC2, no more need to handle
  them separately, e.g. have two separate handlers for SIC1 and SIC2,
* the driver does not have any dependencies on hardcoded register
  offsets,
* the driver is much simpler for maintenance,
* SPARSE_IRQS option is supported.

Legacy LPC32xx interrupt controller driver was broken since commit
76ba59f8366f ("genirq: Add irq_domain-aware core IRQ handler"), which
requires a private interrupt handler, otherwise any SIC1 generated
interrupt (mapped to MIC hwirq 0) breaks the kernel with the message
"unexpected IRQ trap at vector 00".

The change disables compilation of a legacy driver found at
arch/arm/mach-lpc32xx/irq.c, the file will be removed in a separate
commit.

Fixes: 76ba59f8366f ("genirq: Add irq_domain-aware core IRQ handler")
Tested-by: Sylvain Lemieux <slemieux.tyco@gmail.com>
Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/Kconfig
arch/arm/mach-lpc32xx/phy3250.c
drivers/irqchip/Makefile
drivers/irqchip/irq-lpc32xx.c [new file with mode: 0644]