Commit 3ce12ee9 authored by Catherine Sullivan's avatar Catherine Sullivan Committed by Jeff Kirsher

i40e: Fix order of checks when enabling/disabling autoneg in ethtool

We were previously checking if autoneg was allowed to change before
checking if autoneg was changing. We need to do this in the other order
or else we will erroneously return EINVAL when autoneg is not changing.

Change-ID: Iff9f7d1c9bddc1ad1e5d227d4f42754f90155410
Signed-off-by: default avatarCatherine Sullivan <catherine.sullivan@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent a03dc368
...@@ -661,28 +661,31 @@ static int i40e_set_settings(struct net_device *netdev, ...@@ -661,28 +661,31 @@ static int i40e_set_settings(struct net_device *netdev,
/* Check autoneg */ /* Check autoneg */
if (autoneg == AUTONEG_ENABLE) { if (autoneg == AUTONEG_ENABLE) {
/* If autoneg was not already enabled */
if (!(hw->phy.link_info.an_info & I40E_AQ_AN_COMPLETED)) {
/* If autoneg is not supported, return error */ /* If autoneg is not supported, return error */
if (!(safe_ecmd.supported & SUPPORTED_Autoneg)) { if (!(safe_ecmd.supported & SUPPORTED_Autoneg)) {
netdev_info(netdev, "Autoneg not supported on this phy\n"); netdev_info(netdev, "Autoneg not supported on this phy\n");
return -EINVAL; return -EINVAL;
} }
/* If autoneg was not already enabled */ /* Autoneg is allowed to change */
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;
} }
} else { } else {
/* If autoneg is supported 10GBASE_T is the only phy that /* If autoneg is currently enabled */
* can disable it, so otherwise return error if (hw->phy.link_info.an_info & I40E_AQ_AN_COMPLETED) {
/* If autoneg is supported 10GBASE_T is the only PHY
* that can disable it, so otherwise return error
*/ */
if (safe_ecmd.supported & SUPPORTED_Autoneg && if (safe_ecmd.supported & SUPPORTED_Autoneg &&
hw->phy.link_info.phy_type != I40E_PHY_TYPE_10GBASE_T) { hw->phy.link_info.phy_type !=
I40E_PHY_TYPE_10GBASE_T) {
netdev_info(netdev, "Autoneg cannot be disabled on this phy\n"); netdev_info(netdev, "Autoneg cannot be disabled on this phy\n");
return -EINVAL; return -EINVAL;
} }
/* If autoneg is currently enabled */ /* Autoneg is allowed to change */
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;
......
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