Change rtl_speed_down() to use phylib. Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com> --- drivers/net/ethernet/realtek/r8169.c | 33 +++++++++++++--------------- 1 file changed, 15 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 311321ee..807fbc75 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -4240,6 +4240,10 @@ static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) rtl_writephy(tp, 0x0b, 0x0000); //w 0x0b 15 0 0 } + /* We may have called rtl_speed_down before */ + dev->phydev->advertising = dev->phydev->supported; + genphy_config_aneg(dev->phydev); + genphy_soft_reset(dev->phydev); rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, @@ -4323,28 +4327,21 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp) } } +#define BASET10 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full) +#define BASET100 (ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full) +#define BASET1000 (ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full) + static void rtl_speed_down(struct rtl8169_private *tp) { - u32 adv; - int lpa; + struct phy_device *phydev = tp->dev->phydev; + u32 adv = phydev->lp_advertising & phydev->supported; - rtl_writephy(tp, 0x1f, 0x0000); - lpa = rtl_readphy(tp, MII_LPA); + if (adv & BASET10) + phydev->advertising &= ~(BASET100 | BASET1000); + else if (adv & BASET100) + phydev->advertising &= ~BASET1000; - if (lpa & (LPA_10HALF | LPA_10FULL)) - adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full; - else if (lpa & (LPA_100HALF | LPA_100FULL)) - adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | - ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full; - else - adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | - ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | - (tp->mii.supports_gmii ? - ADVERTISED_1000baseT_Half | - ADVERTISED_1000baseT_Full : 0); - - rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, - adv); + genphy_config_aneg(phydev); } static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) -- 2.18.0