[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <025c0ebe-5537-4fa3-b05a-8b835e5ad317@app.fastmail.com>
Date: Fri, 18 Apr 2025 13:02:19 +1000
From: "Mathew McBride" <matt@...verse.com.au>
To: "Russell King (Oracle)" <rmk+kernel@...linux.org.uk>
Cc: "Ioana Ciornei" <ioana.ciornei@....com>,
"David S. Miller" <davem@...emloft.net>,
"Eric Dumazet" <edumazet@...gle.com>, "Jakub Kicinski" <kuba@...nel.org>,
"Paolo Abeni" <pabeni@...hat.com>, netdev@...r.kernel.org,
"Andrew Lunn" <andrew@...n.ch>, "Heiner Kallweit" <hkallweit1@...il.com>,
regressions@...ts.linux.dev
Subject: [REGRESSION] net: pcs-lynx: 10G SFP no longer links up
#regzbot introduced: 6561f0e547be221f411fda5eddfcc5bd8bb058a5
Hi Russell,
On Thu, Dec 5, 2024, at 8:42 PM, Russell King (Oracle) wrote:
> Report the PCS in-band capabilities to phylink for the Lynx PCS.
>
The implementation of in-band capabilities has broken SFP+ (10GBase-R) mode on my LS1088 board.
The other ports in the system (QSGMII) work fine.
$ dmesg | grep -E (eth8|dpmac2-sfp)
sfp dpmac2-sfp: module FS SFPP-AO02 rev B1 sn F1940200586-2 dc 200615
fsl_dpaa2_eth dpni.1 eth8: autoneg setting not compatible with PCS
$ sudo ip link set eth8 up
fsl_dpaa2_eth dpni.1 eth8: configuring for inband/10gbase-r link mode
< no link up occurs>
Reverting this exact commit resolves the issue, and the SFP comes up as normal:
fsl_dpaa2_eth dpni.1 eth8: configuring for inband/10gbase-r link mode
fsl_dpaa2_eth dpni.1 eth8: Link is Up - 10Gbps/Full - flow control off
The changes that were merged into net-next recently ("net: phylink: fix PCS without autoneg") did not resolve this problem.
Obviously, I don't think this particular patch is responsible (but it's what the bisect arrives at). Do you have any suggestions on where to insert some tracing/debug?
Transceiver information:
Identifier : 0x03 (SFP)
Extended identifier : 0x04 (GBIC/SFP defined by 2-wire interface ID)
Connector : 0x21 (Copper pigtail)
Transceiver codes : 0x00 0x00 0x00 0x00 0x00 0x08 0x00 0x00 0x00
Transceiver type : Active Cable
Encoding : 0x00 (unspecified)
BR, Nominal : 10300MBd
Rate identifier : 0x00 (unspecified)
Length (SMF,km) : 0km
Length (SMF) : 0m
Length (50um) : 0m
Length (62.5um) : 0m
Length (Copper) : 3m
Length (OM3) : 0m
Active Cu cmplnce. : 0x0c (unknown) [SFF-8472 rev10.4 only]
Vendor name : FS
Vendor OUI : 00:17:6a
Vendor PN : SFPP-AO02
Vendor rev : B1
Option values : 0x00 0x12
Option : RX_LOS implemented
Option : TX_DISABLE implemented
BR margin, max : 0%
BR margin, min : 0%
Vendor SN : F1940200586-2
Date code : 200615
Passive cables are also affected:
Transceiver codes : 0x00 0x00 0x00 0x00 0x00 0x04 0x00 0x00 0x00
Transceiver type : Passive Cable
Best Regards,
Matt
> Reviewed-by: Maxime Chevallier <maxime.chevallier@...tlin.com>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@...linux.org.uk <mailto:rmk%2Bkernel@...linux.org.uk>>
> ---
> drivers/net/pcs/pcs-lynx.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
> index b79aedad855b..767a8c0714ac 100644
> --- a/drivers/net/pcs/pcs-lynx.c
> +++ b/drivers/net/pcs/pcs-lynx.c
> @@ -35,6 +35,27 @@ enum sgmii_speed {
> #define phylink_pcs_to_lynx(pl_pcs) container_of((pl_pcs), struct lynx_pcs, pcs)
> #define lynx_to_phylink_pcs(lynx) (&(lynx)->pcs)
>
> +static unsigned int lynx_pcs_inband_caps(struct phylink_pcs *pcs,
> + phy_interface_t interface)
> +{
> + switch (interface) {
> + case PHY_INTERFACE_MODE_1000BASEX:
> + case PHY_INTERFACE_MODE_SGMII:
> + case PHY_INTERFACE_MODE_QSGMII:
> + return LINK_INBAND_DISABLE | LINK_INBAND_ENABLE;
> +
> + case PHY_INTERFACE_MODE_10GBASER:
> + case PHY_INTERFACE_MODE_2500BASEX:
> + return LINK_INBAND_DISABLE;
> +
> + case PHY_INTERFACE_MODE_USXGMII:
> + return LINK_INBAND_ENABLE;
> +
> + default:
> + return 0;
> + }
> +}
> +
> static void lynx_pcs_get_state_usxgmii(struct mdio_device *pcs,
> struct phylink_link_state *state)
> {
> @@ -306,6 +327,7 @@ static void lynx_pcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
> }
>
> static const struct phylink_pcs_ops lynx_pcs_phylink_ops = {
> + .pcs_inband_caps = lynx_pcs_inband_caps,
> .pcs_get_state = lynx_pcs_get_state,
> .pcs_config = lynx_pcs_config,
> .pcs_an_restart = lynx_pcs_an_restart,
> --
> 2.30.2
>
>
Powered by blists - more mailing lists