ixgbe: Disable flow control for XFI
authorTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 7 Jun 2017 21:36:21 +0000 (14:36 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 25 Jul 2017 23:31:51 +0000 (16:31 -0700)
Flow control autonegotiation is not supported for XFI.  Make sure that
ixgbe_device_supports_autoneg_fc() returns false and
hw->fc.disable_fc_autoneg is set to true to avoid running the fc_autoneg
function for that device.

Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c

index 40ae7db468eafe25ba8d26dcd5304a7a4b95c1ef..2c19070d2a0b08dee8b47a3d98bf54971741cb78 100644 (file)
@@ -97,7 +97,10 @@ bool ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
 
                break;
        case ixgbe_media_type_backplane:
-               supported = true;
+               if (hw->device_id == IXGBE_DEV_ID_X550EM_X_XFI)
+                       supported = false;
+               else
+                       supported = true;
                break;
        case ixgbe_media_type_copper:
                /* only some copper devices support flow control autoneg */
index 95adbda36235b4d27537d0bb2aed38f16e7463d7..19fbb2f28ea4574e5ed6176a41f3181dfe1c305a 100644 (file)
@@ -2843,7 +2843,7 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)
 {
        bool pause, asm_dir;
        u32 reg_val;
-       s32 rc;
+       s32 rc = 0;
 
        /* Validate the requested mode */
        if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
@@ -2886,32 +2886,37 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)
                return IXGBE_ERR_CONFIG;
        }
 
-       if (hw->device_id != IXGBE_DEV_ID_X550EM_X_KR &&
-           hw->device_id != IXGBE_DEV_ID_X550EM_A_KR &&
-           hw->device_id != IXGBE_DEV_ID_X550EM_A_KR_L)
-               return 0;
-
-       rc = hw->mac.ops.read_iosf_sb_reg(hw,
-                                         IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
-                                         IXGBE_SB_IOSF_TARGET_KR_PHY,
-                                         &reg_val);
-       if (rc)
-               return rc;
-
-       reg_val &= ~(IXGBE_KRM_AN_CNTL_1_SYM_PAUSE |
-                    IXGBE_KRM_AN_CNTL_1_ASM_PAUSE);
-       if (pause)
-               reg_val |= IXGBE_KRM_AN_CNTL_1_SYM_PAUSE;
-       if (asm_dir)
-               reg_val |= IXGBE_KRM_AN_CNTL_1_ASM_PAUSE;
-       rc = hw->mac.ops.write_iosf_sb_reg(hw,
-                                          IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
-                                          IXGBE_SB_IOSF_TARGET_KR_PHY,
-                                          reg_val);
-
-       /* This device does not fully support AN. */
-       hw->fc.disable_fc_autoneg = true;
+       switch (hw->device_id) {
+       case IXGBE_DEV_ID_X550EM_X_KR:
+       case IXGBE_DEV_ID_X550EM_A_KR:
+       case IXGBE_DEV_ID_X550EM_A_KR_L:
+               rc = hw->mac.ops.read_iosf_sb_reg(hw,
+                                           IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
+                                           IXGBE_SB_IOSF_TARGET_KR_PHY,
+                                           &reg_val);
+               if (rc)
+                       return rc;
 
+               reg_val &= ~(IXGBE_KRM_AN_CNTL_1_SYM_PAUSE |
+                            IXGBE_KRM_AN_CNTL_1_ASM_PAUSE);
+               if (pause)
+                       reg_val |= IXGBE_KRM_AN_CNTL_1_SYM_PAUSE;
+               if (asm_dir)
+                       reg_val |= IXGBE_KRM_AN_CNTL_1_ASM_PAUSE;
+               rc = hw->mac.ops.write_iosf_sb_reg(hw,
+                                           IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
+                                           IXGBE_SB_IOSF_TARGET_KR_PHY,
+                                           reg_val);
+
+               /* This device does not fully support AN. */
+               hw->fc.disable_fc_autoneg = true;
+               break;
+       case IXGBE_DEV_ID_X550EM_X_XFI:
+               hw->fc.disable_fc_autoneg = true;
+               break;
+       default:
+               break;
+       }
        return rc;
 }