[PATCH 3/7] irqchip/gic-v5: Disable IRSes on probe failures
Lorenzo Pieralisi
lpieralisi at kernel.org
Wed Aug 12 02:10:31 PDT 2026
GICv5 driver probe failures cause IRSes initialized by the kernel to be
unmapped and their data structures to be destroyed but the current driver
leaves the probed IRSes enabled, whereas they should be disabled.
Disable IRSes on driver probe failures so that the IRSes are brought back
to their quiescent HW state.
Fixes: 5cb1b6dab2de ("irqchip/gic-v5: Add GICv5 IRS/SPI support")
Fixes: 35866efa52fe ("irqchip/gic-v5: Add ACPI IRS probing")
Signed-off-by: Lorenzo Pieralisi <lpieralisi at kernel.org>
Cc: Thomas Gleixner <tglx at kernel.org>
Cc: Marc Zyngier <maz at kernel.org>
Link: https://sashiko.dev/#/message/20260810104747.E5CE71F000E9%40smtp.kernel.org
---
drivers/irqchip/irq-gic-v5-irs.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/irqchip/irq-gic-v5-irs.c b/drivers/irqchip/irq-gic-v5-irs.c
index 0bd9ae9ae12e..9d25ce8bfd8c 100644
--- a/drivers/irqchip/irq-gic-v5-irs.c
+++ b/drivers/irqchip/irq-gic-v5-irs.c
@@ -488,6 +488,12 @@ static int gicv5_irs_wait_for_idle(struct gicv5_irs_chip_data *irs_data)
GICV5_IRS_CR0_IDLE, NULL);
}
+static void __init gicv5_irs_disable(struct gicv5_irs_chip_data *irs_data)
+{
+ irs_writel_relaxed(irs_data, 0, GICV5_IRS_CR0);
+ gicv5_irs_wait_for_idle(irs_data);
+}
+
void gicv5_irs_syncr(void)
{
struct gicv5_irs_chip_data *irs_data;
@@ -786,6 +792,7 @@ static int __init gicv5_irs_of_init(struct device_node *node)
out_iomem:
gicv5_irs_clear_affinity(irs_data);
+ gicv5_irs_disable(irs_data);
iounmap(irs_base);
out_err:
kfree(irs_data);
@@ -801,6 +808,7 @@ void __init gicv5_irs_remove(void)
list_for_each_entry_safe(irs_data, tmp_data, &irs_nodes, entry) {
gicv5_irs_clear_affinity(irs_data);
+ gicv5_irs_disable(irs_data);
iounmap(irs_data->irs_base);
list_del(&irs_data->entry);
kfree(irs_data);
@@ -968,6 +976,7 @@ static int __init gic_acpi_parse_madt_irs(union acpi_subtable_headers *header,
out_map:
gicv5_irs_clear_affinity(irs_data);
+ gicv5_irs_disable(irs_data);
iounmap(irs_base);
out_release:
release_mem_region(r->start, resource_size(r));
--
2.53.0
More information about the linux-arm-kernel
mailing list