mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
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:
parent
aa079dbf4c
commit
79b115c2a2
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user