ipq40xx: 5.4: fix networking PHY driver

In 5.4 kernel old u32 array way of setting network features was dropped and linkmode is now the only way.
So lets migrate the PHY driver to support linkmode.
Also, now in order for gigabit to work, PHY driver needs to advertise PHY_GBIT_FEATURES instead of PHY_BASIC_FEATURES

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
This commit is contained in:
Robert Marko 2020-03-03 20:19:30 +01:00 committed by Petr Štetiar
parent f521ef5ff3
commit 2b7344055b
2 changed files with 3 additions and 14 deletions

View File

@ -1837,8 +1837,8 @@
+ if (phydev->mdio.addr == 0)
+ ar40xx_priv->phy = phydev;
+
+ phydev->supported |= SUPPORTED_1000baseT_Full;
+ phydev->advertising |= ADVERTISED_1000baseT_Full;
+ linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->supported);
+ linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->advertising);
+ return 0;
+}
+
@ -1877,7 +1877,7 @@
+ .phy_id = 0x004d0000,
+ .name = "QCA Malibu",
+ .phy_id_mask = 0xffff0000,
+ .features = PHY_BASIC_FEATURES,
+ .features = PHY_GBIT_FEATURES,
+ .probe = ar40xx_phy_probe,
+ .remove = ar40xx_phy_remove,
+ .config_init = ar40xx_phy_config_init,

View File

@ -1,16 +1,5 @@
--- a/drivers/net/phy/ar40xx.c
+++ b/drivers/net/phy/ar40xx.c
@@ -1808,8 +1808,8 @@ ar40xx_phy_probe(struct phy_device *phyd
if (phydev->mdio.addr == 0)
ar40xx_priv->phy = phydev;
- phydev->supported |= SUPPORTED_1000baseT_Full;
- phydev->advertising |= ADVERTISED_1000baseT_Full;
+ phy_set_max_speed(phydev, SPEED_1000);
+ linkmode_copy(phydev->advertising, phydev->supported);
return 0;
}
@@ -2021,6 +2021,12 @@ static int ar40xx_probe(struct platform_
/* register switch */
swdev = &priv->dev;