mbox series

[net-next,v7,00/13] Introduce PHY listing and link_topology tracking

Message ID 20240213150431.1796171-1-maxime.chevallier@bootlin.com (mailing list archive)
Headers show
Series Introduce PHY listing and link_topology tracking | expand

Message

Maxime Chevallier Feb. 13, 2024, 3:04 p.m. UTC
Hello everyone,

This is V7 for the link topology addition, allowing to track all PHYs
that are linked to netdevices.

The main change in V7 is the protection of the main internal API
entrypoints (link_topo_init/cleanup, link_topo_add/del_phy) by
IS_REACHABLE(CONFIG_PHYLIB).

That's restrictive, but it looks difficult to do otherwise while still keep the
data structure opaque and not add dependency clutter with PHYLIB.

As you can tell, I'm unsure about this, so please don't hesitate to
comment on that part :)

The other changes are very minor, the only one is a call to netdev_put
in the .done() netlink callback.

As a remainder, here's what the PHY listings would look like :
 - eth0 has a 88x3310 acting as media converter, and an SFP module with
   an embedded 88e1111 PHY
 - eth2 has a 88e1510 PHY

# ethtool --show-phys *

PHY for eth0:
PHY index: 1
Driver name: mv88x3310
PHY device name: f212a600.mdio-mii:00
Downstream SFP bus name: sfp-eth0
PHY id: 0
Upstream type: MAC

PHY for eth0:
PHY index: 2
Driver name: Marvell 88E1111
PHY device name: i2c:sfp-eth0:16
PHY id: 21040322
Upstream type: PHY
Upstream PHY index: 1
Upstream SFP name: sfp-eth0

PHY for eth2:
PHY index: 1
Driver name: Marvell 88E1510
PHY device name: f212a200.mdio-mii:00
PHY id: 21040593
Upstream type: MAC

Ethtool patches : https://github.com/minimaxwell/ethtool/tree/link-topo-v6

Link to V6: https://lore.kernel.org/netdev/20240126183851.2081418-1-maxime.chevallier@bootlin.com/
Link to V5: https://lore.kernel.org/netdev/20231221180047.1924733-1-maxime.chevallier@bootlin.com/
Link to V4: https://lore.kernel.org/netdev/20231215171237.1152563-1-maxime.chevallier@bootlin.com/
Link to V3: https://lore.kernel.org/netdev/20231201163704.1306431-1-maxime.chevallier@bootlin.com/
Link to V2: https://lore.kernel.org/netdev/20231117162323.626979-1-maxime.chevallier@bootlin.com/
Link to V1: https://lore.kernel.org/netdev/20230907092407.647139-1-maxime.chevallier@bootlin.com/

Maxime Chevallier (13):
  net: phy: Introduce ethernet link topology representation
  net: sfp: pass the phy_device when disconnecting an sfp module's PHY
  net: phy: add helpers to handle sfp phy connect/disconnect
  net: sfp: Add helper to return the SFP bus name
  net: ethtool: Allow passing a phy index for some commands
  netlink: specs: add phy-index as a header parameter
  net: ethtool: Introduce a command to list PHYs on an interface
  netlink: specs: add ethnl PHY_GET command set
  net: ethtool: plca: Target the command to the requested PHY
  net: ethtool: pse-pd: Target the command to the requested PHY
  net: ethtool: cable-test: Target the command to the requested PHY
  net: ethtool: strset: Allow querying phy stats by index
  Documentation: networking: document phy_link_topology

 Documentation/netlink/specs/ethtool.yaml      |  62 ++++
 Documentation/networking/ethtool-netlink.rst  |  46 +++
 Documentation/networking/index.rst            |   1 +
 .../networking/phy-link-topology.rst          | 121 +++++++
 MAINTAINERS                                   |   2 +
 drivers/net/phy/Makefile                      |   2 +-
 drivers/net/phy/at803x.c                      |   2 +
 drivers/net/phy/marvell-88x2222.c             |   2 +
 drivers/net/phy/marvell.c                     |   2 +
 drivers/net/phy/marvell10g.c                  |   2 +
 drivers/net/phy/phy_device.c                  |  55 ++++
 drivers/net/phy/phy_link_topology.c           | 105 +++++++
 drivers/net/phy/phylink.c                     |   3 +-
 drivers/net/phy/sfp-bus.c                     |  15 +-
 include/linux/netdevice.h                     |   4 +-
 include/linux/phy.h                           |   6 +
 include/linux/phy_link_topology.h             |  72 +++++
 include/linux/phy_link_topology_core.h        |  25 ++
 include/linux/sfp.h                           |   8 +-
 include/uapi/linux/ethtool.h                  |  16 +
 include/uapi/linux/ethtool_netlink.h          |  21 ++
 net/core/dev.c                                |   9 +
 net/ethtool/Makefile                          |   2 +-
 net/ethtool/cabletest.c                       |  16 +-
 net/ethtool/netlink.c                         |  53 +++-
 net/ethtool/netlink.h                         |  10 +
 net/ethtool/phy.c                             | 297 ++++++++++++++++++
 net/ethtool/plca.c                            |  19 +-
 net/ethtool/pse-pd.c                          |  13 +-
 net/ethtool/strset.c                          |  17 +-
 30 files changed, 965 insertions(+), 43 deletions(-)
 create mode 100644 Documentation/networking/phy-link-topology.rst
 create mode 100644 drivers/net/phy/phy_link_topology.c
 create mode 100644 include/linux/phy_link_topology.h
 create mode 100644 include/linux/phy_link_topology_core.h
 create mode 100644 net/ethtool/phy.c

Comments

Jakub Kicinski Feb. 15, 2024, 12:59 a.m. UTC | #1
On Tue, 13 Feb 2024 16:04:17 +0100 Maxime Chevallier wrote:
> This is V7 for the link topology addition, allowing to track all PHYs
> that are linked to netdevices.
> 
> The main change in V7 is the protection of the main internal API
> entrypoints (link_topo_init/cleanup, link_topo_add/del_phy) by
> IS_REACHABLE(CONFIG_PHYLIB).
> 
> That's restrictive, but it looks difficult to do otherwise while still keep the
> data structure opaque and not add dependency clutter with PHYLIB.
> 
> As you can tell, I'm unsure about this, so please don't hesitate to
> comment on that part :)
> 
> The other changes are very minor, the only one is a call to netdev_put
> in the .done() netlink callback.
> 
> As a remainder, here's what the PHY listings would look like :
>  - eth0 has a 88x3310 acting as media converter, and an SFP module with
>    an embedded 88e1111 PHY
>  - eth2 has a 88e1510 PHY

Needs a rebase, core has been busy lately:

Applying: net: phy: Introduce ethernet link topology representation
Using index info to reconstruct a base tree...
M	MAINTAINERS
M	drivers/net/phy/Makefile
M	drivers/net/phy/phy_device.c
M	include/linux/netdevice.h
M	include/linux/phy.h
M	net/core/dev.c
Falling back to patching base and 3-way merge...
Auto-merging net/core/dev.c
CONFLICT (content): Merge conflict in net/core/dev.c
Auto-merging include/linux/phy.h
Auto-merging include/linux/netdevice.h
Auto-merging drivers/net/phy/phy_device.c
Auto-merging drivers/net/phy/Makefile
Auto-merging MAINTAINERS
Recorded preimage for 'net/core/dev.c'
Maxime Chevallier Feb. 15, 2024, 7:19 a.m. UTC | #2
Hi Jakub,

On Wed, 14 Feb 2024 16:59:02 -0800
Jakub Kicinski <kuba@kernel.org> wrote:

> On Tue, 13 Feb 2024 16:04:17 +0100 Maxime Chevallier wrote:
> > This is V7 for the link topology addition, allowing to track all PHYs
> > that are linked to netdevices.
> > 
> > The main change in V7 is the protection of the main internal API
> > entrypoints (link_topo_init/cleanup, link_topo_add/del_phy) by
> > IS_REACHABLE(CONFIG_PHYLIB).
> > 
> > That's restrictive, but it looks difficult to do otherwise while still keep the
> > data structure opaque and not add dependency clutter with PHYLIB.
> > 
> > As you can tell, I'm unsure about this, so please don't hesitate to
> > comment on that part :)
> > 
> > The other changes are very minor, the only one is a call to netdev_put
> > in the .done() netlink callback.
> > 
> > As a remainder, here's what the PHY listings would look like :
> >  - eth0 has a 88x3310 acting as media converter, and an SFP module with
> >    an embedded 88e1111 PHY
> >  - eth2 has a 88e1510 PHY  
> 
> Needs a rebase, core has been busy lately:

Arg, I'll send a rebased version, sorry about that

Best regards,

Maxime