mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-25 13:39:58 +07:00
net: phylink: ensure inband AN works correctly
Do not update the link interface mode while the link is down to avoid spurious link interface changes. Always call mac_config if we have a PHY to propagate the pause mode settings to the MAC. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
94d250fae4
commit
406cb0c4d1
@ -422,28 +422,21 @@ static void phylink_resolve(struct work_struct *w)
|
||||
|
||||
case MLO_AN_INBAND:
|
||||
phylink_get_mac_state(pl, &link_state);
|
||||
if (pl->phydev) {
|
||||
bool changed = false;
|
||||
|
||||
link_state.link = link_state.link &&
|
||||
pl->phy_state.link;
|
||||
/* If we have a phy, the "up" state is the union of
|
||||
* both the PHY and the MAC */
|
||||
if (pl->phydev)
|
||||
link_state.link &= pl->phy_state.link;
|
||||
|
||||
if (pl->phy_state.interface !=
|
||||
link_state.interface) {
|
||||
link_state.interface = pl->phy_state.interface;
|
||||
changed = true;
|
||||
}
|
||||
/* Only update if the PHY link is up */
|
||||
if (pl->phydev && pl->phy_state.link) {
|
||||
link_state.interface = pl->phy_state.interface;
|
||||
|
||||
/* Propagate the flow control from the PHY
|
||||
* to the MAC. Also propagate the interface
|
||||
* if changed.
|
||||
*/
|
||||
if (pl->phy_state.link || changed) {
|
||||
link_state.pause |= pl->phy_state.pause;
|
||||
phylink_resolve_flow(pl, &link_state);
|
||||
|
||||
phylink_mac_config(pl, &link_state);
|
||||
}
|
||||
/* If we have a PHY, we need to update with
|
||||
* the pause mode bits. */
|
||||
link_state.pause |= pl->phy_state.pause;
|
||||
phylink_resolve_flow(pl, &link_state);
|
||||
phylink_mac_config(pl, &link_state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user