| Message ID | 20251006-reset-gpios-swnodes-v1-0-6d3325b9af42@linaro.org |
|---|---|
| Headers | show |
| Series | reset: rework reset-gpios handling | expand |
On Mon, Oct 6, 2025 at 3:00 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > Machine GPIO lookup is a nice, if a bit clunky, mechanism when we have > absolutely no idea what the GPIO provider is or when it will be created. > However in the case of reset-gpios, we not only know if the chip is > there - we also already hold a reference to its firmware node. > > In this case using fwnode lookup makes more sense. However, since the > reset provider is created dynamically, it doesn't have a corresponding > firmware node (in this case: an OF-node). That leaves us with software > nodes which currently cannot reference other implementations of the > fwnode API, only other struct software_node objects. This is a needless > limitation as it's imaginable that a dynamic auxiliary device (with a > software node attached) would want to reference a real device with an OF > node. > > This series does three things: extends the software node implementation, > allowing its properties to reference not only static software nodes but > also existing firmware nodes, updates the GPIO property interface to use > the reworked swnode macros and finally makes the reset-gpio code the > first user by converting the GPIO lookup from machine to swnode. > > Another user of the software node changes in the future could become the > shared GPIO modules that's in the works in parallel[1]. > > Merging strategy: the series is logically split into three parts: driver > core, GPIO and reset respectively. However there are build-time > dependencies between all three parts so I suggest the reset tree as the > right one to take it upstream with an immutable branch provided to > driver core and GPIO. > > [1] https://lore.kernel.org/all/20250924-gpio-shared-v1-0-775e7efeb1a3@linaro.org/ > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > --- Are there any comments on the software node part before I respin it with Philipp's comments addressed? Bartosz
Machine GPIO lookup is a nice, if a bit clunky, mechanism when we have absolutely no idea what the GPIO provider is or when it will be created. However in the case of reset-gpios, we not only know if the chip is there - we also already hold a reference to its firmware node. In this case using fwnode lookup makes more sense. However, since the reset provider is created dynamically, it doesn't have a corresponding firmware node (in this case: an OF-node). That leaves us with software nodes which currently cannot reference other implementations of the fwnode API, only other struct software_node objects. This is a needless limitation as it's imaginable that a dynamic auxiliary device (with a software node attached) would want to reference a real device with an OF node. This series does three things: extends the software node implementation, allowing its properties to reference not only static software nodes but also existing firmware nodes, updates the GPIO property interface to use the reworked swnode macros and finally makes the reset-gpio code the first user by converting the GPIO lookup from machine to swnode. Another user of the software node changes in the future could become the shared GPIO modules that's in the works in parallel[1]. Merging strategy: the series is logically split into three parts: driver core, GPIO and reset respectively. However there are build-time dependencies between all three parts so I suggest the reset tree as the right one to take it upstream with an immutable branch provided to driver core and GPIO. [1] https://lore.kernel.org/all/20250924-gpio-shared-v1-0-775e7efeb1a3@linaro.org/ Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> --- Bartosz Golaszewski (9): software node: read the reference args via the fwnode API software node: increase the reference of the swnode by its fwnode software node: allow referencing firmware nodes gpio: swnode: don't use the swnode's name as the key for GPIO lookup gpio: swnode: update the property definitions reset: order includes alphabetically in reset/core.c reset: make the provider of reset-gpios the parent of the reset device reset: gpio: convert the driver to using the auxiliary bus reset: gpio: use software nodes to setup the GPIO lookup drivers/base/swnode.c | 28 +++++--- drivers/gpio/gpiolib-swnode.c | 16 ++--- drivers/reset/Kconfig | 1 + drivers/reset/core.c | 151 ++++++++++++++++++++++++------------------ drivers/reset/reset-gpio.c | 19 +++--- include/linux/gpio/property.h | 5 +- include/linux/property.h | 51 ++++++++++++-- 7 files changed, 174 insertions(+), 97 deletions(-) --- base-commit: 097d5ce7a680da489516958e943910fa962e574a change-id: 20250925-reset-gpios-swnodes-db553e67095b Best regards,