bnxt_en: Improve link up detection.
In bnxt_update_phy_setting(), ethtool_get_link_ksettings() and bnxt_disable_an_for_lpbk(), we inconsistently use netif_carrier_ok() to determine link. Instead, we should use bp->link_info.link_up which has the true link state. The netif_carrier state may be off during self-test and while the device is being reset and may not always reflect the true link state. By always using bp->link_info.link_up, the code is now more consistent and more correct. Some unnecessary link toggles are now prevented with this patch. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
db038b1b27
commit
83d8f5e92d
|
@ -9064,7 +9064,7 @@ static int bnxt_update_phy_setting(struct bnxt *bp)
|
|||
/* The last close may have shutdown the link, so need to call
|
||||
* PHY_CFG to bring it back up.
|
||||
*/
|
||||
if (!netif_carrier_ok(bp->dev))
|
||||
if (!bp->link_info.link_up)
|
||||
update_link = true;
|
||||
|
||||
if (!bnxt_eee_config_ok(bp))
|
||||
|
|
|
@ -1462,15 +1462,15 @@ static int bnxt_get_link_ksettings(struct net_device *dev,
|
|||
ethtool_link_ksettings_add_link_mode(lk_ksettings,
|
||||
advertising, Autoneg);
|
||||
base->autoneg = AUTONEG_ENABLE;
|
||||
if (link_info->phy_link_status == BNXT_LINK_LINK)
|
||||
base->duplex = DUPLEX_UNKNOWN;
|
||||
if (link_info->phy_link_status == BNXT_LINK_LINK) {
|
||||
bnxt_fw_to_ethtool_lp_adv(link_info, lk_ksettings);
|
||||
if (link_info->duplex & BNXT_LINK_DUPLEX_FULL)
|
||||
base->duplex = DUPLEX_FULL;
|
||||
else
|
||||
base->duplex = DUPLEX_HALF;
|
||||
}
|
||||
ethtool_speed = bnxt_fw_to_ethtool_speed(link_info->link_speed);
|
||||
if (!netif_carrier_ok(dev))
|
||||
base->duplex = DUPLEX_UNKNOWN;
|
||||
else if (link_info->duplex & BNXT_LINK_DUPLEX_FULL)
|
||||
base->duplex = DUPLEX_FULL;
|
||||
else
|
||||
base->duplex = DUPLEX_HALF;
|
||||
} else {
|
||||
base->autoneg = AUTONEG_DISABLE;
|
||||
ethtool_speed =
|
||||
|
@ -2707,7 +2707,7 @@ static int bnxt_disable_an_for_lpbk(struct bnxt *bp,
|
|||
return rc;
|
||||
|
||||
fw_speed = PORT_PHY_CFG_REQ_FORCE_LINK_SPEED_1GB;
|
||||
if (netif_carrier_ok(bp->dev))
|
||||
if (bp->link_info.link_up)
|
||||
fw_speed = bp->link_info.link_speed;
|
||||
else if (fw_advertising & BNXT_LINK_SPEED_MSK_10GB)
|
||||
fw_speed = PORT_PHY_CFG_REQ_FORCE_LINK_SPEED_10GB;
|
||||
|
|
Loading…
Reference in New Issue