Commit 5f15eed2 authored by Andrew Lunn's avatar Andrew Lunn Committed by David S. Miller

net: mii: Fix autoneg in mii_lpa_to_linkmode_lpa_t()

mii_adv_to_linkmode_adv_t() clears all bits before setting it needs to
set. This means the freshly set Autoneg gets cleared.

Change the order, and add comments about it clearing the old content
of the bitmap.

Fixes: c0ec3c27 ("net: phy: Convert u32 phydev->lp_advertising to linkmode")
Reported-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b255e500
...@@ -378,7 +378,8 @@ static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa) ...@@ -378,7 +378,8 @@ static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa)
* @adv: value of the MII_ADVERTISE register * @adv: value of the MII_ADVERTISE register
* *
* A small helper function that translates MII_ADVERTISE bits * A small helper function that translates MII_ADVERTISE bits
* to linkmode advertisement settings. * to linkmode advertisement settings. Clears the old value
* of advertising.
*/ */
static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising, static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising,
u32 adv) u32 adv)
...@@ -408,16 +409,18 @@ static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising, ...@@ -408,16 +409,18 @@ static inline void mii_adv_to_linkmode_adv_t(unsigned long *advertising,
* @adv: value of the MII_LPA register * @adv: value of the MII_LPA register
* *
* A small helper function that translates MII_LPA bits, when in * A small helper function that translates MII_LPA bits, when in
* 1000Base-T mode, to linkmode LP advertisement settings. * 1000Base-T mode, to linkmode LP advertisement settings. Clears the
* old value of advertising
*/ */
static inline void mii_lpa_to_linkmode_lpa_t(unsigned long *lp_advertising, static inline void mii_lpa_to_linkmode_lpa_t(unsigned long *lp_advertising,
u32 lpa) u32 lpa)
{ {
mii_adv_to_linkmode_adv_t(lp_advertising, lpa);
if (lpa & LPA_LPACK) if (lpa & LPA_LPACK)
linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
lp_advertising); lp_advertising);
mii_adv_to_linkmode_adv_t(lp_advertising, lpa);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment