diff options
author | Jesse Brandeburg <jesse.brandeburg@intel.com> | 2015-03-27 03:12:09 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2015-03-27 03:12:09 -0400 |
commit | ae24b4095c2f9547d0f2ab2845155aabe4e564d0 (patch) | |
tree | 33cf76b7218df4d96d0b4ec563c915a1dcf6f72f | |
parent | 5a352dd0a3aac03b443c94828dfd7144261c8636 (diff) |
i40e/i40evf: implement KR2 support
The new devices need a new device ID some other defines to
handle the new 20G speed for KR2.
Change-ID: I03f717e364afe59657e8c9ce5ffaad856b4b21df
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
Tested-by: Jim Young <james.m.young@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_common.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 16 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_type.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_common.c | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_type.h | 3 |
6 files changed, 26 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c index d9f1fcb9c2be..b7cacde92de0 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_common.c +++ b/drivers/net/ethernet/intel/i40e/i40e_common.c | |||
@@ -51,6 +51,7 @@ static i40e_status i40e_set_mac_type(struct i40e_hw *hw) | |||
51 | case I40E_DEV_ID_QSFP_B: | 51 | case I40E_DEV_ID_QSFP_B: |
52 | case I40E_DEV_ID_QSFP_C: | 52 | case I40E_DEV_ID_QSFP_C: |
53 | case I40E_DEV_ID_10G_BASE_T: | 53 | case I40E_DEV_ID_10G_BASE_T: |
54 | case I40E_DEV_ID_20G_KR2: | ||
54 | hw->mac.type = I40E_MAC_XL710; | 55 | hw->mac.type = I40E_MAC_XL710; |
55 | break; | 56 | break; |
56 | case I40E_DEV_ID_VF: | 57 | case I40E_DEV_ID_VF: |
@@ -841,6 +842,7 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw) | |||
841 | case I40E_PHY_TYPE_10GBASE_KX4: | 842 | case I40E_PHY_TYPE_10GBASE_KX4: |
842 | case I40E_PHY_TYPE_10GBASE_KR: | 843 | case I40E_PHY_TYPE_10GBASE_KR: |
843 | case I40E_PHY_TYPE_40GBASE_KR4: | 844 | case I40E_PHY_TYPE_40GBASE_KR4: |
845 | case I40E_PHY_TYPE_20GBASE_KR2: | ||
844 | media = I40E_MEDIA_TYPE_BACKPLANE; | 846 | media = I40E_MEDIA_TYPE_BACKPLANE; |
845 | break; | 847 | break; |
846 | case I40E_PHY_TYPE_SGMII: | 848 | case I40E_PHY_TYPE_SGMII: |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c index b7d0aaac5480..c848b1862512 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c | |||
@@ -274,6 +274,12 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw, | |||
274 | case I40E_PHY_TYPE_40GBASE_LR4: | 274 | case I40E_PHY_TYPE_40GBASE_LR4: |
275 | ecmd->supported = SUPPORTED_40000baseLR4_Full; | 275 | ecmd->supported = SUPPORTED_40000baseLR4_Full; |
276 | break; | 276 | break; |
277 | case I40E_PHY_TYPE_20GBASE_KR2: | ||
278 | ecmd->supported = SUPPORTED_Autoneg | | ||
279 | SUPPORTED_20000baseKR2_Full; | ||
280 | ecmd->advertising = ADVERTISED_Autoneg | | ||
281 | ADVERTISED_20000baseKR2_Full; | ||
282 | break; | ||
277 | case I40E_PHY_TYPE_10GBASE_KX4: | 283 | case I40E_PHY_TYPE_10GBASE_KX4: |
278 | ecmd->supported = SUPPORTED_Autoneg | | 284 | ecmd->supported = SUPPORTED_Autoneg | |
279 | SUPPORTED_10000baseKX4_Full; | 285 | SUPPORTED_10000baseKX4_Full; |
@@ -353,6 +359,9 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw, | |||
353 | /* need a SPEED_40000 in ethtool.h */ | 359 | /* need a SPEED_40000 in ethtool.h */ |
354 | ethtool_cmd_speed_set(ecmd, 40000); | 360 | ethtool_cmd_speed_set(ecmd, 40000); |
355 | break; | 361 | break; |
362 | case I40E_LINK_SPEED_20GB: | ||
363 | ethtool_cmd_speed_set(ecmd, SPEED_20000); | ||
364 | break; | ||
356 | case I40E_LINK_SPEED_10GB: | 365 | case I40E_LINK_SPEED_10GB: |
357 | ethtool_cmd_speed_set(ecmd, SPEED_10000); | 366 | ethtool_cmd_speed_set(ecmd, SPEED_10000); |
358 | break; | 367 | break; |
@@ -418,6 +427,11 @@ static void i40e_get_settings_link_down(struct i40e_hw *hw, | |||
418 | if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB) | 427 | if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB) |
419 | ecmd->advertising |= ADVERTISED_100baseT_Full; | 428 | ecmd->advertising |= ADVERTISED_100baseT_Full; |
420 | break; | 429 | break; |
430 | case I40E_DEV_ID_20G_KR2: | ||
431 | /* backplane 20G */ | ||
432 | ecmd->supported = SUPPORTED_20000baseKR2_Full; | ||
433 | ecmd->advertising = ADVERTISED_20000baseKR2_Full; | ||
434 | break; | ||
421 | default: | 435 | default: |
422 | /* all the rest are 10G/1G */ | 436 | /* all the rest are 10G/1G */ |
423 | ecmd->supported = SUPPORTED_10000baseT_Full | | 437 | ecmd->supported = SUPPORTED_10000baseT_Full | |
@@ -633,6 +647,8 @@ static int i40e_set_settings(struct net_device *netdev, | |||
633 | advertise & ADVERTISED_10000baseKX4_Full || | 647 | advertise & ADVERTISED_10000baseKX4_Full || |
634 | advertise & ADVERTISED_10000baseKR_Full) | 648 | advertise & ADVERTISED_10000baseKR_Full) |
635 | config.link_speed |= I40E_LINK_SPEED_10GB; | 649 | config.link_speed |= I40E_LINK_SPEED_10GB; |
650 | if (advertise & ADVERTISED_20000baseKR2_Full) | ||
651 | config.link_speed |= I40E_LINK_SPEED_20GB; | ||
636 | if (advertise & ADVERTISED_40000baseKR4_Full || | 652 | if (advertise & ADVERTISED_40000baseKR4_Full || |
637 | advertise & ADVERTISED_40000baseCR4_Full || | 653 | advertise & ADVERTISED_40000baseCR4_Full || |
638 | advertise & ADVERTISED_40000baseSR4_Full || | 654 | advertise & ADVERTISED_40000baseSR4_Full || |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index bc87968098d9..048d8ec88458 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -75,6 +75,7 @@ static const struct pci_device_id i40e_pci_tbl[] = { | |||
75 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0}, | 75 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0}, |
76 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0}, | 76 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0}, |
77 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T), 0}, | 77 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T), 0}, |
78 | {PCI_VDEVICE(INTEL, I40E_DEV_ID_20G_KR2), 0}, | ||
78 | /* required last entry */ | 79 | /* required last entry */ |
79 | {0, } | 80 | {0, } |
80 | }; | 81 | }; |
@@ -4639,6 +4640,9 @@ static void i40e_print_link_message(struct i40e_vsi *vsi, bool isup) | |||
4639 | case I40E_LINK_SPEED_40GB: | 4640 | case I40E_LINK_SPEED_40GB: |
4640 | strlcpy(speed, "40 Gbps", SPEED_SIZE); | 4641 | strlcpy(speed, "40 Gbps", SPEED_SIZE); |
4641 | break; | 4642 | break; |
4643 | case I40E_LINK_SPEED_20GB: | ||
4644 | strncpy(speed, "20 Gbps", SPEED_SIZE); | ||
4645 | break; | ||
4642 | case I40E_LINK_SPEED_10GB: | 4646 | case I40E_LINK_SPEED_10GB: |
4643 | strlcpy(speed, "10 Gbps", SPEED_SIZE); | 4647 | strlcpy(speed, "10 Gbps", SPEED_SIZE); |
4644 | break; | 4648 | break; |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_type.h b/drivers/net/ethernet/intel/i40e/i40e_type.h index 83032d2c2275..67c7bc9e9c21 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_type.h +++ b/drivers/net/ethernet/intel/i40e/i40e_type.h | |||
@@ -44,6 +44,7 @@ | |||
44 | #define I40E_DEV_ID_QSFP_B 0x1584 | 44 | #define I40E_DEV_ID_QSFP_B 0x1584 |
45 | #define I40E_DEV_ID_QSFP_C 0x1585 | 45 | #define I40E_DEV_ID_QSFP_C 0x1585 |
46 | #define I40E_DEV_ID_10G_BASE_T 0x1586 | 46 | #define I40E_DEV_ID_10G_BASE_T 0x1586 |
47 | #define I40E_DEV_ID_20G_KR2 0x1587 | ||
47 | #define I40E_DEV_ID_VF 0x154C | 48 | #define I40E_DEV_ID_VF 0x154C |
48 | #define I40E_DEV_ID_VF_HV 0x1571 | 49 | #define I40E_DEV_ID_VF_HV 0x1571 |
49 | 50 | ||
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_common.c b/drivers/net/ethernet/intel/i40evf/i40e_common.c index f07b9ff2b823..39fcb1dc4ea6 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_common.c +++ b/drivers/net/ethernet/intel/i40evf/i40e_common.c | |||
@@ -51,6 +51,7 @@ i40e_status i40e_set_mac_type(struct i40e_hw *hw) | |||
51 | case I40E_DEV_ID_QSFP_B: | 51 | case I40E_DEV_ID_QSFP_B: |
52 | case I40E_DEV_ID_QSFP_C: | 52 | case I40E_DEV_ID_QSFP_C: |
53 | case I40E_DEV_ID_10G_BASE_T: | 53 | case I40E_DEV_ID_10G_BASE_T: |
54 | case I40E_DEV_ID_20G_KR2: | ||
54 | hw->mac.type = I40E_MAC_XL710; | 55 | hw->mac.type = I40E_MAC_XL710; |
55 | break; | 56 | break; |
56 | case I40E_DEV_ID_VF: | 57 | case I40E_DEV_ID_VF: |
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_type.h b/drivers/net/ethernet/intel/i40evf/i40e_type.h index eba6e4b34f70..9c79cb6abb2b 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_type.h +++ b/drivers/net/ethernet/intel/i40evf/i40e_type.h | |||
@@ -44,7 +44,8 @@ | |||
44 | #define I40E_DEV_ID_QSFP_B 0x1584 | 44 | #define I40E_DEV_ID_QSFP_B 0x1584 |
45 | #define I40E_DEV_ID_QSFP_C 0x1585 | 45 | #define I40E_DEV_ID_QSFP_C 0x1585 |
46 | #define I40E_DEV_ID_10G_BASE_T 0x1586 | 46 | #define I40E_DEV_ID_10G_BASE_T 0x1586 |
47 | #define I40E_DEV_ID_VF 0x154C | 47 | #define I40E_DEV_ID_20G_KR2 0x1587 |
48 | #define I40E_DEV_ID_VF 0x154C | ||
48 | #define I40E_DEV_ID_VF_HV 0x1571 | 49 | #define I40E_DEV_ID_VF_HV 0x1571 |
49 | 50 | ||
50 | #define i40e_is_40G_device(d) ((d) == I40E_DEV_ID_QSFP_A || \ | 51 | #define i40e_is_40G_device(d) ((d) == I40E_DEV_ID_QSFP_A || \ |