net: hns3: disable auto-negotiation off with 1000M setting in ethtool
authorYufeng Mo <moyufeng@huawei.com>
Sat, 9 May 2020 09:27:41 +0000 (17:27 +0800)
committerJakub Kicinski <kuba@kernel.org>
Mon, 11 May 2020 02:43:22 +0000 (19:43 -0700)
The 802.3 specification does not specify the behavior of
auto-negotiation off with 1000M in PHY. Therefore, some PHY
compatibility issues occur. This patch forbids the setting of
this unreasonable mode by ethtool in driver.

Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c

index 1a105f2..6b1545f 100644 (file)
@@ -773,8 +773,13 @@ static int hns3_set_link_ksettings(struct net_device *netdev,
                  cmd->base.autoneg, cmd->base.speed, cmd->base.duplex);
 
        /* Only support ksettings_set for netdev with phy attached for now */
-       if (netdev->phydev)
+       if (netdev->phydev) {
+               if (cmd->base.speed == SPEED_1000 &&
+                   cmd->base.autoneg == AUTONEG_DISABLE)
+                       return -EINVAL;
+
                return phy_ethtool_ksettings_set(netdev->phydev, cmd);
+       }
 
        if (handle->pdev->revision == 0x20)
                return -EOPNOTSUPP;