[PATCH] of/irq: Handle explicit interrupt parent

Geert Uytterhoeven posted 1 patch 1 week, 5 days ago
drivers/of/irq.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] of/irq: Handle explicit interrupt parent
Posted by Geert Uytterhoeven 1 week, 5 days ago
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
Re: [PATCH] of/irq: Handle explicit interrupt parent
Posted by Rob Herring (Arm) 1 week, 5 days ago
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!
Re: [PATCH] of/irq: Handle explicit interrupt parent
Posted by Marek Szyprowski 1 week, 5 days ago
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
Re: [PATCH] of/irq: Handle explicit interrupt parent
Posted by Mark Brown 1 week, 5 days ago
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>