aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel
diff options
context:
space:
mode:
authorFilip Sadowski <filip.sadowski@intel.com>2017-08-22 06:57:43 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-10-02 15:46:35 -0400
commitd60bcc798000e015940fb47eb23b79dd2fda5c9e (patch)
treedbd5c9d6da692ae7d9ca1ead8813b4d0dc89388e /drivers/net/ethernet/intel
parent54902349ee95045b67e2f0c39b75f5418540064b (diff)
i40e: Fix reporting of supported link modes
This patch fixes incorrect reporting of supported link modes on some NICs. Signed-off-by: Filip Sadowski <filip.sadowski@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h20
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_common.c11
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h20
3 files changed, 46 insertions, 5 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
index e2a9ec80a623..5d0291c1337e 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
@@ -1734,6 +1734,8 @@ enum i40e_aq_phy_type {
1734 I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB, 1734 I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB,
1735 I40E_PHY_TYPE_10GBASE_AOC = 0xC, 1735 I40E_PHY_TYPE_10GBASE_AOC = 0xC,
1736 I40E_PHY_TYPE_40GBASE_AOC = 0xD, 1736 I40E_PHY_TYPE_40GBASE_AOC = 0xD,
1737 I40E_PHY_TYPE_UNRECOGNIZED = 0xE,
1738 I40E_PHY_TYPE_UNSUPPORTED = 0xF,
1737 I40E_PHY_TYPE_100BASE_TX = 0x11, 1739 I40E_PHY_TYPE_100BASE_TX = 0x11,
1738 I40E_PHY_TYPE_1000BASE_T = 0x12, 1740 I40E_PHY_TYPE_1000BASE_T = 0x12,
1739 I40E_PHY_TYPE_10GBASE_T = 0x13, 1741 I40E_PHY_TYPE_10GBASE_T = 0x13,
@@ -1752,6 +1754,8 @@ enum i40e_aq_phy_type {
1752 I40E_PHY_TYPE_25GBASE_CR = 0x20, 1754 I40E_PHY_TYPE_25GBASE_CR = 0x20,
1753 I40E_PHY_TYPE_25GBASE_SR = 0x21, 1755 I40E_PHY_TYPE_25GBASE_SR = 0x21,
1754 I40E_PHY_TYPE_25GBASE_LR = 0x22, 1756 I40E_PHY_TYPE_25GBASE_LR = 0x22,
1757 I40E_PHY_TYPE_EMPTY = 0xFE,
1758 I40E_PHY_TYPE_DEFAULT = 0xFF,
1755 I40E_PHY_TYPE_MAX 1759 I40E_PHY_TYPE_MAX
1756}; 1760};
1757 1761
@@ -1942,19 +1946,31 @@ struct i40e_aqc_get_link_status {
1942#define I40E_AQ_25G_SERDES_UCODE_ERR 0X04 1946#define I40E_AQ_25G_SERDES_UCODE_ERR 0X04
1943#define I40E_AQ_25G_NIMB_UCODE_ERR 0X05 1947#define I40E_AQ_25G_NIMB_UCODE_ERR 0X05
1944 u8 loopback; /* use defines from i40e_aqc_set_lb_mode */ 1948 u8 loopback; /* use defines from i40e_aqc_set_lb_mode */
1949/* Since firmware API 1.7 loopback field keeps power class info as well */
1950#define I40E_AQ_LOOPBACK_MASK 0x07
1951#define I40E_AQ_PWR_CLASS_SHIFT_LB 6
1952#define I40E_AQ_PWR_CLASS_MASK_LB (0x03 << I40E_AQ_PWR_CLASS_SHIFT_LB)
1945 __le16 max_frame_size; 1953 __le16 max_frame_size;
1946 u8 config; 1954 u8 config;
1947#define I40E_AQ_CONFIG_FEC_KR_ENA 0x01 1955#define I40E_AQ_CONFIG_FEC_KR_ENA 0x01
1948#define I40E_AQ_CONFIG_FEC_RS_ENA 0x02 1956#define I40E_AQ_CONFIG_FEC_RS_ENA 0x02
1949#define I40E_AQ_CONFIG_CRC_ENA 0x04 1957#define I40E_AQ_CONFIG_CRC_ENA 0x04
1950#define I40E_AQ_CONFIG_PACING_MASK 0x78 1958#define I40E_AQ_CONFIG_PACING_MASK 0x78
1951 u8 power_desc; 1959 union {
1960 struct {
1961 u8 power_desc;
1952#define I40E_AQ_LINK_POWER_CLASS_1 0x00 1962#define I40E_AQ_LINK_POWER_CLASS_1 0x00
1953#define I40E_AQ_LINK_POWER_CLASS_2 0x01 1963#define I40E_AQ_LINK_POWER_CLASS_2 0x01
1954#define I40E_AQ_LINK_POWER_CLASS_3 0x02 1964#define I40E_AQ_LINK_POWER_CLASS_3 0x02
1955#define I40E_AQ_LINK_POWER_CLASS_4 0x03 1965#define I40E_AQ_LINK_POWER_CLASS_4 0x03
1956#define I40E_AQ_PWR_CLASS_MASK 0x03 1966#define I40E_AQ_PWR_CLASS_MASK 0x03
1957 u8 reserved[4]; 1967 u8 reserved[4];
1968 };
1969 struct {
1970 u8 link_type[4];
1971 u8 link_type_ext;
1972 };
1973 };
1958}; 1974};
1959 1975
1960I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); 1976I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status);
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index 7346d8850c8e..64c15f4c9d2b 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -1821,7 +1821,7 @@ i40e_status i40e_aq_get_link_info(struct i40e_hw *hw,
1821 hw_link_info->fec_info = resp->config & (I40E_AQ_CONFIG_FEC_KR_ENA | 1821 hw_link_info->fec_info = resp->config & (I40E_AQ_CONFIG_FEC_KR_ENA |
1822 I40E_AQ_CONFIG_FEC_RS_ENA); 1822 I40E_AQ_CONFIG_FEC_RS_ENA);
1823 hw_link_info->ext_info = resp->ext_info; 1823 hw_link_info->ext_info = resp->ext_info;
1824 hw_link_info->loopback = resp->loopback; 1824 hw_link_info->loopback = resp->loopback & I40E_AQ_LOOPBACK_MASK;
1825 hw_link_info->max_frame_size = le16_to_cpu(resp->max_frame_size); 1825 hw_link_info->max_frame_size = le16_to_cpu(resp->max_frame_size);
1826 hw_link_info->pacing = resp->config & I40E_AQ_CONFIG_PACING_MASK; 1826 hw_link_info->pacing = resp->config & I40E_AQ_CONFIG_PACING_MASK;
1827 1827
@@ -1852,6 +1852,15 @@ i40e_status i40e_aq_get_link_info(struct i40e_hw *hw,
1852 hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE) 1852 hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE)
1853 hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU; 1853 hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU;
1854 1854
1855 if (hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR &&
1856 hw->aq.api_min_ver >= 7) {
1857 __le32 tmp;
1858
1859 memcpy(&tmp, resp->link_type, sizeof(tmp));
1860 hw->phy.phy_types = le32_to_cpu(tmp);
1861 hw->phy.phy_types |= ((u64)resp->link_type_ext << 32);
1862 }
1863
1855 /* save link status information */ 1864 /* save link status information */
1856 if (link) 1865 if (link)
1857 *link = *hw_link_info; 1866 *link = *hw_link_info;
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
index f9f48d1900b0..709d114fc305 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
@@ -1730,6 +1730,8 @@ enum i40e_aq_phy_type {
1730 I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB, 1730 I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB,
1731 I40E_PHY_TYPE_10GBASE_AOC = 0xC, 1731 I40E_PHY_TYPE_10GBASE_AOC = 0xC,
1732 I40E_PHY_TYPE_40GBASE_AOC = 0xD, 1732 I40E_PHY_TYPE_40GBASE_AOC = 0xD,
1733 I40E_PHY_TYPE_UNRECOGNIZED = 0xE,
1734 I40E_PHY_TYPE_UNSUPPORTED = 0xF,
1733 I40E_PHY_TYPE_100BASE_TX = 0x11, 1735 I40E_PHY_TYPE_100BASE_TX = 0x11,
1734 I40E_PHY_TYPE_1000BASE_T = 0x12, 1736 I40E_PHY_TYPE_1000BASE_T = 0x12,
1735 I40E_PHY_TYPE_10GBASE_T = 0x13, 1737 I40E_PHY_TYPE_10GBASE_T = 0x13,
@@ -1748,6 +1750,8 @@ enum i40e_aq_phy_type {
1748 I40E_PHY_TYPE_25GBASE_CR = 0x20, 1750 I40E_PHY_TYPE_25GBASE_CR = 0x20,
1749 I40E_PHY_TYPE_25GBASE_SR = 0x21, 1751 I40E_PHY_TYPE_25GBASE_SR = 0x21,
1750 I40E_PHY_TYPE_25GBASE_LR = 0x22, 1752 I40E_PHY_TYPE_25GBASE_LR = 0x22,
1753 I40E_PHY_TYPE_EMPTY = 0xFE,
1754 I40E_PHY_TYPE_DEFAULT = 0xFF,
1751 I40E_PHY_TYPE_MAX 1755 I40E_PHY_TYPE_MAX
1752}; 1756};
1753 1757
@@ -1938,19 +1942,31 @@ struct i40e_aqc_get_link_status {
1938#define I40E_AQ_25G_SERDES_UCODE_ERR 0X04 1942#define I40E_AQ_25G_SERDES_UCODE_ERR 0X04
1939#define I40E_AQ_25G_NIMB_UCODE_ERR 0X05 1943#define I40E_AQ_25G_NIMB_UCODE_ERR 0X05
1940 u8 loopback; /* use defines from i40e_aqc_set_lb_mode */ 1944 u8 loopback; /* use defines from i40e_aqc_set_lb_mode */
1945/* Since firmware API 1.7 loopback field keeps power class info as well */
1946#define I40E_AQ_LOOPBACK_MASK 0x07
1947#define I40E_AQ_PWR_CLASS_SHIFT_LB 6
1948#define I40E_AQ_PWR_CLASS_MASK_LB (0x03 << I40E_AQ_PWR_CLASS_SHIFT_LB)
1941 __le16 max_frame_size; 1949 __le16 max_frame_size;
1942 u8 config; 1950 u8 config;
1943#define I40E_AQ_CONFIG_FEC_KR_ENA 0x01 1951#define I40E_AQ_CONFIG_FEC_KR_ENA 0x01
1944#define I40E_AQ_CONFIG_FEC_RS_ENA 0x02 1952#define I40E_AQ_CONFIG_FEC_RS_ENA 0x02
1945#define I40E_AQ_CONFIG_CRC_ENA 0x04 1953#define I40E_AQ_CONFIG_CRC_ENA 0x04
1946#define I40E_AQ_CONFIG_PACING_MASK 0x78 1954#define I40E_AQ_CONFIG_PACING_MASK 0x78
1947 u8 power_desc; 1955 union {
1956 struct {
1957 u8 power_desc;
1948#define I40E_AQ_LINK_POWER_CLASS_1 0x00 1958#define I40E_AQ_LINK_POWER_CLASS_1 0x00
1949#define I40E_AQ_LINK_POWER_CLASS_2 0x01 1959#define I40E_AQ_LINK_POWER_CLASS_2 0x01
1950#define I40E_AQ_LINK_POWER_CLASS_3 0x02 1960#define I40E_AQ_LINK_POWER_CLASS_3 0x02
1951#define I40E_AQ_LINK_POWER_CLASS_4 0x03 1961#define I40E_AQ_LINK_POWER_CLASS_4 0x03
1952#define I40E_AQ_PWR_CLASS_MASK 0x03 1962#define I40E_AQ_PWR_CLASS_MASK 0x03
1953 u8 reserved[4]; 1963 u8 reserved[4];
1964 };
1965 struct {
1966 u8 link_type[4];
1967 u8 link_type_ext;
1968 };
1969 };
1954}; 1970};
1955 1971
1956I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); 1972I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status);