net: phylink: use phylib resolved flow control modes
Use the new phy_get_pause() helper to get the resolved pause modes for a PHY rather than resolving the pause modes ourselves. We temporarily retain our pause mode resolution for causes where there is no PHY attached, e.g. for fixed-link modes. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
2d5fbef0c8
Коммит
33faac8e03
|
@ -500,7 +500,6 @@ static void phylink_resolve(struct work_struct *w)
|
||||||
switch (pl->cur_link_an_mode) {
|
switch (pl->cur_link_an_mode) {
|
||||||
case MLO_AN_PHY:
|
case MLO_AN_PHY:
|
||||||
link_state = pl->phy_state;
|
link_state = pl->phy_state;
|
||||||
phylink_resolve_flow(pl, &link_state);
|
|
||||||
phylink_apply_manual_flow(pl, &link_state);
|
phylink_apply_manual_flow(pl, &link_state);
|
||||||
phylink_mac_config_up(pl, &link_state);
|
phylink_mac_config_up(pl, &link_state);
|
||||||
break;
|
break;
|
||||||
|
@ -523,9 +522,8 @@ static void phylink_resolve(struct work_struct *w)
|
||||||
link_state.interface = pl->phy_state.interface;
|
link_state.interface = pl->phy_state.interface;
|
||||||
|
|
||||||
/* If we have a PHY, we need to update with
|
/* If we have a PHY, we need to update with
|
||||||
* the pause mode bits. */
|
* the PHY flow control bits. */
|
||||||
link_state.pause |= pl->phy_state.pause;
|
link_state.pause = pl->phy_state.pause;
|
||||||
phylink_resolve_flow(pl, &link_state);
|
|
||||||
phylink_apply_manual_flow(pl, &link_state);
|
phylink_apply_manual_flow(pl, &link_state);
|
||||||
phylink_mac_config(pl, &link_state);
|
phylink_mac_config(pl, &link_state);
|
||||||
}
|
}
|
||||||
|
@ -714,15 +712,18 @@ static void phylink_phy_change(struct phy_device *phydev, bool up,
|
||||||
bool do_carrier)
|
bool do_carrier)
|
||||||
{
|
{
|
||||||
struct phylink *pl = phydev->phylink;
|
struct phylink *pl = phydev->phylink;
|
||||||
|
bool tx_pause, rx_pause;
|
||||||
|
|
||||||
|
phy_get_pause(phydev, &tx_pause, &rx_pause);
|
||||||
|
|
||||||
mutex_lock(&pl->state_mutex);
|
mutex_lock(&pl->state_mutex);
|
||||||
pl->phy_state.speed = phydev->speed;
|
pl->phy_state.speed = phydev->speed;
|
||||||
pl->phy_state.duplex = phydev->duplex;
|
pl->phy_state.duplex = phydev->duplex;
|
||||||
pl->phy_state.pause = MLO_PAUSE_NONE;
|
pl->phy_state.pause = MLO_PAUSE_NONE;
|
||||||
if (phydev->pause)
|
if (tx_pause)
|
||||||
pl->phy_state.pause |= MLO_PAUSE_SYM;
|
pl->phy_state.pause |= MLO_PAUSE_TX;
|
||||||
if (phydev->asym_pause)
|
if (rx_pause)
|
||||||
pl->phy_state.pause |= MLO_PAUSE_ASYM;
|
pl->phy_state.pause |= MLO_PAUSE_RX;
|
||||||
pl->phy_state.interface = phydev->interface;
|
pl->phy_state.interface = phydev->interface;
|
||||||
pl->phy_state.link = up;
|
pl->phy_state.link = up;
|
||||||
mutex_unlock(&pl->state_mutex);
|
mutex_unlock(&pl->state_mutex);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче