net: phy: c45: add support for 1000BASE-T1 forced setup
authorStefan Eichenberger <eichest@gmail.com>
Wed, 19 Jul 2023 06:42:55 +0000 (08:42 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 20 Jul 2023 10:24:06 +0000 (12:24 +0200)
Add support to force 1000BASE-T1 by setting the correct control bit in
the MDIO_MMD_PMA_PMD_BT1_CTRL register.

Signed-off-by: Stefan Eichenberger <eichest@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/phy/phy-c45.c

index 93ed072..b73c428 100644 (file)
@@ -108,7 +108,7 @@ EXPORT_SYMBOL_GPL(genphy_c45_pma_baset1_setup_master_slave);
  */
 int genphy_c45_pma_setup_forced(struct phy_device *phydev)
 {
-       int ctrl1, ctrl2, ret;
+       int bt1_ctrl, ctrl1, ctrl2, ret;
 
        /* Half duplex is not supported */
        if (phydev->duplex != DUPLEX_FULL)
@@ -176,6 +176,15 @@ int genphy_c45_pma_setup_forced(struct phy_device *phydev)
                ret = genphy_c45_pma_baset1_setup_master_slave(phydev);
                if (ret < 0)
                        return ret;
+
+               bt1_ctrl = 0;
+               if (phydev->speed == SPEED_1000)
+                       bt1_ctrl = MDIO_PMA_PMD_BT1_CTRL_STRAP_B1000;
+
+               ret = phy_modify_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_PMD_BT1_CTRL,
+                                    MDIO_PMA_PMD_BT1_CTRL_STRAP, bt1_ctrl);
+               if (ret < 0)
+                       return ret;
        }
 
        return genphy_c45_an_disable_aneg(phydev);