mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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: Catherine Sullivan <catherine.sullivan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
a03dc36854
commit
3ce12ee9d8
1 changed files with 16 additions and 13 deletions
|
@ -661,28 +661,31 @@ static int i40e_set_settings(struct net_device *netdev,
|
|||
|
||||
/* Check autoneg */
|
||||
if (autoneg == AUTONEG_ENABLE) {
|
||||
/* If autoneg is not supported, return error */
|
||||
if (!(safe_ecmd.supported & SUPPORTED_Autoneg)) {
|
||||
netdev_info(netdev, "Autoneg not supported on this phy\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* 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 (!(safe_ecmd.supported & SUPPORTED_Autoneg)) {
|
||||
netdev_info(netdev, "Autoneg not supported on this phy\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Autoneg is allowed to change */
|
||||
config.abilities = abilities.abilities |
|
||||
I40E_AQ_PHY_ENABLE_AN;
|
||||
change = true;
|
||||
}
|
||||
} else {
|
||||
/* If autoneg is supported 10GBASE_T is the only phy that
|
||||
* can disable it, so otherwise return error
|
||||
*/
|
||||
if (safe_ecmd.supported & SUPPORTED_Autoneg &&
|
||||
hw->phy.link_info.phy_type != I40E_PHY_TYPE_10GBASE_T) {
|
||||
netdev_info(netdev, "Autoneg cannot be disabled on this phy\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* If autoneg is currently enabled */
|
||||
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 &&
|
||||
hw->phy.link_info.phy_type !=
|
||||
I40E_PHY_TYPE_10GBASE_T) {
|
||||
netdev_info(netdev, "Autoneg cannot be disabled on this phy\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
/* Autoneg is allowed to change */
|
||||
config.abilities = abilities.abilities &
|
||||
~I40E_AQ_PHY_ENABLE_AN;
|
||||
change = true;
|
||||
|
|
Loading…
Reference in a new issue