mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
ixgbe: limit setting speed to only one at a time for QSFP modules
QSFP+ modules do not support auto negotiation and should advertise only one speed at a time. This patch adds logic in ethtool to allow setting and reporting the advertised speed at either 1Gbps or 10Gbps, but not both. Also limits the speed set in ixgbe_sfp_link_config_subtask() to highest supported. Previously the link was set to whatever the supported speeds were. Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
91ffdc842b
commit
ed33ff66d8
@ -186,6 +186,11 @@ static int ixgbe_get_settings(struct net_device *netdev,
|
||||
ecmd->advertising |= ADVERTISED_1000baseT_Full;
|
||||
if (supported_link & IXGBE_LINK_SPEED_100_FULL)
|
||||
ecmd->advertising |= ADVERTISED_100baseT_Full;
|
||||
|
||||
if (hw->phy.multispeed_fiber && !autoneg) {
|
||||
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
||||
ecmd->advertising = ADVERTISED_10000baseT_Full;
|
||||
}
|
||||
}
|
||||
|
||||
if (autoneg) {
|
||||
@ -314,6 +319,14 @@ static int ixgbe_set_settings(struct net_device *netdev,
|
||||
if (ecmd->advertising & ~ecmd->supported)
|
||||
return -EINVAL;
|
||||
|
||||
/* only allow one speed at a time if no autoneg */
|
||||
if (!ecmd->autoneg && hw->phy.multispeed_fiber) {
|
||||
if (ecmd->advertising ==
|
||||
(ADVERTISED_10000baseT_Full |
|
||||
ADVERTISED_1000baseT_Full))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
old = hw->phy.autoneg_advertised;
|
||||
advertised = 0;
|
||||
if (ecmd->advertising & ADVERTISED_10000baseT_Full)
|
||||
|
@ -6000,8 +6000,16 @@ static void ixgbe_sfp_link_config_subtask(struct ixgbe_adapter *adapter)
|
||||
adapter->flags &= ~IXGBE_FLAG_NEED_LINK_CONFIG;
|
||||
|
||||
speed = hw->phy.autoneg_advertised;
|
||||
if ((!speed) && (hw->mac.ops.get_link_capabilities))
|
||||
if ((!speed) && (hw->mac.ops.get_link_capabilities)) {
|
||||
hw->mac.ops.get_link_capabilities(hw, &speed, &autoneg);
|
||||
|
||||
/* setup the highest link when no autoneg */
|
||||
if (!autoneg) {
|
||||
if (speed & IXGBE_LINK_SPEED_10GB_FULL)
|
||||
speed = IXGBE_LINK_SPEED_10GB_FULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (hw->mac.ops.setup_link)
|
||||
hw->mac.ops.setup_link(hw, speed, true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user