[PATCH v3 00/10] reset: rework reset-gpios handling

Bartosz Golaszewski
2025-10-29T12:28:50Z

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>
---
Changes in v3:
- Really fix the typo in commit message in patch 7/9
- Update the commit message in patch 3/9 after implementation changes
- Don't remove checking the refnode for NULL and returning -ENOENT
- Move lockdep assertion higher up in the reset code
- Simplify patch 4/9: don't change the logic of inspecting the gpio
device's software node
- Add new patch that still allows GPIO lookup from software nodes to
find chips associated with any firmware nodes
- Drop the comma in reset-gpio auxiliary ID
- Drop the no longer used type argument from software node reference
macros
- Link to v2: https://lore.kernel.org/r/20251022-reset-gpios-swnodes-v2-0-69088530291b@linaro.org

Changes in v2:
- Don't use a union for different pointer types in the software node
reference struct
- Use fwnode_property_read_u32() instead of
fwnode_property_read_u32_array() as we're only reading a single
integer
- Rename reset_aux_device_release() to reset_gpio_aux_device_release()
- Initialize the device properties instead of memsetting them
- Fix typo in commit message
- As discussed on the list: I didn't change patch 7/9 because most of
it goes away anyway in patch 9/9 and the cleanup issues will be fixed
in the upcoming fwnode conversion
- Link to v1: https://lore.kernel.org/r/20251006-reset-gpios-swnodes-v1-0-6d3325b9af42@linaro.org

---
Bartosz Golaszewski (10):
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: allow referencing GPIO chips by firmware nodes
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 | 20 ++++--
drivers/gpio/gpiolib-swnode.c | 21 +++---
drivers/reset/Kconfig | 1 +
drivers/reset/core.c | 149 ++++++++++++++++++++++++------------------
drivers/reset/reset-gpio.c | 19 +++---
include/linux/gpio/property.h | 5 +-
include/linux/property.h | 38 +++++++++--
7 files changed, 156 insertions(+), 97 deletions(-)
---
base-commit: 5218492f1eb93da3929f0d993d2995a4665ca760
change-id: 20250925-reset-gpios-swnodes-db553e67095b

Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>