ipq40xx: 5.4: fix networking PHY driver
authorRobert Marko <robert.marko@sartura.hr>
Tue, 3 Mar 2020 19:19:30 +0000 (20:19 +0100)
committerPetr Štetiar <ynezz@true.cz>
Mon, 16 Mar 2020 21:21:45 +0000 (22:21 +0100)
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>
target/linux/ipq40xx/patches-5.4/705-net-add-qualcomm-ar40xx-phy.patch
target/linux/ipq40xx/patches-5.4/706-ar40xx-abort-probe-on-missig-phy.patch

index 6df447fcd5e359535a92ed340b3f7786829921af..083de038a2793b2c15e4d9921bba2787370727a6 100644 (file)
 +      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;
 +}
 +
 +      .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,
index cda05bfb9f603d5d26b9ee0d34a60803a1783aa2..19474bff0d0d669197c6bb6a19494c02f9e6ca28 100644 (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;