diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/en_ethtool.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c index 569eda9e83d6..a7b58ba8492b 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | |||
@@ -770,22 +770,20 @@ static int mlx4_en_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
770 | return 0; | 770 | return 0; |
771 | } | 771 | } |
772 | 772 | ||
773 | proto_admin = cpu_to_be32(ptys_adv); | 773 | proto_admin = cmd->autoneg == AUTONEG_ENABLE ? |
774 | if (speed >= 0 && speed != priv->port_state.link_speed) | 774 | cpu_to_be32(ptys_adv) : |
775 | /* If speed was set then speed decides :-) */ | 775 | speed_set_ptys_admin(priv, speed, |
776 | proto_admin = speed_set_ptys_admin(priv, speed, | 776 | ptys_reg.eth_proto_cap); |
777 | ptys_reg.eth_proto_cap); | ||
778 | 777 | ||
779 | proto_admin &= ptys_reg.eth_proto_cap; | 778 | proto_admin &= ptys_reg.eth_proto_cap; |
780 | |||
781 | if (proto_admin == ptys_reg.eth_proto_admin) | ||
782 | return 0; /* Nothing to change */ | ||
783 | |||
784 | if (!proto_admin) { | 779 | if (!proto_admin) { |
785 | en_warn(priv, "Not supported link mode(s) requested, check supported link modes.\n"); | 780 | en_warn(priv, "Not supported link mode(s) requested, check supported link modes.\n"); |
786 | return -EINVAL; /* nothing to change due to bad input */ | 781 | return -EINVAL; /* nothing to change due to bad input */ |
787 | } | 782 | } |
788 | 783 | ||
784 | if (proto_admin == ptys_reg.eth_proto_admin) | ||
785 | return 0; /* Nothing to change */ | ||
786 | |||
789 | en_dbg(DRV, priv, "mlx4_ACCESS_PTYS_REG SET: ptys_reg.eth_proto_admin = 0x%x\n", | 787 | en_dbg(DRV, priv, "mlx4_ACCESS_PTYS_REG SET: ptys_reg.eth_proto_admin = 0x%x\n", |
790 | be32_to_cpu(proto_admin)); | 788 | be32_to_cpu(proto_admin)); |
791 | 789 | ||
@@ -798,9 +796,9 @@ static int mlx4_en_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
798 | return ret; | 796 | return ret; |
799 | } | 797 | } |
800 | 798 | ||
801 | en_warn(priv, "Port link mode changed, restarting port...\n"); | ||
802 | mutex_lock(&priv->mdev->state_lock); | 799 | mutex_lock(&priv->mdev->state_lock); |
803 | if (priv->port_up) { | 800 | if (priv->port_up) { |
801 | en_warn(priv, "Port link mode changed, restarting port...\n"); | ||
804 | mlx4_en_stop_port(dev, 1); | 802 | mlx4_en_stop_port(dev, 1); |
805 | if (mlx4_en_start_port(dev)) | 803 | if (mlx4_en_start_port(dev)) |
806 | en_err(priv, "Failed restarting port %d\n", priv->port); | 804 | en_err(priv, "Failed restarting port %d\n", priv->port); |