aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/en_ethtool.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c18
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);