[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aQnA8HZjKKgibOz-@shell.armlinux.org.uk>
Date: Tue, 4 Nov 2025 09:01:36 +0000
From: "Russell King (Oracle)" <linux@...linux.org.uk>
To: Romain Gantois <romain.gantois@...tlin.com>
Cc: Andrew Lunn <andrew@...n.ch>, Heiner Kallweit <hkallweit1@...il.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Maxime Chevallier <maxime.chevallier@...tlin.com>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH net-next 3/3] net: phy: dp83869: Support 1000Base-X SFP
On Tue, Nov 04, 2025 at 09:50:36AM +0100, Romain Gantois wrote:
> +static void dp83869_module_remove(void *upstream)
> +{
> + struct phy_device *phydev = upstream;
> +
> + phydev_info(phydev, "SFP module removed\n");
> +
> + /* Set speed and duplex to unknown to avoid downshifting warning. */
> + phydev->speed = SPEED_UNKNOWN;
> + phydev->duplex = DUPLEX_UNKNOWN;
Should this be done by core phylib code?
> +}
> +
> +static int dp83869_module_insert(void *upstream, const struct sfp_eeprom_id *id)
> +{
> + __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_support);
> + __ETHTOOL_DECLARE_LINK_MODE_MASK(sfp_support);
> + struct phy_device *phydev = upstream;
> + const struct sfp_module_caps *caps;
> + struct dp83869_private *dp83869;
> + phy_interface_t interface;
> + int ret;
> +
> + linkmode_zero(phy_support);
> + linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT, phy_support);
> +
> + caps = sfp_get_module_caps(phydev->sfp_bus);
> +
> + linkmode_and(sfp_support, phy_support, caps->link_modes);
> +
> + if (linkmode_empty(sfp_support)) {
> + phydev_err(phydev, "incompatible SFP module inserted\n");
> + return -EINVAL;
> + }
> +
> + interface = sfp_select_interface(phydev->sfp_bus, sfp_support);
> +
> + phydev_info(phydev, "%s SFP compatible link mode: %s\n", __func__,
> + phy_modes(interface));
> +
> + dp83869 = phydev->priv;
> +
> + switch (interface) {
> + case PHY_INTERFACE_MODE_1000BASEX:
> + dp83869->mode = DP83869_RGMII_1000_BASE;
> + phydev->port = PORT_FIBRE;
> + break;
> + default:
> + phydev_err(phydev, "incompatible PHY-to-SFP module link mode %s!\n",
> + phy_modes(interface));
> + return -EINVAL;
> + }
If you only support 1000BASE-X, please test that in the interface mode
mask (caps->interfaces) rather than going round this long winded
method.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Powered by blists - more mailing lists