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
>
prev 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®