Message ID | ebde74fb-2d0e-365c-f04c-288ce6d60368@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | net: phy: add helpers for handling C45 10GBT AN register values | expand |
On 2/16/2019 8:26 AM, Heiner Kallweit wrote: > Similar to the existing helpers for the Clause 22 registers add helper > mii_10gbt_stat_mod_linkmode_lpa_t. > > Note that this helper is defined in linux/mdio.h, not like the > Clause 22 helpers in linux/mii.h. Reason is that the Clause 45 register > constants are defined in uapi/linux/mdio.h. And uapi/linux/mdio.h > includes linux/mii.h before defining the C45 register constants. Nit: this also processes 2.5G and 5G but I can't suggest a better name, so this is as good as any. > > v2: > - remove helpers that don't have users in this series > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
On 17.02.2019 03:35, Florian Fainelli wrote: > > > On 2/16/2019 8:26 AM, Heiner Kallweit wrote: >> Similar to the existing helpers for the Clause 22 registers add helper >> mii_10gbt_stat_mod_linkmode_lpa_t. >> >> Note that this helper is defined in linux/mdio.h, not like the >> Clause 22 helpers in linux/mii.h. Reason is that the Clause 45 register >> constants are defined in uapi/linux/mdio.h. And uapi/linux/mdio.h >> includes linux/mii.h before defining the C45 register constants. > > Nit: this also processes 2.5G and 5G but I can't suggest a better name, > so this is as good as any. > I also thought about this and eventually decided to go with the register name from the Clause 45 (2015) spec. Not sure whether there's a newer version, but even if I (after 802.3bz was established) doubt that they would rename a register. >> >> v2: >> - remove helpers that don't have users in this series >> >> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> > > Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> >
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index bfa711416..5b872c45f 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -261,6 +261,25 @@ static inline u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv) return reg; } +/** + * mii_10gbt_stat_mod_linkmode_lpa_t + * @advertising: target the linkmode advertisement settings + * @adv: value of the C45 10GBASE-T AN STATUS register + * + * A small helper function that translates C45 10GBASE-T AN STATUS register bits + * to linkmode advertisement settings. Other bits in advertising aren't changed. + */ +static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising, + u32 lpa) +{ + linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP2_5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP5G); + linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, + advertising, lpa & MDIO_AN_10GBT_STAT_LP10G); +} + int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
Similar to the existing helpers for the Clause 22 registers add helper mii_10gbt_stat_mod_linkmode_lpa_t. Note that this helper is defined in linux/mdio.h, not like the Clause 22 helpers in linux/mii.h. Reason is that the Clause 45 register constants are defined in uapi/linux/mdio.h. And uapi/linux/mdio.h includes linux/mii.h before defining the C45 register constants. v2: - remove helpers that don't have users in this series Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- include/linux/mdio.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)