From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Fainelli Subject: Re: [PATH RFC net-next 3/8] net: phy: Add helper to convert MII ADV register to a linkmode Date: Fri, 14 Sep 2018 15:23:14 -0700 Message-ID: <8c8fd712-d7bd-59b3-6ef9-187f45ba62b8@gmail.com> References: <1536961136-30453-1-git-send-email-andrew@lunn.ch> <1536961136-30453-4-git-send-email-andrew@lunn.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit To: Andrew Lunn , netdev Return-path: Received: from mail-ed1-f68.google.com ([209.85.208.68]:43696 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726969AbeIODju (ORCPT ); Fri, 14 Sep 2018 23:39:50 -0400 Received: by mail-ed1-f68.google.com with SMTP id z27-v6so8559006edb.10 for ; Fri, 14 Sep 2018 15:23:23 -0700 (PDT) In-Reply-To: <1536961136-30453-4-git-send-email-andrew@lunn.ch> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 09/14/2018 02:38 PM, Andrew Lunn wrote: > The phy_mii_ioctl can be used to write a value into the MII_ADVERTISE > register in the PHY. Since this changes the state of the PHY, we need > to make the same change to phydev->advertising. Add a helper which can > convert the register value to a linkmode. It would have been nice if we could eliminate the duplication between mii_adv_to_ethtool_adv_t() and mii_adv_to_linkmode_adv_t() but I don't really see how without changing the former function's signature. Reviewed-by: Florian Fainelli > > Signed-off-by: Andrew Lunn > --- > include/linux/mii.h | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/include/linux/mii.h b/include/linux/mii.h > index 567047ef0309..8c7da9473ad9 100644 > --- a/include/linux/mii.h > +++ b/include/linux/mii.h > @@ -303,6 +303,37 @@ static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa) > return result | mii_adv_to_ethtool_adv_x(lpa); > } > > +/** > + * mii_adv_to_linkmode_adv_t > + * @advertising:pointer to destination link mode. > + * @adv: value of the MII_ADVERTISE register > + * > + * A small helper function that translates MII_ADVERTISE bits > + * to linkmode advertisement settings. > + */ > +static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising, > + u32 adv) > +{ > + linkmode_zero(advertising); > + > + if (adv & ADVERTISE_10HALF) > + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, > + advertising); > + if (adv & ADVERTISE_10FULL) > + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, > + advertising); > + if (adv & ADVERTISE_100HALF) > + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, > + advertising); > + if (adv & ADVERTISE_100FULL) > + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, > + advertising); > + if (adv & ADVERTISE_PAUSE_CAP) > + linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, advertising); > + if (adv & ADVERTISE_PAUSE_ASYM) > + linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, advertising); > +} > + > /** > * mii_advertise_flowctrl - get flow control advertisement flags > * @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both) > -- Florian