From: Sean Anderson <seanga2@gmail.com>
To: Maxime Chevallier <maxime.chevallier@bootlin.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
thomas.petazzoni@bootlin.com, "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>,
linux-arm-kernel@lists.infradead.org,
"Christophe Leroy" <christophe.leroy@csgroup.eu>,
"Herve Codina" <herve.codina@bootlin.com>,
"Florian Fainelli" <f.fainelli@gmail.com>,
"Heiner Kallweit" <hkallweit1@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, "Antoine Tenart" <atenart@kernel.org>,
devicetree@vger.kernel.org, "Conor Dooley" <conor+dt@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Romain Gantois" <romain.gantois@bootlin.com>
Subject: Re: [PATCH net-next 00/13] Introduce an ethernet port representation
Date: Wed, 12 Feb 2025 10:39:48 -0500 [thread overview]
Message-ID: <c927247b-e39c-8511-d95c-77fb23b82808@gmail.com> (raw)
In-Reply-To: <20250210095542.721bf967@fedora-1.home>
Hi Maxime,
On 2/10/25 03:55, Maxime Chevallier wrote:
> Hi Sean,
>
> On Fri, 7 Feb 2025 21:14:32 -0500
> Sean Anderson <seanga2@gmail.com> wrote:
>
>> Hi Maxime,
>>
>> On 2/7/25 17:36, Maxime Chevallier wrote:
>>> Hello everyone,
>>>
>>> This series follows the 2 RFC that were sent a few weeks ago :
>>> RFC V2: https://lore.kernel.org/netdev/20250122174252.82730-1-maxime.chevallier@bootlin.com/
>>> RFC V1: https://lore.kernel.org/netdev/20241220201506.2791940-1-maxime.chevallier@bootlin.com/
>>>
>>> The goal of this series is to introduce an internal way of representing
>>> the "outputs" of ethernet devices, for now only focusing on PHYs.
>>>
>>> This allows laying the groundwork for multi-port devices support (both 1
>>> PHY 2 ports, or more exotic setups with 2 PHYs in parallel, or MII
>>> multiplexers).
>>>
>>> Compared to the RFCs, this series tries to properly support SFP,
>>> especially PHY-driven SFPs through special phy_ports named "serdes"
>>> ports. They have the particularity of outputing a generic interface,
>>> that feeds into another component (usually, an SFP cage and therefore an
>>> SFP module).
>>>
>>> This allows getting a fairly generic PHY-driven SFP support (MAC-driven
>>> SFP is handled by phylink).
>>>
>>> This series doesn't address PHY-less interfaces (bare MAC devices, MACs
>>> with embedded PHYs not driven by phylink, or MAC connected to optical
>>> SFPs) to stay within the 15 patches limit, nor does it include the uAPI
>>> part that exposes these ports to userspace.
>>>
>>> I've kept the cover short, much more details can be found in the RFC
>>> covers.
>>>
>>> Thanks everyone,
>>>
>>> Maxime
>>
>> Forgive me for my ignorance, but why have a new ethtool interface instead of
>> extending ethtool_link_settings.port? It's a rather ancient interface, but it
>> seems to be tackling the exact same problem as you are trying to address. Older
>> NICs used to have several physical connectors (e.g. BNC, MII, twisted-pair) but
>> only one could be used at once. This seems directly analogous to a PHY that
>> supports multiple "port"s but not all at once. In fact, the only missing
>> connector type seems to be PORT_BACKPLANE.
>>
>> I can think of a few reasons why you wouldn't use PORT_*:
>>
>> - It describes the NIC and not the PHY, and perhaps there is too much impedance
>> mismatch?
>> - There is too much legacy in userspace (or in the kernel) to use that API in
>> this way?
>> - You need more flexibility?
>
> So there are multiple reasons that make the PORT_* field limited :
>
> - We can't gracefully handle multi-port PHYs for complex scenarios
> where we could say "I'm currently using the Copper port, but does the
> Fiber port has link ?"
>
> - As you mention in your first argument, what I'd like to try to do is
> come-up with a "generic" representation of outgoing NIC interfaces. The
> final use-cases I'd like to cover are multi-port NICs, allowing
> userspace to control which physical interfaces are available, and which
> t use. Looking at the hardware, this can be implemented in multiple
> ways :
>
> ___ Copper
> /
> MAC - PHY
> \__ SFP
>
> Here, a single PHY has 2 media-side interfaces, and we'd like to select
> the one to use. That's fairly common now, there are quite a number of
> PHYs that support this : mv33x3310, VSC8552, mv88x2222 only to name a
> few. But there are other, more uncommon topologies that exist :
>
> ____ SGMII PHY -- Copper
> /
> MAC - SGMII/1000BaseX MUX
> \____ SFP
>
> Here, we also have 2 media-side ports, but they are driver through
> different entities : The Copper port sits behind a single-port PHY,
> that is itself behind a *MII MUX, that's also connected to an SFP. Here
> the port selection is done at the MUX level
>
> Finally, I've been working on supporting devices whith another topology
> (actually, what started this whole work) :
>
> ___ PHY
> /
> MAC --MUX |
> \__ PHY
>
> Here both PHYs are on the same *MII bus, with some physical,
> gpio-driven MUX, and we have 2 PORT_TP on the same NIC. That design is
> used for link redundancy, if one PHY loses the link, we switch to the
> other one (that hopefully has link).
>
> All these cases have different drivers involved in the MUX'ing (phy
> driver itself, intermediate MUX in-between...), so the end-goal would
> be to expose to userspace info about the media interfaces themselves.
>
> This phy_port object would be what we expose to userspace. One missing
> step in this series is adding control on the ports (netlink API,
> enabling/disabling logic for ports) but that far exceeds the 15 patches
> limitation :)
>
> Sorry if all of that was blurry, I did make so good of a job linking to
> all previous discussions on the topic, I'll address that for the next
> round.
Thanks for the detailed explanation, especially regarding PHY redundancy.
Could you add it to a commit message (or even better to Documentation/)?
--Sean
next prev parent reply other threads:[~2025-02-12 15:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-07 22:36 [PATCH net-next 00/13] Introduce an ethernet port representation Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 01/13] net: ethtool: Introduce ETHTOOL_LINK_MEDIUM_* values Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 02/13] net: ethtool: Export the link_mode_params definitions Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 03/13] net: phy: Introduce PHY ports representation Maxime Chevallier
2025-02-11 13:32 ` Kory Maincent
2025-02-11 13:42 ` Maxime Chevallier
2025-02-11 13:52 ` Kory Maincent
2025-02-11 14:04 ` Andrew Lunn
2025-02-11 14:17 ` Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 04/13] net: phy: dp83822: Add support for phy_port representation Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 05/13] net: phy: Create a phy_port for PHY-driven SFPs Maxime Chevallier
2025-02-12 15:59 ` Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 06/13] net: phy: Intrduce generic SFP handling for PHY drivers Maxime Chevallier
2025-02-08 15:32 ` kernel test robot
2025-02-07 22:36 ` [PATCH net-next 07/13] net: phy: marvell-88x2222: Support SFP through phy_port interface Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 08/13] net: phy: marvell: " Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 09/13] net: phy: marvell10g: Support SFP through phy_port Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 10/13] net: phy: at803x: Support SFP through phy_port interface Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 11/13] net: phy: Only rely on phy_port for PHY-driven SFP Maxime Chevallier
2025-02-08 16:04 ` kernel test robot
2025-02-11 9:17 ` Maxime Chevallier
2025-02-07 22:36 ` [PATCH net-next 12/13] net: phy: dp83822: Add SFP support through the phy_port interface Maxime Chevallier
2025-02-08 16:15 ` kernel test robot
2025-02-07 22:36 ` [PATCH net-next 13/13] dt-bindings: net: Introduce the phy-port description Maxime Chevallier
2025-02-08 2:14 ` [PATCH net-next 00/13] Introduce an ethernet port representation Sean Anderson
2025-02-10 8:55 ` Maxime Chevallier
2025-02-12 15:39 ` Sean Anderson [this message]
2025-02-12 15:44 ` Maxime Chevallier
2025-02-12 19:48 ` Rob Herring
2025-02-13 9:57 ` Maxime Chevallier
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=c927247b-e39c-8511-d95c-77fb23b82808@gmail.com \
--to=seanga2@gmail.com \
--cc=andrew@lunn.ch \
--cc=atenart@kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=herve.codina@bootlin.com \
--cc=hkallweit1@gmail.com \
--cc=horms@kernel.org \
--cc=kabel@kernel.org \
--cc=kory.maincent@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=maxime.chevallier@bootlin.com \
--cc=mwojtas@chromium.org \
--cc=netdev@vger.kernel.org \
--cc=nicveronese@gmail.com \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--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;
as well as URLs for NNTP newsgroup(s).