* [PATCH 0/2] irqchip/ls-extirq: various fixes
@ 2026-02-24 11:36 Ioana Ciornei
2026-02-24 11:36 ` [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" Ioana Ciornei
2026-02-24 11:36 ` [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check Ioana Ciornei
0 siblings, 2 replies; 8+ messages in thread
From: Ioana Ciornei @ 2026-02-24 11:36 UTC (permalink / raw)
To: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, herve.codina,
Alexander Stein, linux-kernel
The first patch in this set reverts commit 3ac6dfe3d7a2
("irqchip/ls-extirq: Use for_each_of_imap_item iterator") which
essentially broke the ls-extirq functionality by using the
for_each_of_imap_item() iterator on a non-conforming interrupt-map
property.
The second patch fixes the devm_of_iomap() error check by using IS_ERR
instead of just checking its return value.
Ioana Ciornei (2):
Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator"
irqchip/ls-extirq: fix devm_of_iomap() error check
drivers/irqchip/irq-ls-extirq.c | 52 +++++++++++++++++++++------------
1 file changed, 33 insertions(+), 19 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" 2026-02-24 11:36 [PATCH 0/2] irqchip/ls-extirq: various fixes Ioana Ciornei @ 2026-02-24 11:36 ` Ioana Ciornei 2026-02-24 12:47 ` Herve Codina 2026-02-24 17:36 ` [tip: irq/urgent] " tip-bot2 for Ioana Ciornei 2026-02-24 11:36 ` [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check Ioana Ciornei 1 sibling, 2 replies; 8+ messages in thread From: Ioana Ciornei @ 2026-02-24 11:36 UTC (permalink / raw) To: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, herve.codina, Alexander Stein, linux-kernel This reverts commit 3ac6dfe3d7a2396602b67667249b146504dfbd2a. The ls-extirq uses interrupt-map but it's a non-standard use documented in fsl,ls-extirq.yaml: # The driver(drivers/irqchip/irq-ls-extirq.c) have not use standard DT # function to parser interrupt-map. So it doesn't consider '#address-size' # in parent interrupt controller, such as GIC. # # When dt-binding verify interrupt-map, item data matrix is spitted at # incorrect position. Remove interrupt-map restriction because it always # wrong. This means that by using for_each_of_imap_item and the underlying of_irq_parse_imap_parent() on its interrupt-map property will effectively break its functionality Revert the patch making use of for_each_of_imap_item() in ls-extirq. Fixes: 3ac6dfe3d7a2 ("irqchip/ls-extirq: Use for_each_of_imap_item iterator") Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> --- drivers/irqchip/irq-ls-extirq.c | 47 +++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/irqchip/irq-ls-extirq.c b/drivers/irqchip/irq-ls-extirq.c index a7e9c3885b09..96f9c20621cf 100644 --- a/drivers/irqchip/irq-ls-extirq.c +++ b/drivers/irqchip/irq-ls-extirq.c @@ -125,32 +125,45 @@ static const struct irq_domain_ops extirq_domain_ops = { static int ls_extirq_parse_map(struct ls_extirq_data *priv, struct device_node *node) { - struct of_imap_parser imap_parser; - struct of_imap_item imap_item; + const __be32 *map; + u32 mapsize; int ret; - ret = of_imap_parser_init(&imap_parser, node, &imap_item); - if (ret) - return ret; + map = of_get_property(node, "interrupt-map", &mapsize); + if (!map) + return -ENOENT; + if (mapsize % sizeof(*map)) + return -EINVAL; + mapsize /= sizeof(*map); - for_each_of_imap_item(&imap_parser, &imap_item) { + while (mapsize) { struct device_node *ipar; - u32 hwirq; - int i; + u32 hwirq, intsize, j; - hwirq = imap_item.child_imap[0]; - if (hwirq >= MAXIRQ) { - of_node_put(imap_item.parent_args.np); + if (mapsize < 3) + return -EINVAL; + hwirq = be32_to_cpup(map); + if (hwirq >= MAXIRQ) return -EINVAL; - } priv->nirq = max(priv->nirq, hwirq + 1); - ipar = of_node_get(imap_item.parent_args.np); - priv->map[hwirq].fwnode = of_fwnode_handle(ipar); + ipar = of_find_node_by_phandle(be32_to_cpup(map + 2)); + map += 3; + mapsize -= 3; + if (!ipar) + return -EINVAL; + priv->map[hwirq].fwnode = &ipar->fwnode; + ret = of_property_read_u32(ipar, "#interrupt-cells", &intsize); + if (ret) + return ret; + + if (intsize > mapsize) + return -EINVAL; - priv->map[hwirq].param_count = imap_item.parent_args.args_count; - for (i = 0; i < priv->map[hwirq].param_count; i++) - priv->map[hwirq].param[i] = imap_item.parent_args.args[i]; + priv->map[hwirq].param_count = intsize; + for (j = 0; j < intsize; ++j) + priv->map[hwirq].param[j] = be32_to_cpup(map++); + mapsize -= intsize; } return 0; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" 2026-02-24 11:36 ` [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" Ioana Ciornei @ 2026-02-24 12:47 ` Herve Codina 2026-02-24 12:53 ` Ioana Ciornei 2026-02-24 17:36 ` [tip: irq/urgent] " tip-bot2 for Ioana Ciornei 1 sibling, 1 reply; 8+ messages in thread From: Herve Codina @ 2026-02-24 12:47 UTC (permalink / raw) To: Ioana Ciornei Cc: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, Alexander Stein, linux-kernel Hi Ioana, On Tue, 24 Feb 2026 13:36:09 +0200 Ioana Ciornei <ioana.ciornei@nxp.com> wrote: > This reverts commit 3ac6dfe3d7a2396602b67667249b146504dfbd2a. > > The ls-extirq uses interrupt-map but it's a non-standard use documented > in fsl,ls-extirq.yaml: > > # The driver(drivers/irqchip/irq-ls-extirq.c) have not use standard DT > # function to parser interrupt-map. So it doesn't consider '#address-size' > # in parent interrupt controller, such as GIC. > # > # When dt-binding verify interrupt-map, item data matrix is spitted at > # incorrect position. Remove interrupt-map restriction because it always > # wrong. > > This means that by using for_each_of_imap_item and the underlying > of_irq_parse_imap_parent() on its interrupt-map property will > effectively break its functionality > > Revert the patch making use of for_each_of_imap_item() in ls-extirq. > > Fixes: 3ac6dfe3d7a2 ("irqchip/ls-extirq: Use for_each_of_imap_item iterator") > Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> > --- > drivers/irqchip/irq-ls-extirq.c | 47 +++++++++++++++++++++------------ > 1 file changed, 30 insertions(+), 17 deletions(-) Sorry for breaking it when I did 3ac6dfe3d7a2. I have missed this non-standard usage of interrupt-map. Acked-by: Herve Codina <herve.codina@bootlin.com> Best regards, Hervé ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" 2026-02-24 12:47 ` Herve Codina @ 2026-02-24 12:53 ` Ioana Ciornei 0 siblings, 0 replies; 8+ messages in thread From: Ioana Ciornei @ 2026-02-24 12:53 UTC (permalink / raw) To: Herve Codina Cc: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, Alexander Stein, linux-kernel On Tue, Feb 24, 2026 at 01:47:11PM +0100, Herve Codina wrote: > Hi Ioana, > > On Tue, 24 Feb 2026 13:36:09 +0200 > Ioana Ciornei <ioana.ciornei@nxp.com> wrote: > > > This reverts commit 3ac6dfe3d7a2396602b67667249b146504dfbd2a. > > > > The ls-extirq uses interrupt-map but it's a non-standard use documented > > in fsl,ls-extirq.yaml: > > > > # The driver(drivers/irqchip/irq-ls-extirq.c) have not use standard DT > > # function to parser interrupt-map. So it doesn't consider '#address-size' > > # in parent interrupt controller, such as GIC. > > # > > # When dt-binding verify interrupt-map, item data matrix is spitted at > > # incorrect position. Remove interrupt-map restriction because it always > > # wrong. > > > > This means that by using for_each_of_imap_item and the underlying > > of_irq_parse_imap_parent() on its interrupt-map property will > > effectively break its functionality > > > > Revert the patch making use of for_each_of_imap_item() in ls-extirq. > > > > Fixes: 3ac6dfe3d7a2 ("irqchip/ls-extirq: Use for_each_of_imap_item iterator") > > Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> > > --- > > drivers/irqchip/irq-ls-extirq.c | 47 +++++++++++++++++++++------------ > > 1 file changed, 30 insertions(+), 17 deletions(-) > > Sorry for breaking it when I did 3ac6dfe3d7a2. > I have missed this non-standard usage of interrupt-map. No worries. It's hard to spot. Ioana ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tip: irq/urgent] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" 2026-02-24 11:36 ` [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" Ioana Ciornei 2026-02-24 12:47 ` Herve Codina @ 2026-02-24 17:36 ` tip-bot2 for Ioana Ciornei 1 sibling, 0 replies; 8+ messages in thread From: tip-bot2 for Ioana Ciornei @ 2026-02-24 17:36 UTC (permalink / raw) To: linux-tip-commits Cc: Ioana Ciornei, Thomas Gleixner, Herve Codina, x86, linux-kernel, maz The following commit has been merged into the irq/urgent branch of tip: Commit-ID: e08f2adcf990b8cf272e90898401a9e481c1c667 Gitweb: https://git.kernel.org/tip/e08f2adcf990b8cf272e90898401a9e481c1c667 Author: Ioana Ciornei <ioana.ciornei@nxp.com> AuthorDate: Tue, 24 Feb 2026 13:36:09 +02:00 Committer: Thomas Gleixner <tglx@kernel.org> CommitterDate: Tue, 24 Feb 2026 18:35:48 +01:00 Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" This reverts commit 3ac6dfe3d7a2396602b67667249b146504dfbd2a. The ls-extirq uses interrupt-map but it's a non-standard use documented in fsl,ls-extirq.yaml: # The driver(drivers/irqchip/irq-ls-extirq.c) have not use standard DT # function to parser interrupt-map. So it doesn't consider '#address-size' # in parent interrupt controller, such as GIC. # # When dt-binding verify interrupt-map, item data matrix is spitted at # incorrect position. Remove interrupt-map restriction because it always # wrong. This means that by using for_each_of_imap_item and the underlying of_irq_parse_imap_parent() on its interrupt-map property will effectively break its functionality Revert the patch making use of for_each_of_imap_item() in ls-extirq. Fixes: 3ac6dfe3d7a2 ("irqchip/ls-extirq: Use for_each_of_imap_item iterator") Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Acked-by: Herve Codina <herve.codina@bootlin.com> Link: https://patch.msgid.link/20260224113610.1129022-2-ioana.ciornei@nxp.com --- drivers/irqchip/irq-ls-extirq.c | 47 ++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/irqchip/irq-ls-extirq.c b/drivers/irqchip/irq-ls-extirq.c index a7e9c38..96f9c20 100644 --- a/drivers/irqchip/irq-ls-extirq.c +++ b/drivers/irqchip/irq-ls-extirq.c @@ -125,32 +125,45 @@ static const struct irq_domain_ops extirq_domain_ops = { static int ls_extirq_parse_map(struct ls_extirq_data *priv, struct device_node *node) { - struct of_imap_parser imap_parser; - struct of_imap_item imap_item; + const __be32 *map; + u32 mapsize; int ret; - ret = of_imap_parser_init(&imap_parser, node, &imap_item); - if (ret) - return ret; + map = of_get_property(node, "interrupt-map", &mapsize); + if (!map) + return -ENOENT; + if (mapsize % sizeof(*map)) + return -EINVAL; + mapsize /= sizeof(*map); - for_each_of_imap_item(&imap_parser, &imap_item) { + while (mapsize) { struct device_node *ipar; - u32 hwirq; - int i; + u32 hwirq, intsize, j; - hwirq = imap_item.child_imap[0]; - if (hwirq >= MAXIRQ) { - of_node_put(imap_item.parent_args.np); + if (mapsize < 3) + return -EINVAL; + hwirq = be32_to_cpup(map); + if (hwirq >= MAXIRQ) return -EINVAL; - } priv->nirq = max(priv->nirq, hwirq + 1); - ipar = of_node_get(imap_item.parent_args.np); - priv->map[hwirq].fwnode = of_fwnode_handle(ipar); + ipar = of_find_node_by_phandle(be32_to_cpup(map + 2)); + map += 3; + mapsize -= 3; + if (!ipar) + return -EINVAL; + priv->map[hwirq].fwnode = &ipar->fwnode; + ret = of_property_read_u32(ipar, "#interrupt-cells", &intsize); + if (ret) + return ret; + + if (intsize > mapsize) + return -EINVAL; - priv->map[hwirq].param_count = imap_item.parent_args.args_count; - for (i = 0; i < priv->map[hwirq].param_count; i++) - priv->map[hwirq].param[i] = imap_item.parent_args.args[i]; + priv->map[hwirq].param_count = intsize; + for (j = 0; j < intsize; ++j) + priv->map[hwirq].param[j] = be32_to_cpup(map++); + mapsize -= intsize; } return 0; } ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check 2026-02-24 11:36 [PATCH 0/2] irqchip/ls-extirq: various fixes Ioana Ciornei 2026-02-24 11:36 ` [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" Ioana Ciornei @ 2026-02-24 11:36 ` Ioana Ciornei 2026-02-24 12:53 ` Herve Codina 2026-02-24 17:36 ` [tip: irq/urgent] irqchip/ls-extirq: Fix " tip-bot2 for Ioana Ciornei 1 sibling, 2 replies; 8+ messages in thread From: Ioana Ciornei @ 2026-02-24 11:36 UTC (permalink / raw) To: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, herve.codina, Alexander Stein, linux-kernel Cc: Dan Carpenter The devm_of_iomap() function returns an ERR_PTR() encoded error code on failure. Replace the incorrect check against NULL with IS_ERR(). Fixes: 05cd654829dd ("irqchip/ls-extirq: Convert to a platform driver to make it work again") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Closes: https://lore.kernel.org/all/aYXvfbfT6w0TMsXS@stanley.mountain/ Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> --- drivers/irqchip/irq-ls-extirq.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-ls-extirq.c b/drivers/irqchip/irq-ls-extirq.c index 96f9c20621cf..519a9d89f7f6 100644 --- a/drivers/irqchip/irq-ls-extirq.c +++ b/drivers/irqchip/irq-ls-extirq.c @@ -190,8 +190,9 @@ static int ls_extirq_probe(struct platform_device *pdev) return dev_err_probe(dev, -ENOMEM, "Failed to allocate memory\n"); priv->intpcr = devm_of_iomap(dev, node, 0, NULL); - if (!priv->intpcr) - return dev_err_probe(dev, -ENOMEM, "Cannot ioremap OF node %pOF\n", node); + if (IS_ERR(priv->intpcr)) + return dev_err_probe(dev, PTR_ERR(priv->intpcr), + "Cannot ioremap OF node %pOF\n", node); ret = ls_extirq_parse_map(priv, node); if (ret) -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check 2026-02-24 11:36 ` [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check Ioana Ciornei @ 2026-02-24 12:53 ` Herve Codina 2026-02-24 17:36 ` [tip: irq/urgent] irqchip/ls-extirq: Fix " tip-bot2 for Ioana Ciornei 1 sibling, 0 replies; 8+ messages in thread From: Herve Codina @ 2026-02-24 12:53 UTC (permalink / raw) To: Ioana Ciornei Cc: Thomas Gleixner, Linus Walleij, Geert Uytterhoeven, Alexander Stein, linux-kernel, Dan Carpenter Hi Ioana, On Tue, 24 Feb 2026 13:36:10 +0200 Ioana Ciornei <ioana.ciornei@nxp.com> wrote: > The devm_of_iomap() function returns an ERR_PTR() encoded error code on > failure. Replace the incorrect check against NULL with IS_ERR(). > > Fixes: 05cd654829dd ("irqchip/ls-extirq: Convert to a platform driver to make it work again") > Reported-by: Dan Carpenter <dan.carpenter@linaro.org> > Closes: https://lore.kernel.org/all/aYXvfbfT6w0TMsXS@stanley.mountain/ > Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Reviewed-by: Herve Codina <herve.codina@bootlin.com> Best regards, Hervé ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tip: irq/urgent] irqchip/ls-extirq: Fix devm_of_iomap() error check 2026-02-24 11:36 ` [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check Ioana Ciornei 2026-02-24 12:53 ` Herve Codina @ 2026-02-24 17:36 ` tip-bot2 for Ioana Ciornei 1 sibling, 0 replies; 8+ messages in thread From: tip-bot2 for Ioana Ciornei @ 2026-02-24 17:36 UTC (permalink / raw) To: linux-tip-commits Cc: Dan Carpenter, Ioana Ciornei, Thomas Gleixner, Herve Codina, x86, linux-kernel, maz The following commit has been merged into the irq/urgent branch of tip: Commit-ID: fe5669e363b129cde285bfb4d45abb72d1d77cfc Gitweb: https://git.kernel.org/tip/fe5669e363b129cde285bfb4d45abb72d1d77cfc Author: Ioana Ciornei <ioana.ciornei@nxp.com> AuthorDate: Tue, 24 Feb 2026 13:36:10 +02:00 Committer: Thomas Gleixner <tglx@kernel.org> CommitterDate: Tue, 24 Feb 2026 18:35:49 +01:00 irqchip/ls-extirq: Fix devm_of_iomap() error check The devm_of_iomap() function returns an ERR_PTR() encoded error code on failure. Replace the incorrect check against NULL with IS_ERR(). Fixes: 05cd654829dd ("irqchip/ls-extirq: Convert to a platform driver to make it work again") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Reviewed-by: Herve Codina <herve.codina@bootlin.com> Link: https://patch.msgid.link/20260224113610.1129022-3-ioana.ciornei@nxp.com Closes: https://lore.kernel.org/all/aYXvfbfT6w0TMsXS@stanley.mountain/ --- drivers/irqchip/irq-ls-extirq.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-ls-extirq.c b/drivers/irqchip/irq-ls-extirq.c index 96f9c20..d724fe8 100644 --- a/drivers/irqchip/irq-ls-extirq.c +++ b/drivers/irqchip/irq-ls-extirq.c @@ -190,8 +190,10 @@ static int ls_extirq_probe(struct platform_device *pdev) return dev_err_probe(dev, -ENOMEM, "Failed to allocate memory\n"); priv->intpcr = devm_of_iomap(dev, node, 0, NULL); - if (!priv->intpcr) - return dev_err_probe(dev, -ENOMEM, "Cannot ioremap OF node %pOF\n", node); + if (IS_ERR(priv->intpcr)) { + return dev_err_probe(dev, PTR_ERR(priv->intpcr), + "Cannot ioremap OF node %pOF\n", node); + } ret = ls_extirq_parse_map(priv, node); if (ret) ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-02-24 17:36 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-24 11:36 [PATCH 0/2] irqchip/ls-extirq: various fixes Ioana Ciornei 2026-02-24 11:36 ` [PATCH 1/2] Revert "irqchip/ls-extirq: Use for_each_of_imap_item iterator" Ioana Ciornei 2026-02-24 12:47 ` Herve Codina 2026-02-24 12:53 ` Ioana Ciornei 2026-02-24 17:36 ` [tip: irq/urgent] " tip-bot2 for Ioana Ciornei 2026-02-24 11:36 ` [PATCH 2/2] irqchip/ls-extirq: fix devm_of_iomap() error check Ioana Ciornei 2026-02-24 12:53 ` Herve Codina 2026-02-24 17:36 ` [tip: irq/urgent] irqchip/ls-extirq: Fix " tip-bot2 for Ioana Ciornei
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox