Skip to content

Commit

Permalink
i40e: Add dual speed module support
Browse files Browse the repository at this point in the history
Now that fw has implemented dual speed module support, we can add ours.
Also, add the phy type for 1G LR/SR and set its media type to fiber.
Lastly, instead of a WARN_ON if the phy type is not recognized just print
a warning.

Change-ID: I2e5227d4a8c2907b0ed423038e5dbce774e466b0
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Tested-by: Jim Young <jamesx.m.young@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Catherine Sullivan authored and Jeff Kirsher committed Sep 4, 2014
1 parent b89df95 commit 124ed15
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 20 deletions.
2 changes: 2 additions & 0 deletions drivers/net/ethernet/intel/i40e/i40e_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,8 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
switch (hw->phy.link_info.phy_type) {
case I40E_PHY_TYPE_10GBASE_SR:
case I40E_PHY_TYPE_10GBASE_LR:
case I40E_PHY_TYPE_1000BASE_SX:
case I40E_PHY_TYPE_1000BASE_LX:
case I40E_PHY_TYPE_40GBASE_SR4:
case I40E_PHY_TYPE_40GBASE_LR4:
media = I40E_MEDIA_TYPE_FIBER;
Expand Down
31 changes: 11 additions & 20 deletions drivers/net/ethernet/intel/i40e/i40e_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,10 @@ static int i40e_get_settings(struct net_device *netdev,
break;
case I40E_PHY_TYPE_10GBASE_SR:
case I40E_PHY_TYPE_10GBASE_LR:
case I40E_PHY_TYPE_1000BASE_SX:
case I40E_PHY_TYPE_1000BASE_LX:
ecmd->supported = SUPPORTED_10000baseT_Full;
ecmd->supported |= SUPPORTED_1000baseT_Full;
break;
case I40E_PHY_TYPE_10GBASE_CR1_CU:
case I40E_PHY_TYPE_10GBASE_CR1:
Expand Down Expand Up @@ -352,7 +355,8 @@ static int i40e_get_settings(struct net_device *netdev,
break;
default:
/* if we got here and link is up something bad is afoot */
WARN_ON(link_up);
netdev_info(netdev, "WARNING: Link is up but PHY type 0x%x is not recognized.\n",
hw_link_info->phy_type);
}

no_valid_phy_type:
Expand Down Expand Up @@ -493,11 +497,10 @@ static int i40e_set_settings(struct net_device *netdev,
if (status)
return -EAGAIN;

/* Copy link_speed and abilities to config in case they are not
/* Copy abilities to config in case autoneg is not
* set below
*/
memset(&config, 0, sizeof(struct i40e_aq_set_phy_config));
config.link_speed = abilities.link_speed;
config.abilities = abilities.abilities;

/* Check autoneg */
Expand Down Expand Up @@ -534,33 +537,21 @@ static int i40e_set_settings(struct net_device *netdev,
return -EINVAL;

if (advertise & ADVERTISED_100baseT_Full)
if (!(abilities.link_speed & I40E_LINK_SPEED_100MB)) {
config.link_speed |= I40E_LINK_SPEED_100MB;
change = true;
}
config.link_speed |= I40E_LINK_SPEED_100MB;
if (advertise & ADVERTISED_1000baseT_Full ||
advertise & ADVERTISED_1000baseKX_Full)
if (!(abilities.link_speed & I40E_LINK_SPEED_1GB)) {
config.link_speed |= I40E_LINK_SPEED_1GB;
change = true;
}
config.link_speed |= I40E_LINK_SPEED_1GB;
if (advertise & ADVERTISED_10000baseT_Full ||
advertise & ADVERTISED_10000baseKX4_Full ||
advertise & ADVERTISED_10000baseKR_Full)
if (!(abilities.link_speed & I40E_LINK_SPEED_10GB)) {
config.link_speed |= I40E_LINK_SPEED_10GB;
change = true;
}
config.link_speed |= I40E_LINK_SPEED_10GB;
if (advertise & ADVERTISED_40000baseKR4_Full ||
advertise & ADVERTISED_40000baseCR4_Full ||
advertise & ADVERTISED_40000baseSR4_Full ||
advertise & ADVERTISED_40000baseLR4_Full)
if (!(abilities.link_speed & I40E_LINK_SPEED_40GB)) {
config.link_speed |= I40E_LINK_SPEED_40GB;
change = true;
}
config.link_speed |= I40E_LINK_SPEED_40GB;

if (change) {
if (change || (abilities.link_speed != config.link_speed)) {
/* copy over the rest of the abilities */
config.phy_type = abilities.phy_type;
config.eee_capability = abilities.eee_capability;
Expand Down

0 comments on commit 124ed15

Please sign in to comment.