mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Maxime Chevallier <maxime.chevallier@bootlin.com>
To: davem@davemloft.net, Andrew Lunn <andrew@lunn.ch>,
	Jakub Kicinski <kuba@kernel.org>,
	Eric Dumazet <edumazet@google.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Russell King <linux@armlinux.org.uk>,
	Heiner Kallweit <hkallweit1@gmail.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	thomas.petazzoni@bootlin.com,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"Herve Codina" <herve.codina@bootlin.com>,
	"Florian Fainelli" <f.fainelli@gmail.com>,
	"Vladimir Oltean" <vladimir.oltean@nxp.com>,
	"Köry Maincent" <kory.maincent@bootlin.com>,
	"Marek Behún" <kabel@kernel.org>,
	"Oleksij Rempel" <o.rempel@pengutronix.de>,
	"Nicolò Veronese" <nicveronese@gmail.com>,
	"Simon Horman" <horms@kernel.org>,
	mwojtas@chromium.org,
	"Romain Gantois" <romain.gantois@bootlin.com>,
	"Daniel Golle" <daniel@makrotopia.org>,
	"Dimitri Fedrau" <dimitri.fedrau@liebherr.com>,
	"Frank Wunderlich" <frank.wunderlich@linux.dev>,
	"Pietro Ameruoso" <p.ameruoso@live.it>
Subject: Re: [PATCH net-next v17 00/10] net: phy_port: SFP modules representation and phy_port listing
Date: Wed, 9 Sep 2026 15:34:41 +0200	[thread overview]
Message-ID: <c893bd0f-e8d2-4e0b-b5a6-af39b3124180@bootlin.com> (raw)
In-Reply-To: <20260909093912.1290810-1-maxime.chevallier@bootlin.com>

Hi,

On 9/9/26 11:39, Maxime Chevallier wrote:
> Hello everyone,
> 
> Here's V17 for the phy_port improved SFP support and netlink interface.

Looks like I got ratelimited by my mail provider, it's the second series
today that partially makes it to the ML :(

I'll resend after 24h cooldown,

Maxime

> 
> V17 addresses the port_id wrapparound with the xarray insertion, and the
> missing comment during the ethtool header regen from the YNL specs.
> 
> This work extends on the recent addition of phy_port representation to enable
> listing the front-facing ports of an interface. For now, we don't control
> these ports, we merely list their presence and their capabilities.
> 
> As the most common use-case of multi-port interfaces is combo-ports that
> provide both RJ45 and SFP connectors on a single MAC, there's a lot of
> SFP stuff in this series.
> 
> This series is in 2 main parts. The first one aims at representing the
> SFP cages and modules using phy_port, as combo-ports with RJ45 + SFP are
> by far the most common cases for multi-connector setups.
> 
> The second part is the netlink interface to list those ports, now that
> most use-cases are covered.
> 
> Let's see what we can do with some examples of the new ethtool API :
> 
> - Get MII interfaces supported by an empty SFP cage :
> 
> # ethtool --show-ports eth3
> 
> Port for eth3:
> 	Port id: 1
> 	Supported MII interfaces : sgmii, 1000base-x, 2500base-x
> 	Port type: sfp
> 
> - Get Combo-ports supported modes, on each port :
> 
> # ethtool --show-ports eth1
> 
> Port for eth1:
> 	Port id: 1
> 	Supported link modes:  10baseT/Half 10baseT/Full
> 	                       100baseT/Half 100baseT/Full
> 	                       1000baseT/Full
> 	                       10000baseT/Full
> 	                       2500baseT/Full
> 	                       5000baseT/Full
> 
> 	Port type: mdi
> 
> Port for eth1:
> 	Port id: 2
> 	Supported MII interfaces : 10gbase-r
> 	Port type: sfp
> 
> - Get Achievable linkmodes on a SFP module (combo port with a DAC in the
> SFP cage)
> 
> # ethtool --show-ports eth1
> 
> Port for eth1:
> 	Port id: 1
> 	Supported link modes:  10baseT/Half 10baseT/Full
> 	                       100baseT/Half 100baseT/Full
> 	                       1000baseT/Full
> 	                       10000baseT/Full
> 	                       2500baseT/Full
> 	                       5000baseT/Full
> 	Port type: mdi
> 
> Port for eth1:
> 	Port id: 2
> 	Supported MII interfaces : 10gbase-r
> 	Port type: sfp
> 
> Port for eth1:
> 	Port id: 3
> 	Upstream id: 2
> 	Supported link modes:  10000baseCR/Full
> 	Port type: mdi
> 
> Note that here, we have 3 ports :
>  - The Copper port
>  - The SFP Cage itself, marked as 'occupied'
>  - The SFP module
> 
> This series builds on top of phy_port and phy_link_topology to allow
> tracking the ports of an interface. We maintain a list of supported
> linkmodes/interfaces on each port, which allows for fine-grained
> reporting of each port's capability.
> 
> What this series doesn't do :
>  - We don't support selecting which port is active. This is the next step.
>  - We only support PHY-driven combo ports. The end-goal of this whole
>    journey that started with phy_link_topology is to get support for MII
>    muxes, such as the one we have on the Turris Omnia. This will eventually
>    be upstreamed as well.
> 
> If you want to play around with it, here's [1] the patched ethtool that I've
> been using to produce the outputs above.
> 
> Thanks !
> 
> Maxime
> 
> [1] : https://github.com/minimaxwell/ethtool/tree/mc/ethtool_port
> 
> Changelog :
> 
> Changes in v17:
>  - Handle port index wraparound
>  - Regen the ethtool headers, now with the comment :)
> 
> Changes in v16:
> https://lore.kernel.org/r/20260902212135.1805948-1-maxime.chevallier@bootlin.com
>  - unregister phy_ports at phy_detach
>  - typos in patch 1 (of -> or)
>  - Fix the netlink specs
> 
> Changes in v15:
> https://lore.kernel.org/netdev/20260801074332.98755-1-maxime.chevallier@bootlin.com/
>  - Fail on port access for ops-locked devices
>  - Use a direct phy_port pointer for upstream tracking
>  - Addressed the kdoc issues
> 
> Changes in v14:
> https://lore.kernel.org/netdev/20260720174808.139573-1-maxime.chevallier@bootlin.com/
>  - Added a big comment on the first patch for the topo alloc potential
>    races
>  - Fixed the multi-buff DUMP on last patch with a separate iterator for
>    dumps
>  - Fixed some typos in the documentation
> 
> Changes in V13:
> V13: https://lore.kernel.org/r/20260701110427.143945-1-maxime.chevallier@bootlin.com
>  - Rebase on net-next
>  - Fix the SFP bus cleanup path in patch 5
> 
> Changes in V12:
> V12: https://lore.kernel.org/r/20260615153907.862987-1-maxime.chevallier@bootlin.com
>  - Rebased on net-next, including fixes on the phy probing and cleanup
>    paths
>  - Rebased on Jakub's netdev_ops_locked changes in phy_link_topology
>  - Fixed some typos reported by Andrew and sashiko in the documentation
> 
> Changes in v11:
> V11:https://lore.kernel.org/r/20260521121040.1199622-1-maxime.chevallier@bootlin.com
>  - Aggregated Andrew's reviews :)
>  - Removed the "vacant" field, replaced it with "upstream_port"
> 
> Changes in V10:
> V10: https://lore.kernel.org/r/20260513130521.1064094-1-maxime.chevallier@bootlin.com
>  - Rebase on net-next
>  - Rename phylink/phy_device sfp_bus_port to sfp_cage_port
>  - Sashiko's reviews were mostly unrealistic or wrong :(
> 
> Changes in V9:
> V9: https://lore.kernel.org/r/20260403123755.175742-1-maxime.chevallier@bootlin.com
>  - Added missing netlink doc updates for u8->u32 conversion
>  - Removed dead code with a condition that can never be true in
>    phylink's mod_port code
>  - Fixed the error path in phy_sfp_connect_phy
> 
> Changes in v8:
> V8: https://lore.kernel.org/r/20260325081937.571115-1-maxime.chevallier@bootlin.com
>  - Set the new phydev.has_sfp_mod_phy field when we're sure that no
>    errors occured
>  - Fix formatting of the copyright info in ethnl port
>  - Use a policy to validate the range of port_id
>  - Use GENL_REQ_ATTR_CHECK
>  - alpha-sort headers
>  - use u32 in netlink messages
>  - return better error codes
>  - don't check the skb len, the core does that
> 
> Changes in V7:
> V7: https://lore.kernel.org/all/20260309152747.702373-1-maxime.chevallier@bootlin.com/
>  - Changed the port cleanup path to use list_for_each_entry_continue_reverse
>  - Adjusted the cleanup path in phylink for the port vacant state
>  - Pass the right cmd for the netlink dump message
> 
> Changes in V6:
> V6: https://lore.kernel.org/r/20260304145444.442334-1-maxime.chevallier@bootlin.com
>  - Added some comments in th mod_port cleanup
>  - changed some kmalloc to kmalloc_obj
>  - Removed some phy_link_topo_del_port that wasn't needed
> 
> Changes in V5:
> V5: https://lore.kernel.org/r/20260205092317.755906-1-maxime.chevallier@bootlin.com
>  - Fixed a check on a potentially un-initialized pointer, reported by
>    Simon
>  - Fixed a documentation formatting issue
>  - Remove a stray pr_info
>  - Rebased on net-next
> 
> Changes in V4:
> V4 : https://lore.kernel.org/netdev/20260203172839.548524-1-maxime.chevallier@bootlin.com/
>  - Add a cleanup patch for the of port parsing
>  - Added a match to sync the port's linkmodes with the PHY's for OF
>    ports
>  - Added RTNL assert in the port_get topo helper
>  - nullify the bus port for phylink support
>  - Fix some typos
> 
> Changes in V3:
> V3: https://lore.kernel.org/netdev/20260201151249.642015-1-maxime.chevallier@bootlin.com/
>  - Remove the sfp bus ops for nophy, and use .module_start() as
>    suggested by Russell
>  - Added missing cleanup for the topology, as per AI review
>  - Fixed a few typos as per Romain's review
>  - Changed "occupied" to "vacant" as per Romain's review
>  - Added missing checks for null ports, per AI review
> 
> Changes in V2:
> V2: https://lore.kernel.org/netdev/20260128204526.170927-1-maxime.chevallier@bootlin.com/
>  - Fix the cleanup path of phy_link_topo_add_phy, as per AI review
>  - Fix the cleanup path of phy_sfp_probe, as per AI review
>  - Fix the call-site of the disconnect_nophy sfp bus ops, per AI review
>  - Fix the netdev-less case uin phylink, per AI review
>  - Fix the prototype of phy_link_topo_get_port for the stubs
>  - Dropped patch 11. It ended-up breaking 'allnoconfig', so instead we
>    built a phy_interface_names array in net/ethtool/netlink.c
>  - Fix an ethool-netlink spec discrepancy with the type of an attribute
>  - Fix the size computation in the netlink port API
>  - Fix the cleanup path in the netlink port API
> 
> V1: https://lore.kernel.org/netdev/20260127134202.8208-1-maxime.chevallier@bootlin.com/
> 
> Maxime Chevallier (10):
>   net: phy: phy_link_topology: Add a helper for opportunistic alloc
>   net: phy: phy_link_topology: Track ports in phy_link_topology
>   net: phylink: Register a phy_port for MAC-driven SFP cages
>   net: phy: Create SFP phy_port before registering upstream
>   net: phy: Represent PHY-less SFP modules with phy_port
>   net: phy: phy_port: Store information about a port's upstream
>   net: phy: phy_link_topology: Add a helper to retrieve ports
>   netlink: specs: Add ethernet port listing with ethtool
>   net: ethtool: Introduce ethtool command to list ports
>   Documentation: networking: Update the phy_port infrastructure
>     description
> 
>  Documentation/netlink/specs/ethtool.yaml      |  55 +++
>  Documentation/networking/ethtool-netlink.rst  |  34 ++
>  Documentation/networking/phy-port.rst         |  26 +-
>  MAINTAINERS                                   |   1 +
>  drivers/net/phy/phy-caps.h                    |   2 +
>  drivers/net/phy/phy_caps.c                    |  26 ++
>  drivers/net/phy/phy_device.c                  | 186 +++++++--
>  drivers/net/phy/phy_link_topology.c           | 101 ++++-
>  drivers/net/phy/phylink.c                     | 128 +++++-
>  include/linux/phy.h                           |  10 +
>  include/linux/phy_link_topology.h             |  44 ++
>  include/linux/phy_port.h                      |   5 +
>  .../uapi/linux/ethtool_netlink_generated.h    |  22 +
>  net/core/dev.c                                |   1 +
>  net/ethtool/Makefile                          |   2 +-
>  net/ethtool/netlink.c                         |  25 ++
>  net/ethtool/netlink.h                         |   8 +
>  net/ethtool/port.c                            | 382 ++++++++++++++++++
>  18 files changed, 1020 insertions(+), 38 deletions(-)
>  create mode 100644 net/ethtool/port.c
> 


      parent reply	other threads:[~2026-09-09 13:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-09  9:39 Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 01/10] net: phy: phy_link_topology: Add a helper for opportunistic alloc Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 02/10] net: phy: phy_link_topology: Track ports in phy_link_topology Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 03/10] net: phylink: Register a phy_port for MAC-driven SFP cages Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 04/10] net: phy: Create SFP phy_port before registering upstream Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 06/10] net: phy: phy_port: Store information about a port's upstream Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 08/10] netlink: specs: Add ethernet port listing with ethtool Maxime Chevallier
2026-09-09  9:39 ` [PATCH net-next v17 10/10] Documentation: networking: Update the phy_port infrastructure description Maxime Chevallier
2026-09-09 13:34 ` Maxime Chevallier [this message]

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=c893bd0f-e8d2-4e0b-b5a6-af39b3124180@bootlin.com \
    --to=maxime.chevallier@bootlin.com \
    --cc=andrew@lunn.ch \
    --cc=christophe.leroy@csgroup.eu \
    --cc=daniel@makrotopia.org \
    --cc=davem@davemloft.net \
    --cc=dimitri.fedrau@liebherr.com \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=frank.wunderlich@linux.dev \
    --cc=herve.codina@bootlin.com \
    --cc=hkallweit1@gmail.com \
    --cc=horms@kernel.org \
    --cc=kabel@kernel.org \
    --cc=kory.maincent@bootlin.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mwojtas@chromium.org \
    --cc=netdev@vger.kernel.org \
    --cc=nicveronese@gmail.com \
    --cc=o.rempel@pengutronix.de \
    --cc=p.ameruoso@live.it \
    --cc=pabeni@redhat.com \
    --cc=romain.gantois@bootlin.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=vladimir.oltean@nxp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®