mbox series

[v3,0/4] use device_for_each_child_node() to access device child nodes

Message ID 20240805-device_for_each_child_node-available-v3-0-48243a4aa5c0@gmail.com (mailing list archive)
Headers show
Series use device_for_each_child_node() to access device child nodes | expand

Message

Javier Carrasco Aug. 5, 2024, 2:49 p.m. UTC
This series aims to clarify the use cases of:

- device_for_each_child_node[_scoped]()
- fwnode_for_each_available_child_node[_scoped]()

to access firmware nodes.

There have been multiple discussions [1][2] about what the first macro
implies in the sense of availability, and a number of users have opted
for the second macro in cases where the first one should have been
preferred.

The second macro is intended to be used over child nodes of a firmware
node, not direct child nodes of the device node. Instead, those users
retrieve the fwnode member from the device struct just to have access to
a macro that explicitly indicates node availability.

That workaround is not necessary because `device_for_each_child_node()`
implies availability for the existing backends (ACPI, DT, swnode).

This series does not cover other points discussed in [2] like addressing
uses of `fwnode_for_each_child_node()` where `device_*` should have been
used, using the `_avaialble_` variant of the fwnode loop whenever
possible, or adding new `_scoped` macros. Such points will be covered by
subsequent series to keep focus on the "availability" issue.

The conversion has been validated with an LTC2992 hwmon sensor, which is
one of the affected drivers. The rest of the drivers could only be
compiled and checked with static-analysis tools.

Link: https://lore.kernel.org/all/20211205190101.26de4a57@jic23-huawei/ [1]
Link: https://lore.kernel.org/all/20240523-fwnode_for_each_available_child_node_scoped-v2-0-701f3a03f2fb@gmail.com/ [2]

Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
---
Changes in v3:
- Rebase to next/20240805 and drop applied patches.
- mvpp2: fix typos in commit description.
- mvpp2: add patch to use port_count instead of node iteration.
- Link to v2: https://lore.kernel.org/r/20240721-device_for_each_child_node-available-v2-0-f33748fd8b2d@gmail.com

Changes in v2:
- [1/6] property.h: drop "if found" from the description of
  device_for_each_child_node()
- [3/6] bd2607mvv.c: fix child node usage.
- Link to v1: https://lore.kernel.org/r/20240706-device_for_each_child_node-available-v1-0-8a3f7615e41c@gmail.com

---
Javier Carrasco (4):
      device property: document device_for_each_child_node macro
      leds: pca995x: use device_for_each_child_node() to access device child nodes
      net: mvpp2: use port_count to remove ports
      net: mvpp2: use device_for_each_child_node() to access device child nodes

 drivers/leds/leds-pca995x.c                     | 15 ++++--------
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 31 +++++++------------------
 include/linux/property.h                        | 10 ++++++++
 3 files changed, 24 insertions(+), 32 deletions(-)
---
base-commit: d6dbc9f56c3a70e915625b6f1887882c23dc5c91
change-id: 20240701-device_for_each_child_node-available-1c1eca4b6495

Best regards,

Comments

Jakub Kicinski Aug. 7, 2024, 1:10 a.m. UTC | #1
On Mon, 05 Aug 2024 16:49:43 +0200 Javier Carrasco wrote:
>       net: mvpp2: use port_count to remove ports
>       net: mvpp2: use device_for_each_child_node() to access device child nodes

Please repost these two separately so we can take the whole series 
via networking. As is the series doesn't apply so it's too much
manual twiddling to fit into our tree.