irqchip/gic-v5: Disable IRSes on probe failures

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: 5cb1b6dab2 ("irqchip/gic-v5: Add GICv5 IRS/SPI support")
Fixes: 35866efa52 ("irqchip/gic-v5: Add ACPI IRS probing")
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://sashiko.dev/#/message/20260810104747.E5CE71F000E9%40smtp.kernel.org
Link: https://patch.msgid.link/20260812-gicv5-7-2-fixes-v1-3-3743e82c69a4@kernel.org
This commit is contained in:
Lorenzo Pieralisi 2026-08-12 11:10:31 +02:00 committed by Thomas Gleixner
parent aa079dbf4c
commit 79b115c2a2

View File

@ -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));