From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Lunn Subject: Re: [PATCH net-next 07/10] r8169: migrate speed_down function to phylib Date: Mon, 2 Jul 2018 23:20:05 +0200 Message-ID: <20180702212005.GF12564@lunn.ch> References: <096a5326-963c-9bef-6218-29fcde004111@gmail.com> <5be3d523-bb26-c2d6-71f4-165e9c6e45a9@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: David Miller , Florian Fainelli , Realtek linux nic maintainers , "netdev@vger.kernel.org" To: Heiner Kallweit Return-path: Received: from vps0.lunn.ch ([185.16.172.187]:49729 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753116AbeGBVUJ (ORCPT ); Mon, 2 Jul 2018 17:20:09 -0400 Content-Disposition: inline In-Reply-To: <5be3d523-bb26-c2d6-71f4-165e9c6e45a9@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: On Mon, Jul 02, 2018 at 09:37:08PM +0200, Heiner Kallweit wrote: > Change rtl_speed_down() to use phylib. > > Signed-off-by: Heiner Kallweit > --- > 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); > } It probably it is me being too tired, but i don't get what this is doing? Changing the local advertisement based on what the remote is advertising. Why? Andrew