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-15 21:25:00 +08:00 committed by AmadeusGhost
parent c3d471c786
commit 4ba64b760f
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;