Commit 5960d33f authored by Mitch Williams's avatar Mitch Williams Committed by Jeff Kirsher

i40e: Add 10GBaseT support

Add driver support for 10GBaseT device.

Change-ID: I4be6ed847ac0bddd220b9878a95c523b32038174
Signed-off-by: default avatarCatherine Sullivan <catherine.sullivan@intel.com>
Signed-off-by: default avatarShannon Nelson <shannon.nelson@intel.com>
Tested-by: default avatarJim Young <jamesx.m.young@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent a34a6711
...@@ -50,6 +50,7 @@ static i40e_status i40e_set_mac_type(struct i40e_hw *hw) ...@@ -50,6 +50,7 @@ static i40e_status i40e_set_mac_type(struct i40e_hw *hw)
case I40E_DEV_ID_QSFP_A: case I40E_DEV_ID_QSFP_A:
case I40E_DEV_ID_QSFP_B: case I40E_DEV_ID_QSFP_B:
case I40E_DEV_ID_QSFP_C: case I40E_DEV_ID_QSFP_C:
case I40E_DEV_ID_10G_BASE_T:
hw->mac.type = I40E_MAC_XL710; hw->mac.type = I40E_MAC_XL710;
break; break;
case I40E_DEV_ID_VF: case I40E_DEV_ID_VF:
......
...@@ -264,6 +264,14 @@ static int i40e_get_settings(struct net_device *netdev, ...@@ -264,6 +264,14 @@ static int i40e_get_settings(struct net_device *netdev,
ecmd->supported = SUPPORTED_10000baseKR_Full; ecmd->supported = SUPPORTED_10000baseKR_Full;
ecmd->advertising = ADVERTISED_10000baseKR_Full; ecmd->advertising = ADVERTISED_10000baseKR_Full;
break; break;
case I40E_DEV_ID_10G_BASE_T:
ecmd->supported = SUPPORTED_10000baseT_Full |
SUPPORTED_1000baseT_Full |
SUPPORTED_100baseT_Full;
ecmd->advertising = ADVERTISED_10000baseT_Full |
ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full;
break;
default: default:
/* all the rest are 10G/1G */ /* all the rest are 10G/1G */
ecmd->supported = SUPPORTED_10000baseT_Full | ecmd->supported = SUPPORTED_10000baseT_Full |
...@@ -322,9 +330,13 @@ static int i40e_get_settings(struct net_device *netdev, ...@@ -322,9 +330,13 @@ static int i40e_get_settings(struct net_device *netdev,
case I40E_PHY_TYPE_10GBASE_CR1: case I40E_PHY_TYPE_10GBASE_CR1:
case I40E_PHY_TYPE_10GBASE_T: case I40E_PHY_TYPE_10GBASE_T:
ecmd->supported = SUPPORTED_Autoneg | ecmd->supported = SUPPORTED_Autoneg |
SUPPORTED_10000baseT_Full; SUPPORTED_10000baseT_Full |
SUPPORTED_1000baseT_Full |
SUPPORTED_100baseT_Full;
ecmd->advertising = ADVERTISED_Autoneg | ecmd->advertising = ADVERTISED_Autoneg |
ADVERTISED_10000baseT_Full; ADVERTISED_10000baseT_Full |
ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full;
break; break;
case I40E_PHY_TYPE_XAUI: case I40E_PHY_TYPE_XAUI:
case I40E_PHY_TYPE_XFI: case I40E_PHY_TYPE_XFI:
...@@ -335,14 +347,22 @@ static int i40e_get_settings(struct net_device *netdev, ...@@ -335,14 +347,22 @@ static int i40e_get_settings(struct net_device *netdev,
case I40E_PHY_TYPE_1000BASE_KX: case I40E_PHY_TYPE_1000BASE_KX:
case I40E_PHY_TYPE_1000BASE_T: case I40E_PHY_TYPE_1000BASE_T:
ecmd->supported = SUPPORTED_Autoneg | ecmd->supported = SUPPORTED_Autoneg |
SUPPORTED_1000baseT_Full; SUPPORTED_10000baseT_Full |
SUPPORTED_1000baseT_Full |
SUPPORTED_100baseT_Full;
ecmd->advertising = ADVERTISED_Autoneg | ecmd->advertising = ADVERTISED_Autoneg |
ADVERTISED_1000baseT_Full; ADVERTISED_10000baseT_Full |
ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full;
break; break;
case I40E_PHY_TYPE_100BASE_TX: case I40E_PHY_TYPE_100BASE_TX:
ecmd->supported = SUPPORTED_Autoneg | ecmd->supported = SUPPORTED_Autoneg |
SUPPORTED_10000baseT_Full |
SUPPORTED_1000baseT_Full |
SUPPORTED_100baseT_Full; SUPPORTED_100baseT_Full;
ecmd->advertising = ADVERTISED_Autoneg | ecmd->advertising = ADVERTISED_Autoneg |
ADVERTISED_10000baseT_Full |
ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full; ADVERTISED_100baseT_Full;
break; break;
case I40E_PHY_TYPE_SGMII: case I40E_PHY_TYPE_SGMII:
...@@ -426,6 +446,9 @@ static int i40e_get_settings(struct net_device *netdev, ...@@ -426,6 +446,9 @@ static int i40e_get_settings(struct net_device *netdev,
case I40E_LINK_SPEED_1GB: case I40E_LINK_SPEED_1GB:
ethtool_cmd_speed_set(ecmd, SPEED_1000); ethtool_cmd_speed_set(ecmd, SPEED_1000);
break; break;
case I40E_LINK_SPEED_100MB:
ethtool_cmd_speed_set(ecmd, SPEED_100);
break;
default: default:
break; break;
} }
...@@ -528,7 +551,7 @@ static int i40e_set_settings(struct net_device *netdev, ...@@ -528,7 +551,7 @@ static int i40e_set_settings(struct net_device *netdev,
} }
/* If autoneg is currently enabled */ /* If autoneg is currently enabled */
if (hw->phy.link_info.an_info & I40E_AQ_AN_COMPLETED) { if (hw->phy.link_info.an_info & I40E_AQ_AN_COMPLETED) {
config.abilities = abilities.abilities | config.abilities = abilities.abilities &
~I40E_AQ_PHY_ENABLE_AN; ~I40E_AQ_PHY_ENABLE_AN;
change = true; change = true;
} }
......
...@@ -74,6 +74,7 @@ static const struct pci_device_id i40e_pci_tbl[] = { ...@@ -74,6 +74,7 @@ static const struct pci_device_id i40e_pci_tbl[] = {
{PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_A), 0}, {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_A), 0},
{PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0}, {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0},
{PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0}, {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0},
{PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T), 0},
/* required last entry */ /* required last entry */
{0, } {0, }
}; };
...@@ -4449,6 +4450,9 @@ static void i40e_print_link_message(struct i40e_vsi *vsi, bool isup) ...@@ -4449,6 +4450,9 @@ static void i40e_print_link_message(struct i40e_vsi *vsi, bool isup)
case I40E_LINK_SPEED_1GB: case I40E_LINK_SPEED_1GB:
strlcpy(speed, "1000 Mbps", SPEED_SIZE); strlcpy(speed, "1000 Mbps", SPEED_SIZE);
break; break;
case I40E_LINK_SPEED_100MB:
strncpy(speed, "100 Mbps", SPEED_SIZE);
break;
default: default:
break; break;
} }
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#define I40E_DEV_ID_QSFP_A 0x1583 #define I40E_DEV_ID_QSFP_A 0x1583
#define I40E_DEV_ID_QSFP_B 0x1584 #define I40E_DEV_ID_QSFP_B 0x1584
#define I40E_DEV_ID_QSFP_C 0x1585 #define I40E_DEV_ID_QSFP_C 0x1585
#define I40E_DEV_ID_10G_BASE_T 0x1586
#define I40E_DEV_ID_VF 0x154C #define I40E_DEV_ID_VF 0x154C
#define I40E_DEV_ID_VF_HV 0x1571 #define I40E_DEV_ID_VF_HV 0x1571
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment