From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Daniel Scally <djrscally@gmail.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Krzysztof Kozlowski <krzk@kernel.org>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-acpi@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v3 03/10] software node: allow referencing firmware nodes
Date: Fri, 31 Oct 2025 10:23:49 +0200 [thread overview]
Message-ID: <aQRyFSHWzccTPa3M@smile.fi.intel.com> (raw)
In-Reply-To: <CAMRc=MdP58d=o7ZL4bAdsaYwzrs6nJo3bhS7Jf1UkDNwPOnAsg@mail.gmail.com>
On Thu, Oct 30, 2025 at 04:17:48AM -0700, Bartosz Golaszewski wrote:
> On Thu, 30 Oct 2025 10:41:39 +0100, Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> said:
> > On Wed, Oct 29, 2025 at 01:28:37PM +0100, Bartosz Golaszewski wrote:
> >>
> >> At the moment software nodes can only reference other software nodes.
> >> This is a limitation for devices created, for instance, on the auxiliary
> >> bus with a dynamic software node attached which cannot reference devices
> >> the firmware node of which is "real" (as an OF node or otherwise).
> >>
> >> Make it possible for a software node to reference all firmware nodes in
> >> addition to static software nodes. To that end: add a second pointer to
> >> struct software_node_ref_args of type struct fwnode_handle. The core
> >> swnode code will first check the swnode pointer and if it's NULL, it
> >> will assume the fwnode pointer should be set. Rework the helper macros
> >> and deprecate the existing ones whose names don't indicate the reference
> >> type.
> >>
> >> Software node graphs remain the same, as in: the remote endpoints still
> >> have to be software nodes.
> >
> > ...
> >
> >> -#define SOFTWARE_NODE_REFERENCE(_ref_, ...) \
> >> +#define __SOFTWARE_NODE_REF(_ref, _node, ...) \
> >> (const struct software_node_ref_args) { \
> >> - .node = _ref_, \
> >> + ._node = _ref, \
> >> .nargs = COUNT_ARGS(__VA_ARGS__), \
> >> .args = { __VA_ARGS__ }, \
> >> }
> >
> > Okay, looking at this again I think we don't need a new parameter.
> > We may check the type of _ref_
> > (actually why are the macro parameters got renamed here and elsewhere?)
> > and assign the correct one accordingly. I think this is what _Generic()
> > is good for.
> >
>
> Oh, that's neat, I would love to use _Generic() here but I honest to god have
> no idea how to make it work. I tried something like:
>
> #define __SOFTWARE_NODE_REF(_ref, ...) \
> _Generic(_ref, \
> const struct software_node *: \
> (const struct software_node_ref_args) { \
> .swnode = _ref, \
> .nargs = COUNT_ARGS(__VA_ARGS__), \
> .args = { __VA_ARGS__ }, \
> }, \
> struct fwnode_handle *: \
> (const struct software_node_ref_args) { \
> .fwnode = _ref, \
> .nargs = COUNT_ARGS(__VA_ARGS__), \
> .args = { __VA_ARGS__ }, \
> } \
> )
>
>
> But this fails like this:
>
> In file included from ./include/linux/acpi.h:16,
> from drivers/reset/core.c:8:
> drivers/reset/core.c: In function ‘__reset_add_reset_gpio_device’:
> drivers/reset/core.c:958:52: error: initialization of ‘const struct
> software_node *’ from incompatible pointer type ‘struct fwnode_handle
> *’ [-Wincompatible-pointer-types]
> 958 | parent->fwnode,
> | ^~~~~~
> ./include/linux/property.h:374:35: note: in definition of macro
> ‘__SOFTWARE_NODE_REF’
> 374 | .swnode = _ref, \
>
> So the right branch is not selected. How exactly would you use it here?
I believe this is an easy task.
But first of all, your series doesn't compile AFAICS:
drivers/reset/core.c:981:6: error: variable 'ret' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
981 | if (IS_ERR(rgpio_dev->swnode))
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/reset/core.c:1001:9: note: uninitialized use occurs here
1001 | return ret;
| ^~~
drivers/reset/core.c:981:2: note: remove the 'if' if its condition is always false
981 | if (IS_ERR(rgpio_dev->swnode))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
982 | goto err_put_of_node;
| ~~~~~~~~~~~~~~~~~~~~
drivers/reset/core.c:905:13: note: initialize the variable 'ret' to silence this warning
905 | int id, ret, lflags;
| ^
| = 0
1 error generated.
So, but to the topic
I have applied this and get the only error as per above
(const struct software_node_ref_args) { \
- ._node = _ref, \
+ .swnode = _Generic(_ref, const struct software_node *: _ref, default: NULL), \
+ .fwnode = _Generic(_ref, struct fwnode_handle *: _ref, default: NULL), \
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-10-31 8:24 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-29 12:28 [PATCH v3 00/10] reset: rework reset-gpios handling Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 01/10] software node: read the reference args via the fwnode API Bartosz Golaszewski
2025-10-30 9:33 ` Andy Shevchenko
2025-10-29 12:28 ` [PATCH v3 02/10] software node: increase the reference of the swnode by its fwnode Bartosz Golaszewski
2025-10-30 9:34 ` Andy Shevchenko
2025-10-30 10:33 ` Bartosz Golaszewski
2025-10-31 8:30 ` Andy Shevchenko
2025-10-31 9:03 ` Bartosz Golaszewski
2025-10-31 9:44 ` Andy Shevchenko
2025-10-31 10:27 ` Bartosz Golaszewski
2025-10-31 12:31 ` Andy Shevchenko
2025-10-29 12:28 ` [PATCH v3 03/10] software node: allow referencing firmware nodes Bartosz Golaszewski
2025-10-29 12:51 ` Philipp Zabel
2025-10-29 12:55 ` Bartosz Golaszewski
2025-10-29 13:16 ` Philipp Zabel
2025-10-30 9:41 ` Andy Shevchenko
2025-10-30 11:17 ` Bartosz Golaszewski
2025-10-31 8:23 ` Andy Shevchenko [this message]
2025-10-31 9:00 ` Bartosz Golaszewski
2025-10-31 9:46 ` Andy Shevchenko
2025-10-29 12:28 ` [PATCH v3 04/10] gpio: swnode: don't use the swnode's name as the key for GPIO lookup Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 05/10] gpio: swnode: allow referencing GPIO chips by firmware nodes Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 06/10] gpio: swnode: update the property definitions Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 07/10] reset: order includes alphabetically in reset/core.c Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 08/10] reset: make the provider of reset-gpios the parent of the reset device Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 09/10] reset: gpio: convert the driver to using the auxiliary bus Bartosz Golaszewski
2025-10-29 12:28 ` [PATCH v3 10/10] reset: gpio: use software nodes to setup the GPIO lookup Bartosz Golaszewski
2025-10-29 13:16 ` [PATCH v3 00/10] reset: rework reset-gpios handling Philipp Zabel
2025-10-29 13:19 ` Bartosz Golaszewski
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=aQRyFSHWzccTPa3M@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=bartosz.golaszewski@linaro.org \
--cc=brgl@bgdev.pl \
--cc=dakr@kernel.org \
--cc=djrscally@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=krzk@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rafael@kernel.org \
--cc=sakari.ailus@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.