Linux kernel -stable discussions
 help / color / mirror / Atom feed
* [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps
@ 2026-09-10 14:16 Ernest Van Hoecke
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 14:16 UTC (permalink / raw)
  To: Rob Herring, Saravana Kannan
  Cc: Miquel Raynal (Schneider Electric), Frank Li, Kieran Bingham,
	Pengutronix Kernel Team, Stephen Boyd, Brian Masney,
	Linus Walleij, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

This series fixes an fw_devlink supplier-resolution problem reported by
Leonardo Costa while using a Devicetree nexus to describe GPIO and PWM
resources routed through an LVDS connector. Consumers referencing the
nexus could remain deferred because fw_devlink linked them to the nexus
rather than to the providers selected by gpio-map and pwm-map. [1]

GPIO, PWM and clock consumer APIs use of_parse_phandle_with_args_map()
to resolve specifiers through gpio-map, pwm-map and clock-map
properties. The corresponding fw_devlink parsers use direct phandle
parsing instead. Given a consumer which references a nexus, the consumer
API and fw_devlink therefore resolve the reference to different nodes:

  consumer API:  consumer -> nexus -> mapped provider
  fw_devlink:    consumer -> nexus

A nexus is a translation node rather than the resource provider and need
not have a driver. The link to it can consequently remain unresolved and
defer the consumer even though the mapped provider is available.

Make the fw_devlink GPIO, PWM and clock parsers use the same map-aware
resolver as their consumer APIs. The resolver also handles valid direct
references by returning the original provider when no map is present.
Use dedicated exact-name and suffix declaration macros to opt these
bindings into map-aware parsing without changing unrelated property
parsers. Retain GPIO's existing exclusions and compatibility handling.

The regression tests call the OF add_links operation and verify that a
mapped reference creates exactly one link to the final provider, not to
the nexus. They also cover valid direct references. The GPIO tests
exercise all property spellings recognized by fw_devlink, including the
deprecated singular and unprefixed forms.

Tested with:
  - The new CONFIG_OF_UNITTEST fw_devlink cases under QEMU/x86_64 all
    passed
  - W=1 builds on x86_64 and arm64, including the OF unittest data
  - Toradex Verdin iMX8M Plus hardware using a connector nexus for the
    display GPIO and PWM resources: the display probes successfully

[1] https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/

Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>

---
Changes in v2:
- Split the unit tests into per-resource follow-up commits
- Added clock nexus as well because the clock nexus series was merged:
  https://lore.kernel.org/all/20260807-schneider-v7-2-rc1-eip201-upstream-v5-0-8785f9531cf0@bootlin.com/
- Link to v1: https://lore.kernel.org/r/20260902-fw-devlink-nexus-ready-v1-0-68fe1996e78a@toradex.com

---
Ernest Van Hoecke (7):
      of: property: fw_devlink: Follow GPIO nexus maps
      of: property: fw_devlink: Report unsupported supplier linking
      of: unittest: Test fw_devlink with GPIO nexus maps
      of: property: fw_devlink: Follow PWM nexus maps
      of: unittest: Test fw_devlink with PWM nexus maps
      of: property: fw_devlink: Follow clock nexus maps
      of: unittest: Test fw_devlink with clock nexus maps

 drivers/of/property.c                       | 53 ++++++++++++++-----
 drivers/of/unittest-data/tests-phandle.dtsi | 63 +++++++++++++++++++++++
 drivers/of/unittest.c                       | 79 +++++++++++++++++++++++++++++
 3 files changed, 182 insertions(+), 13 deletions(-)
---
base-commit: 91b1b8d437abe0cd83210d8f257b785a63047aa9
change-id: 20260901-fw-devlink-nexus-ready-c859706b019d

Best regards,
-- 
Ernest Van Hoecke <ernest.vanhoecke@toradex.com>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO nexus maps
  2026-09-10 14:16 [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps Ernest Van Hoecke
@ 2026-09-10 14:16 ` Ernest Van Hoecke
  2026-09-11  7:51   ` Bartosz Golaszewski
                     ` (2 more replies)
  2026-09-10 14:16 ` [PATCH v2 4/7] of: property: fw_devlink: Follow PWM " Ernest Van Hoecke
  2026-10-13 12:09 ` [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock " Frieder Schrempf
  2 siblings, 3 replies; 9+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 14:16 UTC (permalink / raw)
  To: Rob Herring, Saravana Kannan
  Cc: Miquel Raynal (Schneider Electric), Frank Li, Kieran Bingham,
	Pengutronix Kernel Team, Stephen Boyd, Brian Masney,
	Linus Walleij, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>

GPIO consumers use of_parse_phandle_with_args_map() to resolve
specifiers through gpio-map properties. fw_devlink instead parses GPIO
properties as direct phandle references, so it records the nexus node as
the supplier rather than the mapped GPIO provider.

A nexus is a translation node, not the GPIO provider, and need not be
populated as a device. The resulting fwnode link can therefore remain
unresolved and indefinitely defer the consumer while
device_links_check_suppliers() waits for the nexus.

Use the map-aware parser for all supported GPIO property spellings. This
makes fw_devlink resolve the same provider as the GPIO consumer API.
Direct GPIO references continue to work because the map-aware parser
returns the original provider when no gpio-map property is present.

Fixes: 7f00be96f125 ("of: property: Add device link support for interrupt-parent, dmas and -gpio(s)")
Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
 drivers/of/property.c | 38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index 72cf12907de0..380df0861ab9 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -1311,6 +1311,19 @@ static struct device_node *parse_prop_cells(struct device_node *np,
 	return sup_args.np;
 }
 
+static struct device_node *parse_nexus_prop(struct device_node *np,
+					    const char *prop_name, int index,
+					    const char *stem_name)
+{
+	struct of_phandle_args sup_args;
+
+	if (of_parse_phandle_with_args_map(np, prop_name, stem_name, index,
+					   &sup_args))
+		return NULL;
+
+	return sup_args.np;
+}
+
 #define DEFINE_SIMPLE_PROP(fname, name, cells)				  \
 static struct device_node *parse_##fname(struct device_node *np,	  \
 					const char *prop_name, int index) \
@@ -1361,6 +1374,15 @@ static struct device_node *parse_##fname(struct device_node *np,	     \
 	return parse_suffix_prop_cells(np, prop_name, index, suffix, cells); \
 }
 
+#define DEFINE_SUFFIX_NEXUS_PROP(fname, suffix, stem)			     \
+static struct device_node *parse_##fname(struct device_node *np,	     \
+					const char *prop_name, int index)    \
+{									     \
+	if (!strends(prop_name, suffix))				     \
+		return NULL;						     \
+	return parse_nexus_prop(np, prop_name, index, stem);		     \
+}
+
 /**
  * struct supplier_bindings - Property parsing functions for suppliers
  *
@@ -1416,7 +1438,7 @@ DEFINE_SIMPLE_PROP(pses, "pses", "#pse-cells")
 DEFINE_SIMPLE_PROP(power_supplies, "power-supplies", NULL)
 DEFINE_SIMPLE_PROP(mmc_pwrseq, "mmc-pwrseq", NULL)
 DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
-DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
+DEFINE_SUFFIX_NEXUS_PROP(gpio, "-gpio", "gpio")
 
 static struct device_node *parse_pinctrl_n(struct device_node *np,
 					   const char *prop_name, int index)
@@ -1436,8 +1458,10 @@ static struct device_node *parse_gpios(struct device_node *np,
 	if (strends(prop_name, ",nr-gpios"))
 		return NULL;
 
-	return parse_suffix_prop_cells(np, prop_name, index, "-gpios",
-				       "#gpio-cells");
+	if (!strends(prop_name, "-gpios"))
+		return NULL;
+
+	return parse_nexus_prop(np, prop_name, index, "gpio");
 }
 
 static struct device_node *parse_iommu_maps(struct device_node *np,
@@ -1452,8 +1476,6 @@ static struct device_node *parse_iommu_maps(struct device_node *np,
 static struct device_node *parse_gpio_compat(struct device_node *np,
 					     const char *prop_name, int index)
 {
-	struct of_phandle_args sup_args;
-
 	if (strcmp(prop_name, "gpio") && strcmp(prop_name, "gpios"))
 		return NULL;
 
@@ -1464,11 +1486,7 @@ static struct device_node *parse_gpio_compat(struct device_node *np,
 	if (of_property_read_bool(np, "gpio-hog"))
 		return NULL;
 
-	if (of_parse_phandle_with_args(np, prop_name, "#gpio-cells", index,
-				       &sup_args))
-		return NULL;
-
-	return sup_args.np;
+	return parse_nexus_prop(np, prop_name, index, "gpio");
 }
 
 static struct device_node *parse_interrupts(struct device_node *np,

-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 4/7] of: property: fw_devlink: Follow PWM nexus maps
  2026-09-10 14:16 [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps Ernest Van Hoecke
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
@ 2026-09-10 14:16 ` Ernest Van Hoecke
  2026-09-16 17:52   ` Herve Codina
  2026-10-13 12:09 ` [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock " Frieder Schrempf
  2 siblings, 1 reply; 9+ messages in thread
From: Ernest Van Hoecke @ 2026-09-10 14:16 UTC (permalink / raw)
  To: Rob Herring, Saravana Kannan
  Cc: Miquel Raynal (Schneider Electric), Frank Li, Kieran Bingham,
	Pengutronix Kernel Team, Stephen Boyd, Brian Masney,
	Linus Walleij, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>

PWM consumers use of_parse_phandle_with_args_map() to resolve specifiers
through pwm-map properties. fw_devlink instead parses the pwms property
as a direct phandle reference, so it records the nexus node as the
supplier rather than the mapped PWM provider.

A nexus is a translation node, not the PWM provider, and need not be
populated as a device. The resulting fwnode link can therefore remain
unresolved and indefinitely defer the consumer while
device_links_check_suppliers() waits for the nexus.

Use the map-aware parser for pwms so fw_devlink resolves the same
provider as the PWM consumer API. Direct PWM references continue to work
because the map-aware parser returns the original provider when no
pwm-map property is present.

Fixes: e71e46a6f19c ("pwm: Add support for pwm nexus dt bindings")
Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
---
 drivers/of/property.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index eba7e9fe6c38..a9c51d639a2b 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -1331,6 +1331,15 @@ static struct device_node *parse_##fname(struct device_node *np,	  \
 	return parse_prop_cells(np, prop_name, index, name, cells);	  \
 }
 
+#define DEFINE_SIMPLE_NEXUS_PROP(fname, name, stem)			  \
+static struct device_node *parse_##fname(struct device_node *np,	  \
+					const char *prop_name, int index) \
+{									  \
+	if (strcmp(prop_name, name))					  \
+		return NULL;						  \
+	return parse_nexus_prop(np, prop_name, index, stem);		  \
+}
+
 /**
  * parse_suffix_prop_cells - Suffix property parsing function for suppliers
  *
@@ -1426,7 +1435,7 @@ DEFINE_SIMPLE_PROP(extcon, "extcon", NULL)
 DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", "#nvmem-cell-cells")
 DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells")
 DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL)
-DEFINE_SIMPLE_PROP(pwms, "pwms", "#pwm-cells")
+DEFINE_SIMPLE_NEXUS_PROP(pwms, "pwms", "pwm")
 DEFINE_SIMPLE_PROP(resets, "resets", "#reset-cells")
 DEFINE_SIMPLE_PROP(leds, "leds", NULL)
 DEFINE_SIMPLE_PROP(backlight, "backlight", NULL)

-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO nexus maps
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
@ 2026-09-11  7:51   ` Bartosz Golaszewski
  2026-09-16 17:14   ` Linus Walleij
  2026-09-16 17:43   ` Herve Codina
  2 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2026-09-11  7:51 UTC (permalink / raw)
  To: Ernest Van Hoecke
  Cc: Miquel Raynal (Schneider Electric), Frank Li, Kieran Bingham,
	Pengutronix Kernel Team, Stephen Boyd, Brian Masney,
	Linus Walleij, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable, Rob Herring,
	Saravana Kannan

On Thu, 10 Sep 2026 16:16:42 +0200, Ernest Van Hoecke
<ernestvanhoecke@gmail.com> said:
> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
>
> GPIO consumers use of_parse_phandle_with_args_map() to resolve
> specifiers through gpio-map properties. fw_devlink instead parses GPIO
> properties as direct phandle references, so it records the nexus node as
> the supplier rather than the mapped GPIO provider.
>
> A nexus is a translation node, not the GPIO provider, and need not be
> populated as a device. The resulting fwnode link can therefore remain
> unresolved and indefinitely defer the consumer while
> device_links_check_suppliers() waits for the nexus.
>
> Use the map-aware parser for all supported GPIO property spellings. This
> makes fw_devlink resolve the same provider as the GPIO consumer API.
> Direct GPIO references continue to work because the map-aware parser
> returns the original provider when no gpio-map property is present.
>
> Fixes: 7f00be96f125 ("of: property: Add device link support for interrupt-parent, dmas and -gpio(s)")
> Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
> Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
> Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---

Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO nexus maps
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
  2026-09-11  7:51   ` Bartosz Golaszewski
@ 2026-09-16 17:14   ` Linus Walleij
  2026-09-16 17:43   ` Herve Codina
  2 siblings, 0 replies; 9+ messages in thread
From: Linus Walleij @ 2026-09-16 17:14 UTC (permalink / raw)
  To: Ernest Van Hoecke
  Cc: Rob Herring, Saravana Kannan, Miquel Raynal (Schneider Electric),
	Frank Li, Kieran Bingham, Pengutronix Kernel Team, Stephen Boyd,
	Brian Masney, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

On Thu, Sep 10, 2026 at 4:16 PM Ernest Van Hoecke
<ernestvanhoecke@gmail.com> wrote:

> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
>
> GPIO consumers use of_parse_phandle_with_args_map() to resolve
> specifiers through gpio-map properties. fw_devlink instead parses GPIO
> properties as direct phandle references, so it records the nexus node as
> the supplier rather than the mapped GPIO provider.
>
> A nexus is a translation node, not the GPIO provider, and need not be
> populated as a device. The resulting fwnode link can therefore remain
> unresolved and indefinitely defer the consumer while
> device_links_check_suppliers() waits for the nexus.
>
> Use the map-aware parser for all supported GPIO property spellings. This
> makes fw_devlink resolve the same provider as the GPIO consumer API.
> Direct GPIO references continue to work because the map-aware parser
> returns the original provider when no gpio-map property is present.
>
> Fixes: 7f00be96f125 ("of: property: Add device link support for interrupt-parent, dmas and -gpio(s)")
> Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
> Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
> Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>

Reviewed-by: Linus Walleij <linusw@kernel.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO nexus maps
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
  2026-09-11  7:51   ` Bartosz Golaszewski
  2026-09-16 17:14   ` Linus Walleij
@ 2026-09-16 17:43   ` Herve Codina
  2 siblings, 0 replies; 9+ messages in thread
From: Herve Codina @ 2026-09-16 17:43 UTC (permalink / raw)
  To: Ernest Van Hoecke
  Cc: Rob Herring, Saravana Kannan, Miquel Raynal (Schneider Electric),
	Frank Li, Kieran Bingham, Pengutronix Kernel Team, Stephen Boyd,
	Brian Masney, Linus Walleij, Bartosz Golaszewski,
	Uwe Kleine-König, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

Hi Ernest,

On Thu, 10 Sep 2026 16:16:42 +0200
Ernest Van Hoecke <ernestvanhoecke@gmail.com> wrote:

> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> 
> GPIO consumers use of_parse_phandle_with_args_map() to resolve
> specifiers through gpio-map properties. fw_devlink instead parses GPIO
> properties as direct phandle references, so it records the nexus node as
> the supplier rather than the mapped GPIO provider.
> 
> A nexus is a translation node, not the GPIO provider, and need not be
> populated as a device. The resulting fwnode link can therefore remain
> unresolved and indefinitely defer the consumer while
> device_links_check_suppliers() waits for the nexus.
> 
> Use the map-aware parser for all supported GPIO property spellings. This
> makes fw_devlink resolve the same provider as the GPIO consumer API.
> Direct GPIO references continue to work because the map-aware parser
> returns the original provider when no gpio-map property is present.
> 
> Fixes: 7f00be96f125 ("of: property: Add device link support for interrupt-parent, dmas and -gpio(s)")
> Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
> Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
> Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---
>  drivers/of/property.c | 38 ++++++++++++++++++++++++++++----------
>  1 file changed, 28 insertions(+), 10 deletions(-)
> 

Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Best regards,
Hervé

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 4/7] of: property: fw_devlink: Follow PWM nexus maps
  2026-09-10 14:16 ` [PATCH v2 4/7] of: property: fw_devlink: Follow PWM " Ernest Van Hoecke
@ 2026-09-16 17:52   ` Herve Codina
  0 siblings, 0 replies; 9+ messages in thread
From: Herve Codina @ 2026-09-16 17:52 UTC (permalink / raw)
  To: Ernest Van Hoecke
  Cc: Rob Herring, Saravana Kannan, Miquel Raynal (Schneider Electric),
	Frank Li, Kieran Bingham, Pengutronix Kernel Team, Stephen Boyd,
	Brian Masney, Linus Walleij, Bartosz Golaszewski,
	Uwe Kleine-König, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

Hi Ernest,

On Thu, 10 Sep 2026 16:16:45 +0200
Ernest Van Hoecke <ernestvanhoecke@gmail.com> wrote:

> From: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> 
> PWM consumers use of_parse_phandle_with_args_map() to resolve specifiers
> through pwm-map properties. fw_devlink instead parses the pwms property
> as a direct phandle reference, so it records the nexus node as the
> supplier rather than the mapped PWM provider.
> 
> A nexus is a translation node, not the PWM provider, and need not be
> populated as a device. The resulting fwnode link can therefore remain
> unresolved and indefinitely defer the consumer while
> device_links_check_suppliers() waits for the nexus.
> 
> Use the map-aware parser for pwms so fw_devlink resolves the same
> provider as the PWM consumer API. Direct PWM references continue to work
> because the map-aware parser returns the original provider when no
> pwm-map property is present.
> 
> Fixes: e71e46a6f19c ("pwm: Add support for pwm nexus dt bindings")
> Reported-by: Leonardo Costa <leonardo.costa@toradex.com>
> Link: https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
> Tested-by: Leonardo Costa <leonardo.costa@toradex.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
> ---
>  drivers/of/property.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 

Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Best regards,
Hervé

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps
  2026-09-10 14:16 [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps Ernest Van Hoecke
  2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
  2026-09-10 14:16 ` [PATCH v2 4/7] of: property: fw_devlink: Follow PWM " Ernest Van Hoecke
@ 2026-10-13 12:09 ` Frieder Schrempf
  2026-10-13 12:49   ` Ernest Van Hoecke
  2 siblings, 1 reply; 9+ messages in thread
From: Frieder Schrempf @ 2026-10-13 12:09 UTC (permalink / raw)
  To: Ernest Van Hoecke, Rob Herring, Saravana Kannan
  Cc: Miquel Raynal (Schneider Electric), Frank Li, Kieran Bingham,
	Pengutronix Kernel Team, Stephen Boyd, Brian Masney,
	Linus Walleij, Bartosz Golaszewski, Uwe Kleine-König,
	Herve Codina, Greg Kroah-Hartman, Geert Uytterhoeven,
	Leonardo Costa, devicetree, linux-clk, linux-gpio, linux-pwm,
	linux-kernel, Ernest Van Hoecke, stable

Hi Ernest,

On 10.09.26 16:16, Ernest Van Hoecke wrote:
> This series fixes an fw_devlink supplier-resolution problem reported by
> Leonardo Costa while using a Devicetree nexus to describe GPIO and PWM
> resources routed through an LVDS connector. Consumers referencing the
> nexus could remain deferred because fw_devlink linked them to the nexus
> rather than to the providers selected by gpio-map and pwm-map. [1]
> 
> GPIO, PWM and clock consumer APIs use of_parse_phandle_with_args_map()
> to resolve specifiers through gpio-map, pwm-map and clock-map
> properties. The corresponding fw_devlink parsers use direct phandle
> parsing instead. Given a consumer which references a nexus, the consumer
> API and fw_devlink therefore resolve the reference to different nodes:
> 
>   consumer API:  consumer -> nexus -> mapped provider
>   fw_devlink:    consumer -> nexus
> 
> A nexus is a translation node rather than the resource provider and need
> not have a driver. The link to it can consequently remain unresolved and
> defer the consumer even though the mapped provider is available.
> 
> Make the fw_devlink GPIO, PWM and clock parsers use the same map-aware
> resolver as their consumer APIs. The resolver also handles valid direct
> references by returning the original provider when no map is present.
> Use dedicated exact-name and suffix declaration macros to opt these
> bindings into map-aware parsing without changing unrelated property
> parsers. Retain GPIO's existing exclusions and compatibility handling.
> 
> The regression tests call the OF add_links operation and verify that a
> mapped reference creates exactly one link to the final provider, not to
> the nexus. They also cover valid direct references. The GPIO tests
> exercise all property spellings recognized by fw_devlink, including the
> deprecated singular and unprefixed forms.
> 
> Tested with:
>   - The new CONFIG_OF_UNITTEST fw_devlink cases under QEMU/x86_64 all
>     passed
>   - W=1 builds on x86_64 and arm64, including the OF unittest data
>   - Toradex Verdin iMX8M Plus hardware using a connector nexus for the
>     display GPIO and PWM resources: the display probes successfully
> 
> [1] https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
> 
> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
What is the status of this? Can you send a follow-up?

Frank is asking me to use nexus connector nodes and it looks like I will
run into this issue.

Thanks
Frieder

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps
  2026-10-13 12:09 ` [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock " Frieder Schrempf
@ 2026-10-13 12:49   ` Ernest Van Hoecke
  0 siblings, 0 replies; 9+ messages in thread
From: Ernest Van Hoecke @ 2026-10-13 12:49 UTC (permalink / raw)
  To: Frieder Schrempf
  Cc: Rob Herring, Saravana Kannan, Miquel Raynal (Schneider Electric),
	Frank Li, Kieran Bingham, Pengutronix Kernel Team, Stephen Boyd,
	Brian Masney, Linus Walleij, Bartosz Golaszewski,
	Uwe Kleine-König, Herve Codina, Greg Kroah-Hartman,
	Geert Uytterhoeven, Leonardo Costa, devicetree, linux-clk,
	linux-gpio, linux-pwm, linux-kernel, Ernest Van Hoecke, stable

On Tue, Oct 13, 2026 at 02:09:37PM +0200, Frieder Schrempf wrote:
> Hi Ernest,
> 
> On 10.09.26 16:16, Ernest Van Hoecke wrote:
> > [...]
> What is the status of this? Can you send a follow-up?
> 
> Frank is asking me to use nexus connector nodes and it looks like I will
> run into this issue.
> 
> Thanks
> Frieder

Hi Frieder,

I'll be sending a follow up very soon and address all the valuable
feedback I got here. Thanks for your interest!

Apologies for the delay, it's been quite busy here, but I also had some
nice chats about the topic at ELC 2026 last week so I'll follow up soon.

Kind regards,
Ernest

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-10-13 12:49 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-10 14:16 [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps Ernest Van Hoecke
2026-09-10 14:16 ` [PATCH v2 1/7] of: property: fw_devlink: Follow GPIO " Ernest Van Hoecke
2026-09-11  7:51   ` Bartosz Golaszewski
2026-09-16 17:14   ` Linus Walleij
2026-09-16 17:43   ` Herve Codina
2026-09-10 14:16 ` [PATCH v2 4/7] of: property: fw_devlink: Follow PWM " Ernest Van Hoecke
2026-09-16 17:52   ` Herve Codina
2026-10-13 12:09 ` [PATCH v2 0/7] of: property: Make fw_devlink follow GPIO, PWM and clock " Frieder Schrempf
2026-10-13 12:49   ` Ernest Van Hoecke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox