Skip to content

Commit 778a57d

Browse files
committed
Merge branch 'net-phy-add-helpers-for-handling-C45-10GBT-AN-register-values'
Heiner Kallweit says: ==================== net: phy: add helpers for handling C45 10GBT AN register values Similar to the existing helpers for the Clause 22 registers add helpers to deal with converting Clause 45 advertisement registers to / from link mode bitmaps. Note that these helpers are 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 few helpers which aren't used by this series. They will follow together with the users. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents bf9d787 + 96c2be3 commit 778a57d

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

drivers/net/phy/phy-c45.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -248,15 +248,7 @@ int genphy_c45_read_lpa(struct phy_device *phydev)
248248
if (val < 0)
249249
return val;
250250

251-
if (val & MDIO_AN_10GBT_STAT_LP2_5G)
252-
linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
253-
phydev->lp_advertising);
254-
if (val & MDIO_AN_10GBT_STAT_LP5G)
255-
linkmode_set_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
256-
phydev->lp_advertising);
257-
if (val & MDIO_AN_10GBT_STAT_LP10G)
258-
linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
259-
phydev->lp_advertising);
251+
mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, val);
260252

261253
return 0;
262254
}

include/linux/mdio.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,25 @@ static inline u32 linkmode_adv_to_mii_10gbt_adv_t(unsigned long *advertising)
286286
return result;
287287
}
288288

289+
/**
290+
* mii_10gbt_stat_mod_linkmode_lpa_t
291+
* @advertising: target the linkmode advertisement settings
292+
* @adv: value of the C45 10GBASE-T AN STATUS register
293+
*
294+
* A small helper function that translates C45 10GBASE-T AN STATUS register bits
295+
* to linkmode advertisement settings. Other bits in advertising aren't changed.
296+
*/
297+
static inline void mii_10gbt_stat_mod_linkmode_lpa_t(unsigned long *advertising,
298+
u32 lpa)
299+
{
300+
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
301+
advertising, lpa & MDIO_AN_10GBT_STAT_LP2_5G);
302+
linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
303+
advertising, lpa & MDIO_AN_10GBT_STAT_LP5G);
304+
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
305+
advertising, lpa & MDIO_AN_10GBT_STAT_LP10G);
306+
}
307+
289308
int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
290309
int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
291310

0 commit comments

Comments
 (0)