[Intel-wired-lan] [PATCH] ixgbe: advertise highest capable link speed

Paul Greenwalt paul.greenwalt at intel.com
Mon Oct 23 15:22:49 UTC 2017


On module insert advertise highest capable link speed. If module is
capable of 10G, then advertise 10G. If autoneg is enabled, then
advertise modules capable link speeds. If module is capable of
single-rate 1G, then advertise 1G.

Signed-off-by: Paul Greenwalt <paul.greenwalt at intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 901ab12..2bd132c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7648,7 +7648,8 @@ static void ixgbe_sfp_detection_subtask(struct ixgbe_adapter *adapter)
 static void ixgbe_sfp_link_config_subtask(struct ixgbe_adapter *adapter)
 {
 	struct ixgbe_hw *hw = &adapter->hw;
-	u32 speed;
+	u32 cap_speed;
+	u32 speed = 0;
 	bool autoneg = false;
 
 	if (!(adapter->flags & IXGBE_FLAG_NEED_LINK_CONFIG))
@@ -7660,15 +7661,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)) {
-		hw->mac.ops.get_link_capabilities(hw, &speed, &autoneg);
+	hw->mac.ops.get_link_capabilities(hw, &cap_speed, &autoneg);
 
-		/* setup the highest link when no autoneg */
-		if (!autoneg) {
-			if (speed & IXGBE_LINK_SPEED_10GB_FULL)
-				speed = IXGBE_LINK_SPEED_10GB_FULL;
-		}
+	/* advertise highest capable link speed */
+	if (cap_speed & IXGBE_LINK_SPEED_10GB_FULL) {
+		if (!autoneg)
+			speed = IXGBE_LINK_SPEED_10GB_FULL;
+		else
+			speed = cap_speed;
+	} else if (cap_speed == IXGBE_LINK_SPEED_1GB_FULL) {
+		speed = IXGBE_LINK_SPEED_1GB_FULL;
 	}
 
 	if (hw->mac.ops.setup_link)
-- 
2.7.4



More information about the Intel-wired-lan mailing list