Commit 6ba51b7b authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Rob Herring (Arm)
Browse files

of/irq: Handle explicit interrupt parent



If an interrupt controller is used as a proxy, it may have an
"interrupt-parent" property, but lack "interrupts" and
"interrupts-extended" properties.  In that case, the "interrupt-parent"
property in the interrupt controller node is ignored, causing the
interrupt controller to fail to probe, and leading to system boot
failures or crashes.

Fix this by also considering an explicit "interrupt-parent" property in
the interrupt controller node itself.

Fixes: 1b1f04d8 ("of/irq: Ignore interrupt parent for nodes without interrupts")
Reported-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Closes: https://lore.kernel.org/20251118115037.1866871-1-m.szyprowski@samsung.com


Reported-by: default avatarMark Brown <broonie@kernel.org>
Closes: https://lore.kernel.org/b037f67a-b241-4689-9914-57ff578c1454@sirena.org.uk


Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Tested-by: default avatarMark Brown <broonie@kernel.org>
Link: https://patch.msgid.link/e89669c9b3a4fbac4a972ffadcbe00fddb365472.1763557994.git.geert+renesas@glider.be


Signed-off-by: default avatarRob Herring (Arm) <robh@kernel.org>
parent d8c8a575
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -595,6 +595,8 @@ void __init of_irq_init(const struct of_device_id *matches)
		desc->interrupt_parent = of_parse_phandle(np, "interrupts-extended", 0);
		if (!desc->interrupt_parent && of_property_present(np, "interrupts"))
			desc->interrupt_parent = of_irq_find_parent(np);
		else if (!desc->interrupt_parent)
			desc->interrupt_parent = of_parse_phandle(np, "interrupt-parent", 0);
		if (desc->interrupt_parent == np) {
			of_node_put(desc->interrupt_parent);
			desc->interrupt_parent = NULL;