]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: phy: marvell: implement phy_inband_caps() method
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 3 Dec 2024 15:31:12 +0000 (15:31 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 5 Dec 2024 03:19:07 +0000 (19:19 -0800)
Provide an implementation for phy_inband_caps() for Marvell PHYs used
on SFP modules, so that phylink knows the PHYs capabilities.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1tIUro-006IUC-Rq@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/marvell.c

index cd50cd6a7f75c13dc0c60de94ecddb8c9402e438..3075ebc3f964b6ecf6256b6baa09831298a069b5 100644 (file)
@@ -717,6 +717,20 @@ static int marvell_config_aneg_fiber(struct phy_device *phydev)
        return genphy_check_and_restart_aneg(phydev, changed);
 }
 
+static unsigned int m88e1111_inband_caps(struct phy_device *phydev,
+                                        phy_interface_t interface)
+{
+       /* In 1000base-X and SGMII modes, the inband mode can be changed
+        * through the Fibre page BMCR ANENABLE bit.
+        */
+       if (interface == PHY_INTERFACE_MODE_1000BASEX ||
+           interface == PHY_INTERFACE_MODE_SGMII)
+               return LINK_INBAND_DISABLE | LINK_INBAND_ENABLE |
+                      LINK_INBAND_BYPASS;
+
+       return 0;
+}
+
 static int m88e1111_config_aneg(struct phy_device *phydev)
 {
        int extsr = phy_read(phydev, MII_M1111_PHY_EXT_SR);
@@ -3677,6 +3691,7 @@ static struct phy_driver marvell_drivers[] = {
                .name = "Marvell 88E1112",
                /* PHY_GBIT_FEATURES */
                .probe = marvell_probe,
+               .inband_caps = m88e1111_inband_caps,
                .config_init = m88e1112_config_init,
                .config_aneg = marvell_config_aneg,
                .config_intr = marvell_config_intr,
@@ -3698,6 +3713,7 @@ static struct phy_driver marvell_drivers[] = {
                /* PHY_GBIT_FEATURES */
                .flags = PHY_POLL_CABLE_TEST,
                .probe = marvell_probe,
+               .inband_caps = m88e1111_inband_caps,
                .config_init = m88e1111gbe_config_init,
                .config_aneg = m88e1111_config_aneg,
                .read_status = marvell_read_status,
@@ -3721,6 +3737,7 @@ static struct phy_driver marvell_drivers[] = {
                .name = "Marvell 88E1111 (Finisar)",
                /* PHY_GBIT_FEATURES */
                .probe = marvell_probe,
+               .inband_caps = m88e1111_inband_caps,
                .config_init = m88e1111gbe_config_init,
                .config_aneg = m88e1111_config_aneg,
                .read_status = marvell_read_status,