From: Sudeep Holla <sudeep.holla@kernel.org>
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Saravana Kannan <saravanak@kernel.org>,
Hans de Goede <johannes.goede@oss.qualcomm.com>,
driver-core@lists.linux.dev, linux-kernel@vger.kernel.org,
imx@lists.linux.dev, Peng Fan <peng.fan@nxp.com>,
stable@vger.kernel.org
Subject: Re: [PATCH] driver core: hand off fwnode ownership when shared fwnode owner is rejected
Date: Mon, 28 Sep 2026 13:09:08 +0100 [thread overview]
Message-ID: <20260928-conscious-spectral-manul-19bc10@sudeepholla> (raw)
In-Reply-To: <20260928-driver-core-v1-1-0846bb8e0f32@nxp.com>
On Mon, Sep 28, 2026 at 07:49:01PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> When multiple devices share the same fwnode (e.g. the SCMI bus creates
> both "pinctrl" and "pinctrl-imx" devices for SCMI_PROTOCOL_PINCTRL), only
> the first device registered becomes the fwnode owner (fwnode->dev, set in
This has been rejected in the past. Apart from the trigger in -next,
anything else has changed ?
> device_add()). If that owner never binds -- for example its driver returns
> -ENODEV because it is blocklisted on this SoC, or because its driver is
> not compiled in at all -- then driver_bound() is never called for it, so
> fwnode_links_purge_suppliers() and fw_devlink_pickup_dangling_consumers()
> are never run for the fwnode. The child fwnode supplier links (pin group
> nodes such as lpi2c3grp, uart5grp, ...) stay unsatisfied and every
> consumer of those child nodes defers probe forever.
>
> On i.MX95 this manifests as a complete boot failure: the generic "pinctrl"
> SCMI device claims fwnode ownership but its driver returns -ENODEV, while
> the vendor "pinctrl-imx" device binds successfully. Because
> dev->fwnode->dev still points at the rejected "pinctrl" device,
> driver_bound() of "pinctrl-imx" skips the supplier purge and dangling
> consumer pickup, so all I2C buses, SPI, UART, MMC, USB and PCIe
> controllers wait forever for their pinctrl suppliers.
>
> Fix this in two places:
>
> 1. In really_probe() failure path: when the driver definitively rejects
> a device (-ENODEV / -ENXIO), fw_devlink_release_shared_fwnode() is
> called. If the rejected device is the fwnode owner, it either
> transfers ownership to an already-bound sibling (and runs the
> purge/pickup on its behalf) or clears ownership so the next sibling
> to bind can re-acquire it.
>
> 2. In device_links_driver_bound(): re-acquire the fwnode when it is
> unowned (!fwnode->dev) or when the current owner has no driver at
> all (!fwnode->dev->driver, meaning the driver was never compiled in
> or loaded as a module). This covers the case where probe rejection
> never happens because no driver ever matches.
>
> fwnode->dev is not serialized by a lock; instead every writer only ever
> touches a fwnode->dev it already owns (== dev, as device_del() does when
> it clears ownership) or one that is currently unowned (== NULL, as
> device_add() does when it claims ownership). This patch follows the same
> discipline: fw_devlink_release_shared_fwnode() only writes fwnode->dev
> when this device is the current owner; device_links_driver_bound() only
> claims fwnode->dev when it is NULL or when the current owner has no
> driver (and therefore cannot be in the process of binding).
>
> Fixes: f9aa460672c9 ("driver core: Refactor fw_devlink feature")
> Cc: stable@vger.kernel.org
> Assisted-by: LLM
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> This issue is triggered by
> aac4e67d6eb9 ("firmware: arm_scmi: Always create devices for standard protocols")
> in linux-next next-20260925.
>
> But I think this is a fix to
> f9aa460672c9 ("driver core: Refactor fw_devlink feature")
>
Does dropping i.MX specials from list of devices solves the problem ?
I am more than happy to drop i.MX special in the code and let you
sort the pinmux mess you guys have created.
And also I remember you creating situation disabling cpufreq in the cmdline.
Will that be ever used on those i.MX platforms ?
I am not against the patch if others are OK.
--
Regards,
Sudeep
next prev parent reply other threads:[~2026-09-28 12:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-28 11:49 Peng Fan (OSS)
2026-09-28 12:09 ` Sudeep Holla [this message]
2026-09-29 1:47 ` Peng Fan
2026-09-29 8:35 ` Sudeep Holla
2026-09-29 15:56 ` Sudeep Holla
2026-09-30 7:06 ` Peng Fan
2026-09-30 8:24 ` Sudeep Holla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260928-conscious-spectral-manul-19bc10@sudeepholla \
--to=sudeep.holla@kernel.org \
--cc=dakr@kernel.org \
--cc=driver-core@lists.linux.dev \
--cc=gregkh@linuxfoundation.org \
--cc=imx@lists.linux.dev \
--cc=johannes.goede@oss.qualcomm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peng.fan@nxp.com \
--cc=peng.fan@oss.nxp.com \
--cc=rafael@kernel.org \
--cc=saravanak@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®