ixgbe: add mac type to the version in ethtool_regs
[cascardo/linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_ethtool.c
index c3f1afd..d375472 100644 (file)
@@ -231,6 +231,10 @@ static int ixgbe_get_settings(struct net_device *netdev,
                case ixgbe_sfp_type_lr:
                case ixgbe_sfp_type_srlr_core0:
                case ixgbe_sfp_type_srlr_core1:
+               case ixgbe_sfp_type_1g_sx_core0:
+               case ixgbe_sfp_type_1g_sx_core1:
+               case ixgbe_sfp_type_1g_lx_core0:
+               case ixgbe_sfp_type_1g_lx_core1:
                        ecmd->supported |= SUPPORTED_FIBRE;
                        ecmd->advertising |= ADVERTISED_FIBRE;
                        ecmd->port = PORT_FIBRE;
@@ -246,12 +250,6 @@ static int ixgbe_get_settings(struct net_device *netdev,
                        ecmd->advertising |= ADVERTISED_TP;
                        ecmd->port = PORT_TP;
                        break;
-               case ixgbe_sfp_type_1g_sx_core0:
-               case ixgbe_sfp_type_1g_sx_core1:
-                       ecmd->supported |= SUPPORTED_FIBRE;
-                       ecmd->advertising |= ADVERTISED_FIBRE;
-                       ecmd->port = PORT_FIBRE;
-                       break;
                case ixgbe_sfp_type_unknown:
                default:
                        ecmd->supported |= SUPPORTED_FIBRE;
@@ -442,7 +440,8 @@ static void ixgbe_get_regs(struct net_device *netdev,
 
        memset(p, 0, IXGBE_REGS_LEN * sizeof(u32));
 
-       regs->version = (1 << 24) | hw->revision_id << 16 | hw->device_id;
+       regs->version = hw->mac.type << 24 | hw->revision_id << 16 |
+                       hw->device_id;
 
        /* General Registers */
        regs_buff[0] = IXGBE_READ_REG(hw, IXGBE_CTRL);
@@ -1611,16 +1610,9 @@ static int ixgbe_setup_loopback_test(struct ixgbe_adapter *adapter)
        struct ixgbe_hw *hw = &adapter->hw;
        u32 reg_data;
 
-       /* X540 needs to set the MACC.FLU bit to force link up */
-       if (adapter->hw.mac.type == ixgbe_mac_X540) {
-               reg_data = IXGBE_READ_REG(hw, IXGBE_MACC);
-               reg_data |= IXGBE_MACC_FLU;
-               IXGBE_WRITE_REG(hw, IXGBE_MACC, reg_data);
-       }
 
-       /* right now we only support MAC loopback in the driver */
-       reg_data = IXGBE_READ_REG(hw, IXGBE_HLREG0);
        /* Setup MAC loopback */
+       reg_data = IXGBE_READ_REG(hw, IXGBE_HLREG0);
        reg_data |= IXGBE_HLREG0_LPBK;
        IXGBE_WRITE_REG(hw, IXGBE_HLREG0, reg_data);
 
@@ -1628,10 +1620,19 @@ static int ixgbe_setup_loopback_test(struct ixgbe_adapter *adapter)
        reg_data |= IXGBE_FCTRL_BAM | IXGBE_FCTRL_SBP | IXGBE_FCTRL_MPE;
        IXGBE_WRITE_REG(hw, IXGBE_FCTRL, reg_data);
 
-       reg_data = IXGBE_READ_REG(hw, IXGBE_AUTOC);
-       reg_data &= ~IXGBE_AUTOC_LMS_MASK;
-       reg_data |= IXGBE_AUTOC_LMS_10G_LINK_NO_AN | IXGBE_AUTOC_FLU;
-       IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_data);
+       /* X540 needs to set the MACC.FLU bit to force link up */
+       if (adapter->hw.mac.type == ixgbe_mac_X540) {
+               reg_data = IXGBE_READ_REG(hw, IXGBE_MACC);
+               reg_data |= IXGBE_MACC_FLU;
+               IXGBE_WRITE_REG(hw, IXGBE_MACC, reg_data);
+       } else {
+               if (hw->mac.orig_autoc) {
+                       reg_data = hw->mac.orig_autoc | IXGBE_AUTOC_FLU;
+                       IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg_data);
+               } else {
+                       return 10;
+               }
+       }
        IXGBE_WRITE_FLUSH(hw);
        usleep_range(10000, 20000);