summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_enet.c13
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_ethtool.c39
2 files changed, 18 insertions, 34 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index 6f9091c298698..302d3ae8e9e59 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -1315,16 +1315,15 @@ static void hns_nic_reset_subtask(struct hns_nic_priv *priv)
return;
hns_nic_dump(priv);
- netdev_err(priv->netdev, "Reset %s port\n",
- (type == HNAE_PORT_DEBUG ? "debug" : "business"));
+ netdev_info(priv->netdev, "Reset %s port\n",
+ (type == HNAE_PORT_DEBUG ? "debug" : "business"));
rtnl_lock();
- if (type == HNAE_PORT_DEBUG) {
+ /* put off any impending NetWatchDogTimeout */
+ priv->netdev->trans_start = jiffies;
+
+ if (type == HNAE_PORT_DEBUG)
hns_nic_net_reinit(priv->netdev);
- } else {
- hns_nic_net_down(priv->netdev);
- hns_nic_net_reset(priv->netdev);
- }
rtnl_unlock();
}
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index 7d58918abb788..a0332129970ba 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -194,9 +194,7 @@ static int hns_nic_set_settings(struct net_device *net_dev,
{
struct hns_nic_priv *priv = netdev_priv(net_dev);
struct hnae_handle *h;
- int link_stat;
u32 speed;
- u8 duplex, autoneg;
if (!netif_running(net_dev))
return -ESRCH;
@@ -206,48 +204,35 @@ static int hns_nic_set_settings(struct net_device *net_dev,
return -ENODEV;
h = priv->ae_handle;
- link_stat = hns_nic_get_link(net_dev);
- duplex = cmd->duplex;
speed = ethtool_cmd_speed(cmd);
- autoneg = cmd->autoneg;
-
- if (!link_stat) {
- if (duplex != (u8)DUPLEX_UNKNOWN || speed != (u32)SPEED_UNKNOWN)
- return -EINVAL;
-
- if (h->phy_if == PHY_INTERFACE_MODE_SGMII && h->phy_node) {
- priv->phy->autoneg = autoneg;
- return phy_start_aneg(priv->phy);
- }
- }
if (h->phy_if == PHY_INTERFACE_MODE_XGMII) {
- if (autoneg != AUTONEG_DISABLE)
- return -EINVAL;
-
- if (speed != SPEED_10000 || duplex != DUPLEX_FULL)
+ if (cmd->autoneg == AUTONEG_ENABLE || speed != SPEED_10000 ||
+ cmd->duplex != DUPLEX_FULL)
return -EINVAL;
} else if (h->phy_if == PHY_INTERFACE_MODE_SGMII) {
- if (!h->phy_node && autoneg != AUTONEG_DISABLE)
+ if (!priv->phy && cmd->autoneg == AUTONEG_ENABLE)
return -EINVAL;
- if (speed == SPEED_1000 && duplex == DUPLEX_HALF)
+ if (speed == SPEED_1000 && cmd->duplex == DUPLEX_HALF)
return -EINVAL;
+ if (priv->phy)
+ return phy_ethtool_sset(priv->phy, cmd);
- if (speed != SPEED_10 && speed != SPEED_100 &&
- speed != SPEED_1000)
+ if ((speed != SPEED_10 && speed != SPEED_100 &&
+ speed != SPEED_1000) || (cmd->duplex != DUPLEX_HALF &&
+ cmd->duplex != DUPLEX_FULL))
return -EINVAL;
} else {
netdev_err(net_dev, "Not supported!");
return -ENOTSUPP;
}
- if (priv->phy) {
- return phy_ethtool_sset(priv->phy, cmd);
- } else if (h->dev->ops->adjust_link && link_stat) {
- h->dev->ops->adjust_link(h, speed, duplex);
+ if (h->dev->ops->adjust_link) {
+ h->dev->ops->adjust_link(h, (int)speed, cmd->duplex);
return 0;
}
+
netdev_err(net_dev, "Not supported!");
return -ENOTSUPP;
}