All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aleksei Sviridkin <f@lex.la>
To: Maxime Chevallier <maxime.chevallier@bootlin.com>
Cc: 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>,
	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 RESEND net-next v17 00/10] net: phy_port: SFP modules representation and phy_port listing
Date: Fri, 25 Sep 2026 01:01:18 +0300	[thread overview]
Message-ID: <20260924220118.2129522-1-f@lex.la> (raw)
In-Reply-To: <20260910170103.1029108-1-maxime.chevallier@bootlin.com>

Hi Maxime,

I ran v17 on a Keenetic KN-1012 (MT7981B + MT7531). Switch port 5
(lan4) goes either to an SFP cage or to an EN8811H copper PHY, and the
bootloader picks one devicetree variant per boot. The series was
backported to OpenWrt's 6.18 kernel together with the phy_port base and
its fixes, with PROVE_LOCKING and DEBUG_ATOMIC_SLEEP enabled.

Copper variant: lan4 lists one mdi port, id 1, with 100/1000/2500baseT,
the same modes the PHY reports. The EN8811H attaches late, after the
netdev is registered, because it waits for its firmware. The port still
shows up, and traffic passes. The other user ports each list one mdi
port.

With a small netlink client I also checked the calls the ethtool CLI
can't make. An unfiltered dump returns the five ports and then DONE.
A dump filtered on a netdev without a topology returns nothing and a
clean DONE. A DO with a valid PORT_ID returns the port. An unknown id
gives ENODEV, id 0 gives ERANGE from the policy, and a request with no
id gives EINVAL. lockdep stayed clean and debug_locks stayed 1.

SFP variant, with the cage port and a module port:

  Port for lan4:
          Port id: 1
          Supported MII interfaces : sgmii, 1000base-x, 2500base-x
          Port type: sfp

  Port for lan4:
          Port id: 3
          Upstream id: 1
          Supported link modes:  2500baseX/Full
                                 1000baseX/Full
          Port type: mdi

That is a passive DAC. A GPON ONU stick gives 1000baseX/Full, and
phylink moves to 1000base-x. On every removal the module port goes away
and the cage port stays. Every insert gets a new id, with no stale or
duplicate entry. I tried a replug within one second, two fast
out/in cycles, and swapping the DAC for the ONU with no pause. The
double cycle didn't manage an insert while the previous probe was still
running, since a hand can't beat the ~0.9s probe. lockdep stayed clean
throughout.

Over the DAC at 1000base-X to a UniFi UDR7 (whose SFP+ path goes
through its CPU), iperf3 gives 926 Mbit/s board to UDR7 and 606 Mbit/s
back, with no interface errors, no link drops and lockdep clean. I also pulled
the DAC while a ping6 flood was running and plugged it back in: the
module port went away, came back with a new id, and the link and
traffic recovered.

Not covered:
- A module with its own PHY (06/10): neither of my modules probed one.
- A dump that spans more than one skb: five ports fit in one.

Three notes:

The ethtool branch linked in the cover still reads PORT_VACANT and a u8
port type, while v17 has UPSTREAM_PORT (u32) in that slot and a u32
type. I adapted it locally. Could you push the ethtool you used for the
cover letter?

The raw supported-modes of a PHY's default port also carry the
Autoneg, TP and MII bits, e.g. "... 1000baseT/Full Autoneg TP MII
2500baseT/Full" on lan4. ethtool hides them, but MII on an mdi port
looks odd to anyone reading the attribute directly. Is that intended?

A module port follows the netdev's admin state rather than module
presence. With lan4 down, a module sitting in the cage isn't listed,
because sfp_module_stop() runs phylink_del_sfp_mod_port(). After ifup
it comes back under a new id, so every ifdown/ifup renumbers it. Is
that intended? From userspace, "port 3 upstream 1" isn't stable across
an ifup.

Tested-by: Aleksei Sviridkin <f@lex.la>

Aleksei

  parent reply	other threads:[~2026-09-24 22:01 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-10 17:00 [PATCH RESEND net-next v17 00/10] net: phy_port: SFP modules representation and phy_port listing Maxime Chevallier
2026-09-10 17:00 ` [PATCH RESEND net-next v17 01/10] net: phy: phy_link_topology: Add a helper for opportunistic alloc Maxime Chevallier
2026-09-11 18:51   ` netdev-bot+sashiko
2026-09-10 17:00 ` [PATCH RESEND net-next v17 02/10] net: phy: phy_link_topology: Track ports in phy_link_topology Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-10 17:00 ` [PATCH RESEND net-next v17 03/10] net: phylink: Register a phy_port for MAC-driven SFP cages Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-10 17:00 ` [PATCH RESEND net-next v17 04/10] net: phy: Create SFP phy_port before registering upstream Maxime Chevallier
2026-09-10 17:00 ` [PATCH RESEND net-next v17 05/10] net: phy: Represent PHY-less SFP modules with phy_port Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-24 22:01   ` Aleksei Sviridkin
2026-09-10 17:00 ` [PATCH RESEND net-next v17 06/10] net: phy: phy_port: Store information about a port's upstream Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-15  1:34   ` Andrew Lunn
2026-09-10 17:00 ` [PATCH RESEND net-next v17 07/10] net: phy: phy_link_topology: Add a helper to retrieve ports Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-24 22:09   ` Aleksei Sviridkin
2026-09-10 17:01 ` [PATCH RESEND net-next v17 08/10] netlink: specs: Add ethernet port listing with ethtool Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-10 17:01 ` [PATCH RESEND net-next v17 09/10] net: ethtool: Introduce ethtool command to list ports Maxime Chevallier
2026-09-11 18:52   ` netdev-bot+sashiko
2026-09-24 22:01   ` Aleksei Sviridkin
2026-09-25  8:57     ` Maxime Chevallier
2026-09-25 15:28       ` Aleksei Sviridkin
2026-09-10 17:01 ` [PATCH RESEND net-next v17 10/10] Documentation: networking: Update the phy_port infrastructure description Maxime Chevallier
2026-09-15  1:38   ` Andrew Lunn
2026-09-24 22:01 ` Aleksei Sviridkin [this message]
2026-09-27 12:41   ` [PATCH RESEND net-next v17 00/10] net: phy_port: SFP modules representation and phy_port listing 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=20260924220118.2129522-1-f@lex.la \
    --to=f@lex.la \
    --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=maxime.chevallier@bootlin.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.