diff options
Diffstat (limited to 'drivers/net/mdio.c')
| -rw-r--r-- | drivers/net/mdio.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/mdio.c b/drivers/net/mdio.c index 21f8754fcf4..e85bf04cf81 100644 --- a/drivers/net/mdio.c +++ b/drivers/net/mdio.c @@ -162,6 +162,10 @@ static u32 mdio45_get_an(const struct mdio_if_info *mdio, u16 addr)  		result |= ADVERTISED_100baseT_Half;  	if (reg & ADVERTISE_100FULL)  		result |= ADVERTISED_100baseT_Full; +	if (reg & ADVERTISE_PAUSE_CAP) +		result |= ADVERTISED_Pause; +	if (reg & ADVERTISE_PAUSE_ASYM) +		result |= ADVERTISED_Asym_Pause;  	return result;  } @@ -344,11 +348,9 @@ void mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio,  	old_adv = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN,  				  MDIO_AN_ADVERTISE); -	adv = old_adv & ~(ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); -	if (ecmd->autoneg) -		adv |= mii_advertise_flowctrl( -			(ecmd->rx_pause ? FLOW_CTRL_RX : 0) | -			(ecmd->tx_pause ? FLOW_CTRL_TX : 0)); +	adv = ((old_adv & ~(ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM)) | +	       mii_advertise_flowctrl((ecmd->rx_pause ? FLOW_CTRL_RX : 0) | +				      (ecmd->tx_pause ? FLOW_CTRL_TX : 0)));  	if (adv != old_adv) {  		mdio->mdio_write(mdio->dev, mdio->prtad, MDIO_MMD_AN,  				 MDIO_AN_ADVERTISE, adv);  |