2019-05-19 15:07:45 +03:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
2017-10-16 21:04:33 +03:00
|
|
|
menu "IRQ chip support"
|
|
|
|
|
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 02:00:52 +04:00
|
|
|
config IRQCHIP
|
|
|
|
def_bool y
|
|
|
|
depends on OF_IRQ
|
|
|
|
|
2012-11-21 07:21:40 +04:00
|
|
|
config ARM_GIC
|
|
|
|
bool
|
2014-11-25 11:04:19 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2017-08-18 11:39:16 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2012-11-21 07:21:40 +04:00
|
|
|
|
irqchip/gic: Add platform driver for non-root GICs that require RPM
Add a platform driver to support non-root GICs that require runtime
power-management. Currently, only non-root GICs are supported because
the functions, smp_cross_call() and set_handle_irq(), that need to
be called for a root controller are located in the __init section and
so cannot be called by the platform driver.
The GIC platform driver re-uses many functions from the existing GIC
driver including some functions to save and restore the GIC context
during power transitions. The functions for saving and restoring the
GIC context are currently only defined if CONFIG_CPU_PM is enabled and
to ensure that these functions are always defined when the platform
driver is enabled, a dependency on CONFIG_ARM_GIC_PM (which selects the
platform driver) has been added.
In order to re-use the private GIC initialisation code, a new public
function, gic_of_init_child(), has been added which calls various
private functions to initialise the GIC. This is different from the
existing gic_of_init() because it only supports non-root GICs (ie. does
not call smp_cross_call() is set_handle_irq()) and is not located in
the __init section (so can be used by platform drivers). Furthermore,
gic_of_init_child() dynamically allocates memory for the GIC chip data
which is also different from gic_of_init().
There is no specific suspend handling for GICs registered as platform
devices. Non-wakeup interrupts will be disabled by the kernel during
late suspend, however, this alone will not power down the GIC if
interrupts have been requested and not freed. Therefore, requestors of
non-wakeup interrupts will need to free them on entering suspend in
order to power-down the GIC.
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
2016-06-07 18:12:34 +03:00
|
|
|
config ARM_GIC_PM
|
|
|
|
bool
|
|
|
|
depends on PM
|
|
|
|
select ARM_GIC
|
|
|
|
|
2015-12-18 12:44:53 +03:00
|
|
|
config ARM_GIC_MAX_NR
|
|
|
|
int
|
2019-06-14 15:57:09 +03:00
|
|
|
depends on ARM_GIC
|
2015-12-18 12:44:53 +03:00
|
|
|
default 2 if ARCH_REALVIEW
|
|
|
|
default 1
|
|
|
|
|
2014-11-25 21:47:22 +03:00
|
|
|
config ARM_GIC_V2M
|
|
|
|
bool
|
2016-06-15 23:47:33 +03:00
|
|
|
depends on PCI
|
|
|
|
select ARM_GIC
|
|
|
|
select PCI_MSI
|
2014-11-25 21:47:22 +03:00
|
|
|
|
2012-11-21 07:21:40 +04:00
|
|
|
config GIC_NON_BANKED
|
|
|
|
bool
|
|
|
|
|
2014-06-30 19:01:31 +04:00
|
|
|
config ARM_GIC_V3
|
|
|
|
bool
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2014-11-24 17:35:09 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2016-04-11 11:57:54 +03:00
|
|
|
select PARTITION_PERCPU
|
2017-08-18 11:39:17 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2014-06-30 19:01:31 +04:00
|
|
|
|
2014-11-24 17:35:19 +03:00
|
|
|
config ARM_GIC_V3_ITS
|
|
|
|
bool
|
2017-11-13 20:25:59 +03:00
|
|
|
select GENERIC_MSI_IRQ_DOMAIN
|
|
|
|
default ARM_GIC_V3
|
|
|
|
|
|
|
|
config ARM_GIC_V3_ITS_PCI
|
|
|
|
bool
|
|
|
|
depends on ARM_GIC_V3_ITS
|
2016-06-15 23:47:33 +03:00
|
|
|
depends on PCI
|
|
|
|
depends on PCI_MSI
|
2017-11-13 20:25:59 +03:00
|
|
|
default ARM_GIC_V3_ITS
|
2014-06-30 19:01:31 +04:00
|
|
|
|
2018-02-05 17:07:43 +03:00
|
|
|
config ARM_GIC_V3_ITS_FSL_MC
|
|
|
|
bool
|
|
|
|
depends on ARM_GIC_V3_ITS
|
|
|
|
depends on FSL_MC_BUS
|
|
|
|
default ARM_GIC_V3_ITS
|
|
|
|
|
2013-06-26 11:18:48 +04:00
|
|
|
config ARM_NVIC
|
|
|
|
bool
|
2015-05-16 12:44:16 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2013-06-26 11:18:48 +04:00
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2012-10-28 02:25:26 +04:00
|
|
|
config ARM_VIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2012-10-28 02:25:26 +04:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2016-02-10 17:46:56 +03:00
|
|
|
config ARMADA_370_XP_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
2016-06-15 23:47:33 +03:00
|
|
|
select PCI_MSI if PCI
|
2017-08-18 11:39:19 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2016-02-10 17:46:56 +03:00
|
|
|
|
2016-02-19 18:22:44 +03:00
|
|
|
config ALPINE_MSI
|
|
|
|
bool
|
2016-06-15 23:47:33 +03:00
|
|
|
depends on PCI
|
|
|
|
select PCI_MSI
|
2016-02-19 18:22:44 +03:00
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2019-06-10 11:34:43 +03:00
|
|
|
config AL_FIC
|
|
|
|
bool "Amazon's Annapurna Labs Fabric Interrupt Controller"
|
|
|
|
depends on OF || COMPILE_TEST
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Support Amazon's Annapurna Labs Fabric Interrupt Controller.
|
|
|
|
|
2014-07-10 21:14:18 +04:00
|
|
|
config ATMEL_AIC_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2014-07-10 21:14:18 +04:00
|
|
|
select SPARSE_IRQ
|
|
|
|
|
|
|
|
config ATMEL_AIC5_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2014-07-10 21:14:18 +04:00
|
|
|
select SPARSE_IRQ
|
|
|
|
|
2015-07-08 15:46:08 +03:00
|
|
|
config I8259
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2015-11-22 17:30:14 +03:00
|
|
|
config BCM6345_L1_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
2017-08-18 11:39:20 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2015-11-22 17:30:14 +03:00
|
|
|
|
IRQCHIP: Add new driver for BCM7038-style level 1 interrupt controllers
This is the main peripheral IRQ controller on the BCM7xxx MIPS chips;
it has the following characteristics:
- 64 to 160+ level IRQs
- Atomic set/clear registers
- Reasonably predictable register layout (N status words, then N
mask status words, then N mask set words, then N mask clear words)
- SMP affinity supported on most systems
- Typically connected to MIPS IRQ 2,3,2,3 on CPUs 0,1,2,3
This driver registers one IRQ domain and one IRQ chip to cover all
instances of the block. Up to 4 instances of the block may appear, as
it supports 4-way IRQ affinity on BCM7435.
The same block exists on the ARM BCM7xxx chips, but typically the ARM GIC
is used instead. So this driver is primarily intended for MIPS STB chips.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Cc: f.fainelli@gmail.com
Cc: jaedon.shin@gmail.com
Cc: abrestic@chromium.org
Cc: tglx@linutronix.de
Cc: jason@lakedaemon.net
Cc: jogo@openwrt.org
Cc: arnd@arndb.de
Cc: computersforpeace@gmail.com
Cc: linux-mips@linux-mips.org
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/8844/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2014-12-25 20:49:06 +03:00
|
|
|
config BCM7038_L1_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
2017-08-18 11:39:21 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
IRQCHIP: Add new driver for BCM7038-style level 1 interrupt controllers
This is the main peripheral IRQ controller on the BCM7xxx MIPS chips;
it has the following characteristics:
- 64 to 160+ level IRQs
- Atomic set/clear registers
- Reasonably predictable register layout (N status words, then N
mask status words, then N mask set words, then N mask clear words)
- SMP affinity supported on most systems
- Typically connected to MIPS IRQ 2,3,2,3 on CPUs 0,1,2,3
This driver registers one IRQ domain and one IRQ chip to cover all
instances of the block. Up to 4 instances of the block may appear, as
it supports 4-way IRQ affinity on BCM7435.
The same block exists on the ARM BCM7xxx chips, but typically the ARM GIC
is used instead. So this driver is primarily intended for MIPS STB chips.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Cc: f.fainelli@gmail.com
Cc: jaedon.shin@gmail.com
Cc: abrestic@chromium.org
Cc: tglx@linutronix.de
Cc: jason@lakedaemon.net
Cc: jogo@openwrt.org
Cc: arnd@arndb.de
Cc: computersforpeace@gmail.com
Cc: linux-mips@linux-mips.org
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/8844/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2014-12-25 20:49:06 +03:00
|
|
|
|
2014-11-07 09:44:27 +03:00
|
|
|
config BCM7120_L2_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2014-05-24 04:40:53 +04:00
|
|
|
config BRCMSTB_L2_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2019-02-14 17:52:16 +03:00
|
|
|
config DAVINCI_AINTC
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2019-02-14 17:52:30 +03:00
|
|
|
config DAVINCI_CP_INTC
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-09-09 16:01:20 +04:00
|
|
|
config DW_APB_ICTL
|
|
|
|
bool
|
2014-10-22 16:59:10 +04:00
|
|
|
select GENERIC_IRQ_CHIP
|
2013-09-09 16:01:20 +04:00
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2017-03-18 19:53:24 +03:00
|
|
|
config FARADAY_FTINTC010
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2017-03-18 19:53:24 +03:00
|
|
|
select SPARSE_IRQ
|
|
|
|
|
2016-03-23 12:06:33 +03:00
|
|
|
config HISILICON_IRQ_MBIGEN
|
|
|
|
bool
|
|
|
|
select ARM_GIC_V3
|
|
|
|
select ARM_GIC_V3_ITS
|
|
|
|
|
2013-04-22 18:43:50 +04:00
|
|
|
config IMGPDC_IRQ
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2019-01-25 18:41:25 +03:00
|
|
|
config IXP4XX_IRQ
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
|
|
|
select SPARSE_IRQ
|
|
|
|
|
2018-12-14 17:44:16 +03:00
|
|
|
config MADERA_IRQ
|
|
|
|
tristate
|
|
|
|
|
2015-05-26 19:20:06 +03:00
|
|
|
config IRQ_MIPS_CPU
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
2017-03-30 22:06:11 +03:00
|
|
|
select GENERIC_IRQ_IPI if SYS_SUPPORTS_MULTITHREADING
|
2015-05-26 19:20:06 +03:00
|
|
|
select IRQ_DOMAIN
|
2017-03-30 22:06:11 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY if GENERIC_IRQ_IPI
|
2017-08-18 11:39:24 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2015-05-26 19:20:06 +03:00
|
|
|
|
2014-02-02 12:07:46 +04:00
|
|
|
config CLPS711X_IRQCHIP
|
|
|
|
bool
|
|
|
|
depends on ARCH_CLPS711X
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2014-02-02 12:07:46 +04:00
|
|
|
select SPARSE_IRQ
|
|
|
|
default y
|
|
|
|
|
2017-10-30 15:38:35 +03:00
|
|
|
config OMPIC
|
|
|
|
bool
|
|
|
|
|
2014-05-27 00:31:42 +04:00
|
|
|
config OR1K_PIC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2014-09-16 01:15:02 +04:00
|
|
|
config OMAP_IRQCHIP
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-06-06 20:27:09 +04:00
|
|
|
config ORION_IRQCHIP
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2018-06-22 20:01:26 +03:00
|
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
2013-06-06 20:27:09 +04:00
|
|
|
|
2016-01-14 04:15:35 +03:00
|
|
|
config PIC32_EVIC
|
|
|
|
bool
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2016-08-04 07:30:37 +03:00
|
|
|
config JCORE_AIC
|
2016-10-19 20:53:52 +03:00
|
|
|
bool "J-Core integrated AIC" if COMPILE_TEST
|
|
|
|
depends on OF
|
2016-08-04 07:30:37 +03:00
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Support for the J-Core integrated AIC.
|
|
|
|
|
2018-12-10 20:35:43 +03:00
|
|
|
config RDA_INTC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-02-18 18:28:34 +04:00
|
|
|
config RENESAS_INTC_IRQPIN
|
2019-06-07 12:50:36 +03:00
|
|
|
bool "Renesas INTC External IRQ Pin Support" if COMPILE_TEST
|
2013-02-18 18:28:34 +04:00
|
|
|
select IRQ_DOMAIN
|
2019-06-07 12:50:36 +03:00
|
|
|
help
|
|
|
|
Enable support for the Renesas Interrupt Controller for external
|
|
|
|
interrupt pins, as found on SH/R-Mobile and R-Car Gen1 SoCs.
|
2013-02-18 18:28:34 +04:00
|
|
|
|
2013-02-27 12:15:01 +04:00
|
|
|
config RENESAS_IRQC
|
2019-06-07 12:50:36 +03:00
|
|
|
bool "Renesas R-Mobile APE6 and R-Car IRQC support" if COMPILE_TEST
|
2015-09-28 12:42:37 +03:00
|
|
|
select GENERIC_IRQ_CHIP
|
2013-02-27 12:15:01 +04:00
|
|
|
select IRQ_DOMAIN
|
2019-06-07 12:50:36 +03:00
|
|
|
help
|
|
|
|
Enable support for the Renesas Interrupt Controller for external
|
|
|
|
devices, as found on R-Mobile APE6, R-Car Gen2, and R-Car Gen3 SoCs.
|
2013-02-27 12:15:01 +04:00
|
|
|
|
2019-05-27 15:17:11 +03:00
|
|
|
config RENESAS_RZA1_IRQC
|
2019-06-07 12:50:36 +03:00
|
|
|
bool "Renesas RZ/A1 IRQC support" if COMPILE_TEST
|
2019-05-27 15:17:11 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2019-06-07 12:50:36 +03:00
|
|
|
help
|
|
|
|
Enable support for the Renesas RZ/A1 Interrupt Controller, to use up
|
|
|
|
to 8 external interrupts with configurable sense select.
|
2019-05-27 15:17:11 +03:00
|
|
|
|
2015-02-18 18:13:58 +03:00
|
|
|
config ST_IRQCHIP
|
|
|
|
bool
|
|
|
|
select REGMAP
|
|
|
|
select MFD_SYSCON
|
|
|
|
help
|
|
|
|
Enables SysCfg Controlled IRQs on STi based platforms.
|
|
|
|
|
2016-01-20 21:07:17 +03:00
|
|
|
config TANGO_IRQ
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2013-06-25 20:29:57 +04:00
|
|
|
config TB10X_IRQC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2015-12-21 23:11:23 +03:00
|
|
|
config TS4800_IRQ
|
|
|
|
tristate "TS-4800 IRQ controller"
|
|
|
|
select IRQ_DOMAIN
|
2016-01-26 01:24:17 +03:00
|
|
|
depends on HAS_IOMEM
|
2016-02-09 13:19:20 +03:00
|
|
|
depends on SOC_IMX51 || COMPILE_TEST
|
2015-12-21 23:11:23 +03:00
|
|
|
help
|
|
|
|
Support for the TS-4800 FPGA IRQ controller
|
|
|
|
|
2012-11-01 01:04:31 +04: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 12:04:57 +04:00
|
|
|
|
|
|
|
config XTENSA_MX
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2017-08-18 11:39:25 +03:00
|
|
|
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
2013-12-03 14:27:23 +04:00
|
|
|
|
2016-11-14 15:13:45 +03:00
|
|
|
config XILINX_INTC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
2013-12-03 14:27:23 +04:00
|
|
|
config IRQ_CROSSBAR
|
|
|
|
bool
|
|
|
|
help
|
2014-09-18 07:09:42 +04:00
|
|
|
Support for a CROSSBAR ip that precedes the main interrupt controller.
|
2013-12-03 14:27:23 +04:00
|
|
|
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.
|
2014-07-23 18:40:30 +04:00
|
|
|
|
|
|
|
config KEYSTONE_IRQ
|
|
|
|
tristate "Keystone 2 IRQ controller IP"
|
|
|
|
depends on ARCH_KEYSTONE
|
|
|
|
help
|
|
|
|
Support for Texas Instruments Keystone 2 IRQ controller IP which
|
|
|
|
is part of the Keystone 2 IPC mechanism
|
2014-09-19 01:47:19 +04:00
|
|
|
|
|
|
|
config MIPS_GIC
|
|
|
|
bool
|
2015-12-08 16:20:28 +03:00
|
|
|
select GENERIC_IRQ_IPI
|
2015-12-08 16:20:23 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2014-09-19 01:47:19 +04:00
|
|
|
select MIPS_CM
|
2015-05-09 20:30:47 +03:00
|
|
|
|
2015-05-24 18:11:31 +03:00
|
|
|
config INGENIC_IRQ
|
|
|
|
bool
|
|
|
|
depends on MACH_INGENIC
|
|
|
|
default y
|
2015-06-27 22:44:34 +03:00
|
|
|
|
2019-07-24 20:16:08 +03:00
|
|
|
config INGENIC_TCU_IRQ
|
|
|
|
bool "Ingenic JZ47xx TCU interrupt controller"
|
|
|
|
default MACH_INGENIC
|
|
|
|
depends on MIPS || COMPILE_TEST
|
|
|
|
select MFD_SYSCON
|
2019-08-13 04:56:02 +03:00
|
|
|
select GENERIC_IRQ_CHIP
|
2019-07-24 20:16:08 +03:00
|
|
|
help
|
|
|
|
Support for interrupts in the Timer/Counter Unit (TCU) of the Ingenic
|
|
|
|
JZ47xx SoCs.
|
|
|
|
|
|
|
|
If unsure, say N.
|
|
|
|
|
2015-05-09 20:30:47 +03:00
|
|
|
config RENESAS_H8300H_INTC
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
|
|
|
|
config RENESAS_H8S_INTC
|
2019-06-07 12:50:36 +03:00
|
|
|
bool "Renesas H8S Interrupt Controller Support" if COMPILE_TEST
|
2015-06-27 22:44:34 +03:00
|
|
|
select IRQ_DOMAIN
|
2019-06-07 12:50:36 +03:00
|
|
|
help
|
|
|
|
Enable support for the Renesas H8/300 Interrupt Controller, as found
|
|
|
|
on Renesas H8S SoCs.
|
2015-08-24 22:04:15 +03:00
|
|
|
|
|
|
|
config IMX_GPCV2
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Enables the wakeup IRQs for IMX platforms with GPCv2 block
|
2015-10-12 22:15:34 +03:00
|
|
|
|
|
|
|
config IRQ_MXS
|
|
|
|
def_bool y if MACH_ASM9260 || ARCH_MXS
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select STMP_DEVICE
|
2016-02-19 16:34:43 +03:00
|
|
|
|
2018-03-22 18:15:24 +03:00
|
|
|
config MSCC_OCELOT_IRQ
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
|
2017-06-21 16:29:14 +03:00
|
|
|
config MVEBU_GICP
|
|
|
|
bool
|
|
|
|
|
2017-06-21 16:29:15 +03:00
|
|
|
config MVEBU_ICU
|
|
|
|
bool
|
|
|
|
|
2016-02-19 16:34:43 +03:00
|
|
|
config MVEBU_ODMI
|
|
|
|
bool
|
2017-03-14 15:54:12 +03:00
|
|
|
select GENERIC_MSI_IRQ_DOMAIN
|
irqchip: Add per-cpu interrupt partitioning library
We've unfortunately started seeing a situation where percpu interrupts
are partitioned in the system: one arbitrary set of CPUs has an
interrupt connected to a type of device, while another disjoint
set of CPUs has the same interrupt connected to another type of device.
This makes it impossible to have a device driver requesting this interrupt
using the current percpu-interrupt abstraction, as the same interrupt number
is now potentially claimed by at least two drivers, and we forbid interrupt
sharing on per-cpu interrupt.
A solution to this is to turn things upside down. Let's assume that our
system describes all the possible partitions for a given interrupt, and
give each of them a unique identifier. It is then possible to create
a namespace where the affinity identifier itself is a form of interrupt
number. At this point, it becomes easy to implement a set of partitions
as a cascaded irqchip, each affinity identifier being the HW irq.
This allows us to keep a number of nice properties:
- Each partition results in a separate percpu-interrupt (with a restrictied
affinity), which keeps drivers happy.
- Because the underlying interrupt is still per-cpu, the overhead of
the indirection can be kept pretty minimal.
- The core code can ignore most of that crap.
For that purpose, we implement a small library that deals with some of
the boilerplate code, relying on platform-specific drivers to provide
a description of the affinity sets and a set of callbacks.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: devicetree@vger.kernel.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Rob Herring <robh+dt@kernel.org>
Link: http://lkml.kernel.org/r/1460365075-7316-4-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2016-04-11 11:57:53 +03:00
|
|
|
|
2016-08-05 17:55:19 +03:00
|
|
|
config MVEBU_PIC
|
|
|
|
bool
|
|
|
|
|
2018-10-01 17:13:51 +03:00
|
|
|
config MVEBU_SEI
|
|
|
|
bool
|
|
|
|
|
irqchip: Add support for Layerscape external interrupt lines
The LS1021A allows inverting the polarity of six interrupt lines
IRQ[0:5] via the scfg_intpcr register, effectively allowing
IRQ_TYPE_LEVEL_LOW and IRQ_TYPE_EDGE_FALLING for those. We just need to
check the type, set the relevant bit in INTPCR accordingly, and fixup
the type argument before calling the GIC's irq_set_type.
In fact, the power-on-reset value of the INTPCR register on the LS1021A
is so that all six lines have their polarity inverted. Hence any
hardware connected to those lines is unusable without this: If the line
is indeed active low, the generic GIC code will reject an irq spec with
IRQ_TYPE_LEVEL_LOW, while if the line is active high, we must obviously
disable the polarity inversion (writing 0 to the relevant bit) before
unmasking the interrupt.
Some other Layerscape SOCs (LS1043A, LS1046A) have a similar feature,
just with a different number of external interrupt lines (and a
different POR value for the INTPCR register). This driver should be
prepared for supporting those by properly filling out the device tree
node. I have the reference manuals for all three boards, but I've only
tested the driver on an LS1021A.
Unfortunately, the Kconfig symbol ARCH_LAYERSCAPE only exists on
arm64, so do as is done for irq-ls-scfg-msi.c: introduce a new symbol
which is set when either ARCH_LAYERSCAPE or SOC_LS1021A is set.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20191107122115.6244-3-linux@rasmusvillemoes.dk
2019-11-07 15:21:15 +03:00
|
|
|
config LS_EXTIRQ
|
|
|
|
def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
|
|
|
|
select MFD_SYSCON
|
|
|
|
|
2016-03-23 14:08:20 +03:00
|
|
|
config LS_SCFG_MSI
|
|
|
|
def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
|
|
|
|
depends on PCI && PCI_MSI
|
|
|
|
|
irqchip: Add per-cpu interrupt partitioning library
We've unfortunately started seeing a situation where percpu interrupts
are partitioned in the system: one arbitrary set of CPUs has an
interrupt connected to a type of device, while another disjoint
set of CPUs has the same interrupt connected to another type of device.
This makes it impossible to have a device driver requesting this interrupt
using the current percpu-interrupt abstraction, as the same interrupt number
is now potentially claimed by at least two drivers, and we forbid interrupt
sharing on per-cpu interrupt.
A solution to this is to turn things upside down. Let's assume that our
system describes all the possible partitions for a given interrupt, and
give each of them a unique identifier. It is then possible to create
a namespace where the affinity identifier itself is a form of interrupt
number. At this point, it becomes easy to implement a set of partitions
as a cascaded irqchip, each affinity identifier being the HW irq.
This allows us to keep a number of nice properties:
- Each partition results in a separate percpu-interrupt (with a restrictied
affinity), which keeps drivers happy.
- Because the underlying interrupt is still per-cpu, the overhead of
the indirection can be kept pretty minimal.
- The core code can ignore most of that crap.
For that purpose, we implement a small library that deals with some of
the boilerplate code, relying on platform-specific drivers to provide
a description of the affinity sets and a set of callbacks.
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: devicetree@vger.kernel.org
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Rob Herring <robh+dt@kernel.org>
Link: http://lkml.kernel.org/r/1460365075-7316-4-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2016-04-11 11:57:53 +03:00
|
|
|
config PARTITION_PERCPU
|
|
|
|
bool
|
2016-05-19 19:46:18 +03:00
|
|
|
|
2015-10-29 01:26:22 +03:00
|
|
|
config EZNPS_GIC
|
|
|
|
bool "NPS400 Global Interrupt Manager (GIM)"
|
2016-05-13 00:03:35 +03:00
|
|
|
depends on ARC || (COMPILE_TEST && !64BIT)
|
2015-10-29 01:26:22 +03:00
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Support the EZchip NPS400 global interrupt controller
|
2016-09-20 19:00:57 +03:00
|
|
|
|
|
|
|
config STM32_EXTI
|
|
|
|
bool
|
|
|
|
select IRQ_DOMAIN
|
2017-11-06 20:03:31 +03:00
|
|
|
select GENERIC_IRQ_CHIP
|
2017-02-03 02:23:59 +03:00
|
|
|
|
|
|
|
config QCOM_IRQ_COMBINER
|
|
|
|
bool "QCOM IRQ combiner support"
|
|
|
|
depends on ARCH_QCOM && ACPI
|
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
|
|
|
help
|
|
|
|
Say yes here to add support for the IRQ combiner devices embedded
|
|
|
|
in Qualcomm Technologies chips.
|
2017-08-23 04:31:47 +03:00
|
|
|
|
|
|
|
config IRQ_UNIPHIER_AIDET
|
|
|
|
bool "UniPhier AIDET support" if COMPILE_TEST
|
|
|
|
depends on ARCH_UNIPHIER || COMPILE_TEST
|
|
|
|
default ARCH_UNIPHIER
|
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
|
|
|
help
|
|
|
|
Support for the UniPhier AIDET (ARM Interrupt Detector).
|
2017-10-16 21:04:33 +03:00
|
|
|
|
2017-09-18 16:46:10 +03:00
|
|
|
config MESON_IRQ_GPIO
|
|
|
|
bool "Meson GPIO Interrupt Multiplexer"
|
2017-10-20 12:15:36 +03:00
|
|
|
depends on ARCH_MESON
|
2017-09-18 16:46:10 +03:00
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
|
|
|
help
|
|
|
|
Support Meson SoC Family GPIO Interrupt Multiplexer
|
|
|
|
|
2017-12-29 18:41:46 +03:00
|
|
|
config GOLDFISH_PIC
|
|
|
|
bool "Goldfish programmable interrupt controller"
|
|
|
|
depends on MIPS && (GOLDFISH || COMPILE_TEST)
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Say yes here to enable Goldfish interrupt controller driver used
|
|
|
|
for Goldfish based virtual platforms.
|
|
|
|
|
2018-02-28 20:27:29 +03:00
|
|
|
config QCOM_PDC
|
|
|
|
bool "QCOM PDC"
|
|
|
|
depends on ARCH_QCOM
|
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
|
|
|
help
|
|
|
|
Power Domain Controller driver to manage and configure wakeup
|
|
|
|
IRQs for Qualcomm Technologies Inc (QTI) mobile chips.
|
|
|
|
|
2018-09-16 10:57:14 +03:00
|
|
|
config CSKY_MPINTC
|
|
|
|
bool "C-SKY Multi Processor Interrupt Controller"
|
|
|
|
depends on CSKY
|
|
|
|
help
|
|
|
|
Say yes here to enable C-SKY SMP interrupt controller driver used
|
|
|
|
for C-SKY SMP system.
|
|
|
|
In fact it's not mmio map in hw and it use ld/st to visit the
|
|
|
|
controller's register inside CPU.
|
|
|
|
|
2018-09-16 10:57:14 +03:00
|
|
|
config CSKY_APB_INTC
|
|
|
|
bool "C-SKY APB Interrupt Controller"
|
|
|
|
depends on CSKY
|
|
|
|
help
|
|
|
|
Say yes here to enable C-SKY APB interrupt controller driver used
|
|
|
|
by C-SKY single core SOC system. It use mmio map apb-bus to visit
|
|
|
|
the controller's register.
|
|
|
|
|
2018-12-17 17:01:20 +03:00
|
|
|
config IMX_IRQSTEER
|
|
|
|
bool "i.MX IRQSTEER support"
|
|
|
|
depends on ARCH_MXC || COMPILE_TEST
|
|
|
|
default ARCH_MXC
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
help
|
|
|
|
Support for the i.MX IRQSTEER interrupt multiplexer/remapper.
|
|
|
|
|
2019-02-01 09:22:35 +03:00
|
|
|
config LS1X_IRQ
|
|
|
|
bool "Loongson-1 Interrupt Controller"
|
|
|
|
depends on MACH_LOONGSON32
|
|
|
|
default y
|
|
|
|
select IRQ_DOMAIN
|
|
|
|
select GENERIC_IRQ_CHIP
|
|
|
|
help
|
|
|
|
Support for the Loongson-1 platform Interrupt Controller.
|
|
|
|
|
2019-04-30 13:12:25 +03:00
|
|
|
config TI_SCI_INTR_IRQCHIP
|
|
|
|
bool
|
|
|
|
depends on TI_SCI_PROTOCOL
|
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
|
|
|
help
|
|
|
|
This enables the irqchip driver support for K3 Interrupt router
|
|
|
|
over TI System Control Interface available on some new TI's SoCs.
|
|
|
|
If you wish to use interrupt router irq resources managed by the
|
|
|
|
TI System Controller, say Y here. Otherwise, say N.
|
|
|
|
|
2019-04-30 13:12:27 +03:00
|
|
|
config TI_SCI_INTA_IRQCHIP
|
|
|
|
bool
|
|
|
|
depends on TI_SCI_PROTOCOL
|
|
|
|
select IRQ_DOMAIN_HIERARCHY
|
2019-04-30 13:12:29 +03:00
|
|
|
select TI_SCI_INTA_MSI_DOMAIN
|
2019-04-30 13:12:27 +03:00
|
|
|
help
|
|
|
|
This enables the irqchip driver support for K3 Interrupt aggregator
|
|
|
|
over TI System Control Interface available on some new TI's SoCs.
|
|
|
|
If you wish to use interrupt aggregator irq resources managed by the
|
|
|
|
TI System Controller, say Y here. Otherwise, say N.
|
|
|
|
|
2018-07-26 17:27:00 +03:00
|
|
|
config SIFIVE_PLIC
|
|
|
|
bool "SiFive Platform-Level Interrupt Controller"
|
|
|
|
depends on RISCV
|
|
|
|
help
|
|
|
|
This enables support for the PLIC chip found in SiFive (and
|
|
|
|
potentially other) RISC-V systems. The PLIC controls devices
|
|
|
|
interrupts and connects them to each core's local interrupt
|
|
|
|
controller. Aside from timer and software interrupts, all other
|
|
|
|
interrupt sources are subordinate to the PLIC.
|
|
|
|
|
|
|
|
If you don't know what to do here, say Y.
|
2019-10-02 17:44:52 +03:00
|
|
|
|
|
|
|
endmenu
|