irqchip: add basic infrastructure
With the recent creation of the drivers/irqchip/ directory, it is
desirable to move irq controller drivers here. At the moment, the only
driver here is irq-bcm2835, the driver for the irq controller found in
the ARM BCM2835 SoC, present in Rasberry Pi systems. This irq
controller driver was exporting its initialization function and its
irq handling function through a header file in
<linux/irqchip/bcm2835.h>.
When proposing to also move another irq controller driver in
drivers/irqchip, Rob Herring raised the very valid point that moving
things to drivers/irqchip was good in order to remove more stuff from
arch/arm, but if it means adding gazillions of headers files in
include/linux/irqchip/, it would not be very nice.
So, upon the suggestion of Rob Herring and Arnd Bergmann, this commit
introduces a small infrastructure that defines a central
irqchip_init() function in drivers/irqchip/irqchip.c, which is meant
to be called as the ->init_irq() callback of ARM platforms. This
function calls of_irq_init() with an array of match strings and init
functions generated from a special linker section.
Note that the irq controller driver initialization function is
responsible for setting the global handle_arch_irq() variable, so that
ARM platforms no longer have to define the ->handle_irq field in their
DT_MACHINE structure.
A global header, <linux/irqchip.h> is also added to expose the single
irqchip_init() function to the reset of the kernel.
A further commit moves the BCM2835 irq controller driver to this new
small infrastructure, therefore removing the include/linux/irqchip/
directory.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Stephen Warren <swarren@wwwdotorg.org>
Reviewed-by: Rob Herring <rob.herring@calxeda.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
[rob.herring: reword commit message to reflect use of linker sections.]
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
2012-11-21 06:00:52 +08:00
|
|
|
config IRQCHIP
|
|
|
|
def_bool y
|
|
|
|
depends on OF_IRQ
|
|
|
|
|
2012-11-21 11:21:40 +08:00
|
|
|
config ARM_GIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
|
|
|
|
config GIC_NON_BANKED
|
|
|
|
bool
|
|
|
|
|
2014-06-30 23:01:31 +08:00
|
|
|
config ARM_GIC_V3
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
|
2013-06-26 15:18:48 +08:00
|
|
|
config ARM_NVIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2012-10-28 06:25:26 +08:00
|
|
|
config ARM_VIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
|
|
|
|
config ARM_VIC_NR
|
|
|
|
int
|
|
|
|
default 4 if ARCH_S5PV210
|
|
|
|
default 2
|
|
|
|
depends on ARM_VIC
|
|
|
|
help
|
|
|
|
The maximum number of VICs available in the system, for
|
|
|
|
power management.
|
|
|
|
|
2014-07-11 01:14:18 +08:00
|
|
|
config ATMEL_AIC_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
select SPARSE_IRQ
|
|
|
|
|
|
|
|
config ATMEL_AIC5_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
select SPARSE_IRQ
|
|
|
|
|
2014-05-24 08:40:53 +08:00
|
|
|
config BRCMSTB_L2_IRQ
|
|
|
|
bool
|
|
|
|
depends on ARM
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-09-09 20:01:20 +08:00
|
|
|
config DW_APB_ICTL
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-04-22 22:43:50 +08:00
|
|
|
config IMGPDC_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2014-02-02 16:07:46 +08:00
|
|
|
config CLPS711X_IRQCHIP
|
|
|
|
bool
|
|
|
|
depends on ARCH_CLPS711X
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
select SPARSE_IRQ
|
|
|
|
default y
|
|
|
|
|
2014-05-27 04:31:42 +08:00
|
|
|
config OR1K_PIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-06-07 00:27:09 +08:00
|
|
|
config ORION_IRQCHIP
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select MULTI_IRQ_HANDLER
|
|
|
|
|
2013-02-18 22:28:34 +08:00
|
|
|
config RENESAS_INTC_IRQPIN
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-02-27 16:15:01 +08:00
|
|
|
config RENESAS_IRQC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-06-26 00:29:57 +08:00
|
|
|
config TB10X_IRQC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2012-11-01 05:04:31 +08:00
|
|
|
config VERSATILE_FPGA_IRQ
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
|
|
|
config VERSATILE_FPGA_IRQ_NR
|
|
|
|
int
|
|
|
|
default 4
|
|
|
|
depends on VERSATILE_FPGA_IRQ
|
2013-12-01 16:04:57 +08:00
|
|
|
|
|
|
|
config XTENSA_MX
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2013-12-03 18:27:23 +08:00
|
|
|
|
|
|
|
config IRQ_CROSSBAR
|
|
|
|
bool
|
|
|
|
help
|
|
|
|
Support for a CROSSBAR ip that preceeds the main interrupt controller.
|
|
|
|
The primary irqchip invokes the crossbar's callback which inturn allocates
|
|
|
|
a free irq and configures the IP. Thus the peripheral interrupts are
|
|
|
|
routed to one of the free irqchip interrupt lines.
|