net: phy: at803x: support qca8081 genphy_c45_pma_read_abilities
authorLuo Jie <quic_luoj@quicinc.com>
Sun, 16 Jul 2023 08:49:19 +0000 (16:49 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 Jul 2023 09:15:13 +0000 (10:15 +0100)
qca8081 PHY supports to use genphy_c45_pma_read_abilities for
getting the PHY features supported except for the autoneg ability

but autoneg ability exists in MDIO_STAT1 instead of MMD7.1, add it
manually after calling genphy_c45_pma_read_abilities.

Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/at803x.c

index c1f307d..11388ef 100644 (file)
@@ -897,15 +897,6 @@ static int at803x_get_features(struct phy_device *phydev)
        if (err)
                return err;
 
-       if (phydev->drv->phy_id == QCA8081_PHY_ID) {
-               err = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_PMA_NG_EXTABLE);
-               if (err < 0)
-                       return err;
-
-               linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, phydev->supported,
-                               err & MDIO_PMA_NG_EXTABLE_2_5GBT);
-       }
-
        if (phydev->drv->phy_id != ATH8031_PHY_ID)
                return 0;
 
@@ -1991,6 +1982,23 @@ static int qca808x_cable_test_get_status(struct phy_device *phydev, bool *finish
        return 0;
 }
 
+static int qca808x_get_features(struct phy_device *phydev)
+{
+       int ret;
+
+       ret = genphy_c45_pma_read_abilities(phydev);
+       if (ret)
+               return ret;
+
+       /* The autoneg ability is not existed in bit3 of MMD7.1,
+        * but it is supported by qca808x PHY, so we add it here
+        * manually.
+        */
+       linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported);
+
+       return 0;
+}
+
 static struct phy_driver at803x_driver[] = {
 {
        /* Qualcomm Atheros AR8035 */
@@ -2160,7 +2168,7 @@ static struct phy_driver at803x_driver[] = {
        .set_tunable            = at803x_set_tunable,
        .set_wol                = at803x_set_wol,
        .get_wol                = at803x_get_wol,
-       .get_features           = at803x_get_features,
+       .get_features           = qca808x_get_features,
        .config_aneg            = at803x_config_aneg,
        .suspend                = genphy_suspend,
        .resume                 = genphy_resume,