drivers/of/irq.c | 2 ++ 1 file changed, 2 insertions(+)
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: 1b1f04d8271e7ba7 ("of/irq: Ignore interrupt parent for nodes without interrupts")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Closes: https://lore.kernel.org/20251118115037.1866871-1-m.szyprowski@samsung.com
Reported-by: Mark Brown <broonie@kernel.org>
Closes: https://lore.kernel.org/b037f67a-b241-4689-9914-57ff578c1454@sirena.org.uk
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
drivers/of/irq.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index a68272db9879bedf..f374d8b212b8669c 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -685,6 +685,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;
--
2.43.0
On Wed, 19 Nov 2025 14:19:11 +0100, Geert Uytterhoeven wrote:
> 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: 1b1f04d8271e7ba7 ("of/irq: Ignore interrupt parent for nodes without interrupts")
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Closes: https://lore.kernel.org/20251118115037.1866871-1-m.szyprowski@samsung.com
> Reported-by: Mark Brown <broonie@kernel.org>
> Closes: https://lore.kernel.org/b037f67a-b241-4689-9914-57ff578c1454@sirena.org.uk
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> drivers/of/irq.c | 2 ++
> 1 file changed, 2 insertions(+)
>
Applied, thanks!
On 19.11.2025 14:19, Geert Uytterhoeven wrote:
> 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: 1b1f04d8271e7ba7 ("of/irq: Ignore interrupt parent for nodes without interrupts")
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Closes: https://lore.kernel.org/20251118115037.1866871-1-m.szyprowski@samsung.com
> Reported-by: Mark Brown <broonie@kernel.org>
> Closes: https://lore.kernel.org/b037f67a-b241-4689-9914-57ff578c1454@sirena.org.uk
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
This fixes the issue observed on 32bit Samsung Exynos based boards.
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/of/irq.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/of/irq.c b/drivers/of/irq.c
> index a68272db9879bedf..f374d8b212b8669c 100644
> --- a/drivers/of/irq.c
> +++ b/drivers/of/irq.c
> @@ -685,6 +685,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;
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
On Wed, Nov 19, 2025 at 02:19:11PM +0100, Geert Uytterhoeven wrote: > 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. This fixes x15: Tested-by: Mark Brown <broonie@kernel.org>
© 2016 - 2025 Red Hat, Inc.