diff options
author | Filip Sadowski <filip.sadowski@intel.com> | 2017-08-22 06:57:43 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2017-10-02 15:46:35 -0400 |
commit | d60bcc798000e015940fb47eb23b79dd2fda5c9e (patch) | |
tree | dbd5c9d6da692ae7d9ca1ead8813b4d0dc89388e /drivers/net/ethernet/intel | |
parent | 54902349ee95045b67e2f0c39b75f5418540064b (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.h | 20 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_common.c | 11 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h | 20 |
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 | ||
1960 | I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); | 1976 | I40E_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 | ||
1956 | I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); | 1972 | I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); |