aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJisheng Zhang <jszhang@kernel.org>2024-06-14 23:34:49 +0800
committerThomas Gleixner <tglx@linutronix.de>2024-06-23 19:49:44 +0200
commit7cc4f309c933ec5d64eea31066fe86bbf9e48819 (patch)
tree0df0c738ea92205f1ed5435253abc0f1065d4591
parentirqchip/riscv-aplic: Simplify the initialization code (diff)
downloadwireguard-linux-7cc4f309c933ec5d64eea31066fe86bbf9e48819.tar.xz
wireguard-linux-7cc4f309c933ec5d64eea31066fe86bbf9e48819.zip
irqchip/dw-apb-ictl: Support building as module
The driver is now always built in. In some synaptics ARM64 SoCs it is used as a second level interrupt controller hanging off the ARM GIC and is therefore loadable during boot. Enable it to be built as a module and handle built-in usage correctly, so that it continues working on systems where it is the main interrupt controller. [ tglx: Massage changelog ] Signed-off-by: Jisheng Zhang <jszhang@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20240614153449.2083-1-jszhang@kernel.org
Diffstat (limited to '')
-rw-r--r--drivers/irqchip/Kconfig2
-rw-r--r--drivers/irqchip/irq-dw-apb-ictl.c13
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 348f34525d23..aaf84530386a 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -145,7 +145,7 @@ config DAVINCI_CP_INTC
select IRQ_DOMAIN
config DW_APB_ICTL
- bool
+ tristate "DesignWare APB Interrupt Controller"
select GENERIC_IRQ_CHIP
select IRQ_DOMAIN_HIERARCHY
diff --git a/drivers/irqchip/irq-dw-apb-ictl.c b/drivers/irqchip/irq-dw-apb-ictl.c
index d5c1c750c8d2..5eda6c4689cf 100644
--- a/drivers/irqchip/irq-dw-apb-ictl.c
+++ b/drivers/irqchip/irq-dw-apb-ictl.c
@@ -122,7 +122,7 @@ static int __init dw_apb_ictl_init(struct device_node *np,
int ret, nrirqs, parent_irq, i;
u32 reg;
- if (!parent) {
+ if (!parent && IS_BUILTIN(CONFIG_DW_APB_ICTL)) {
/* Used as the primary interrupt controller */
parent_irq = 0;
domain_ops = &dw_apb_ictl_irq_domain_ops;
@@ -214,5 +214,12 @@ err_release:
release_mem_region(r.start, resource_size(&r));
return ret;
}
-IRQCHIP_DECLARE(dw_apb_ictl,
- "snps,dw-apb-ictl", dw_apb_ictl_init);
+#if IS_BUILTIN(CONFIG_DW_APB_ICTL)
+IRQCHIP_DECLARE(dw_apb_ictl, "snps,dw-apb-ictl", dw_apb_ictl_init);
+#else
+IRQCHIP_PLATFORM_DRIVER_BEGIN(dw_apb_ictl)
+IRQCHIP_MATCH("snps,dw-apb-ictl", dw_apb_ictl_init)
+IRQCHIP_PLATFORM_DRIVER_END(dw_apb_ictl)
+MODULE_DESCRIPTION("DesignWare APB Interrupt Controller");
+MODULE_LICENSE("GPL v2");
+#endif