diff mbox series

[net-next,v2,1/2] net: phy: add helper mii_10gbt_stat_mod_linkmode_lpa_t

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

Commit Message

Heiner Kallweit Feb. 16, 2019, 4:26 p.m. UTC
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(+)

Comments

Florian Fainelli Feb. 17, 2019, 2:35 a.m. UTC | #1
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>
Heiner Kallweit Feb. 17, 2019, 8:02 a.m. UTC | #2
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 mbox series

Patch

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);