bnxt_en: Fix ethtool autoneg logic.
1. Determine autoneg on|off setting from link_info->autoneg. Using the firmware returned setting can be misleading if autoneg is changed and there hasn't been a phy update from the firmware. 2. If autoneg is disabled, link_info->autoneg should be set to 0 to indicate both speed and flow control autoneg are disabled. 3. To enable autoneg flow control, speed autoneg must be enabled. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
56bb7fd994
commit
b763499ee1
|
@ -561,7 +561,7 @@ static int bnxt_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
|||
if (link_info->auto_link_speeds)
|
||||
cmd->supported |= SUPPORTED_Autoneg;
|
||||
|
||||
if (BNXT_AUTO_MODE(link_info->auto_mode)) {
|
||||
if (link_info->autoneg) {
|
||||
cmd->advertising =
|
||||
bnxt_fw_to_ethtool_advertised_spds(link_info);
|
||||
cmd->advertising |= ADVERTISED_Autoneg;
|
||||
|
@ -729,7 +729,7 @@ static int bnxt_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
|||
speed = ethtool_cmd_speed(cmd);
|
||||
link_info->req_link_speed = bnxt_get_fw_speed(dev, speed);
|
||||
link_info->req_duplex = BNXT_LINK_DUPLEX_FULL;
|
||||
link_info->autoneg &= ~BNXT_AUTONEG_SPEED;
|
||||
link_info->autoneg = 0;
|
||||
link_info->advertising = 0;
|
||||
}
|
||||
|
||||
|
@ -748,8 +748,7 @@ static void bnxt_get_pauseparam(struct net_device *dev,
|
|||
|
||||
if (BNXT_VF(bp))
|
||||
return;
|
||||
epause->autoneg = !!(link_info->auto_pause_setting &
|
||||
BNXT_LINK_PAUSE_BOTH);
|
||||
epause->autoneg = !!(link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL);
|
||||
epause->rx_pause = ((link_info->pause & BNXT_LINK_PAUSE_RX) != 0);
|
||||
epause->tx_pause = ((link_info->pause & BNXT_LINK_PAUSE_TX) != 0);
|
||||
}
|
||||
|
@ -765,6 +764,9 @@ static int bnxt_set_pauseparam(struct net_device *dev,
|
|||
return rc;
|
||||
|
||||
if (epause->autoneg) {
|
||||
if (!(link_info->autoneg & BNXT_AUTONEG_SPEED))
|
||||
return -EINVAL;
|
||||
|
||||
link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
|
||||
link_info->req_flow_ctrl |= BNXT_LINK_PAUSE_BOTH;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue