[PATCH v3 1/9] firmware: arm_scmi: Set fwnode for the generated SCMI platform device
Sudeep Holla
sudeep.holla at kernel.org
Wed Sep 2 00:51:10 PDT 2026
On Mon, Aug 24, 2026 at 09:51:33AM -0700, Jonathan Cameron wrote:
> On Thu, 13 Aug 2026 12:32:56 +0100
> Sudeep Holla <sudeep.holla at kernel.org> wrote:
>
> > Add a call to device_set_node() in the SCMI probe helper to associate
> > generated SCMI platform device with the firmware node of its supplier
> > transport device.
> >
> > This complements device_set_of_node_from_dev() and ensures that
> > firmware node information is propagated correctly for both Device Tree
> > and non-DT (e.g. ACPI) based systems.
>
> Hi Sudeep,
>
Hi Jonathan,
Thanks for all the reviews. I was away for a while and started to look at
addressing these now.
> When you say 'complement' I'd like to see a little more. The guts
> of both calls includes setting dev->ofnode() adn the extra bit
> in device_set_of_node_from_dev() is about ensuring we drop existing
> node reference (there isn't one) and increment the reference for what
> is the parent of_node.
>
Yes I agree. At the time, when I hacked this up, I was supposed to take
a look at it again which I never did.
> I may be wrong, but I think that is unnecessary and if I'm wrong I'd
> like to see more info here on why it is needed.
>
No your concerns are valid. For reference-counted non-OF fwnodes like ACPI or
software node, platform_device_release() drops the fwnode reference,
but device_set_node() does not acquire one.
> Also, if this is commonly needed why doesn't device_set_node() include
> that dance?
>
I think there are new helpers added recently in the tree, thinking of using
then. See below.
> Unless I fumbled the command, a grep suggests there are no instances
> in tree of these both being called near each other.
>
I did that too before adding but somehow kept it for future investigation.
> Jonathan
>
> >
> > Signed-off-by: Sudeep Holla <sudeep.holla at kernel.org>
> > ---
> > drivers/firmware/arm_scmi/common.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
> > index fe8c22cfb9f7..cc7d11c3c1f3 100644
> > --- a/drivers/firmware/arm_scmi/common.h
> > +++ b/drivers/firmware/arm_scmi/common.h
> > @@ -650,6 +650,7 @@ static int __tag##_probe(struct platform_device *pdev) \
> > } \
> > \
> > device_set_of_node_from_dev(&spdev->dev, dev); \
> > + device_set_node(&spdev->dev, dev_fwnode(dev)); \
How about something like this instead of above 2 lines:
if (is_of_node(dev_fwnode(dev)))
platform_device_set_of_node_from_dev(spdev, dev);
else
platform_device_set_fwnode(spdev, dev_fwnode(dev));
--
Regards,
Sudeep
More information about the linux-arm-kernel
mailing list