Re: [PATCH v3 0/8] of: property: Make fw_devlink follow GPIO, PWM and clock nexus maps

From: Ernest Van Hoecke

Date: Thu Oct 29 2026 - 11:49:24 EST


On Sun, Oct 25, 2026 at 09:59:36PM -0700, Saravana Kannan wrote:
> On Tue, Oct 20, 2026 at 6:00 AM Ernest Van Hoecke
> <ernestvanhoecke@xxxxxxxxx> 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.
> >
> > Since fw_devlink runs the resolver for every consumer when its device is
> > created, patch 1 first fixes a stack buffer overflow in the resolver
> > when the provider referenced by the consumer has more than
> > MAX_PHANDLE_ARGS cells.
> >
> > The regression tests call the OF add_links operation and verify that a
> > mapped reference creates exactly one link to the provider selected by
> > the referenced map entry, 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.
> >
> > The clock patch fixes aacc54c67869 ("clk: Add support for clock nexus dt
> > bindings"), which has been in clk-next and linux-next with the same hash
> > since next-20260907. There is no build-time dependency on it, but the
> > clock patch should not reach mainline before it. The series applies to
> > next-20261014.
> >
> > Tested with:
> > - The CONFIG_OF_UNITTEST cases under QEMU/x86_64: all passed. With the
> > fw_devlink parser changes reverted, exactly the six mapped consumer
> > cases fail.
> > - W=1 builds of each patch on arm64, including the OF unittest data
> > - Toradex Verdin iMX8M Plus hardware using a connector nexus for the
> > display GPIO and PWM resources (v2, same fw_devlink changes): the
> > display probes successfully
> >
> > [1] https://lore.kernel.org/all/juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf/
>
> Thanks for the patch series to keep this updated! Took a close look at
> all the patches and they mostly look good.
>
> Left some minor comments. Should be easy to address/clarify.
>
> When they are addressed:
> Reviewed-by: Saravana Kannan <saravanak@xxxxxxxxxx>
>
> Thanks,
> Saravana
>

Hi Saravana,

Thanks for the review. I will address your comments in v4 which will
follow in December as I'll be away in November.

Thanks,
Ernest

> >
> > Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@xxxxxxxxxxx>
> >
> > ---
> > Changes in v3:
> > - New patch 1 fixing a stack overflow in
> > of_parse_phandle_with_args_map() (Uwe)
> > - Tests: route map entries to different providers and reference a
> > non-first entry with non-zero cells (Herve)
> > - Collected R-b tags
> > - Rebased onto next-20261014
> > - Link to v2: https://lore.kernel.org/r/20260910-fw-devlink-nexus-ready-v2-0-17ac82dbe226@xxxxxxxxxxx
> >
> > 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@xxxxxxxxxxx/
> > - Link to v1: https://lore.kernel.org/r/20260902-fw-devlink-nexus-ready-v1-0-68fe1996e78a@xxxxxxxxxxx
> >
> > ---
> > Ernest Van Hoecke (8):
> > of: base: Fix stack overflow in of_parse_phandle_with_args_map()
> > 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/base.c | 5 ++
> > drivers/of/property.c | 53 ++++++++++++++-----
> > drivers/of/unittest-data/tests-phandle.dtsi | 81 +++++++++++++++++++++++++++++
> > drivers/of/unittest.c | 79 ++++++++++++++++++++++++++++
> > 4 files changed, 205 insertions(+), 13 deletions(-)
> > ---
> > base-commit: d419d682257d813f6cb7a28e42b35d0edf4ad038
> > change-id: 20260901-fw-devlink-nexus-ready-c859706b019d
> >
> > Best regards,
> > --
> > Ernest Van Hoecke <ernest.vanhoecke@xxxxxxxxxxx>
> >