net: hns: fix the wrong speed for bond
[deliverable/linux.git] / drivers / net / ethernet / hisilicon / hns / hns_enet.c
index 00e529f2f153674df7f95e6d4253d50c6040e57b..cef9d12f0d7ddcc409f3cbbd95975ecef96dbc94 100644 (file)
@@ -991,8 +991,26 @@ static void hns_nic_adjust_link(struct net_device *ndev)
 {
        struct hns_nic_priv *priv = netdev_priv(ndev);
        struct hnae_handle *h = priv->ae_handle;
+       int state = 1;
+
+       if (priv->phy) {
+               h->dev->ops->adjust_link(h, ndev->phydev->speed,
+                                        ndev->phydev->duplex);
+               state = priv->phy->link;
+       }
+       state = state && h->dev->ops->get_status(h);
 
-       h->dev->ops->adjust_link(h, ndev->phydev->speed, ndev->phydev->duplex);
+       if (state != priv->link) {
+               if (state) {
+                       netif_carrier_on(ndev);
+                       netif_tx_wake_all_queues(ndev);
+                       netdev_info(ndev, "link up\n");
+               } else {
+                       netif_carrier_off(ndev);
+                       netdev_info(ndev, "link down\n");
+               }
+               priv->link = state;
+       }
 }
 
 /**
@@ -1577,27 +1595,14 @@ static void hns_nic_update_link_status(struct net_device *netdev)
        struct hns_nic_priv *priv = netdev_priv(netdev);
 
        struct hnae_handle *h = priv->ae_handle;
-       int state = 1;
 
-       if (priv->phy) {
-               if (!genphy_update_link(priv->phy))
-                       state = priv->phy->link;
-               else
-                       state = 0;
-       }
-       state = state && h->dev->ops->get_status(h);
+       if (h->phy_dev) {
+               if (h->phy_if != PHY_INTERFACE_MODE_XGMII)
+                       return;
 
-       if (state != priv->link) {
-               if (state) {
-                       netif_carrier_on(netdev);
-                       netif_tx_wake_all_queues(netdev);
-                       netdev_info(netdev, "link up\n");
-               } else {
-                       netif_carrier_off(netdev);
-                       netdev_info(netdev, "link down\n");
-               }
-               priv->link = state;
+               (void)genphy_read_status(h->phy_dev);
        }
+       hns_nic_adjust_link(netdev);
 }
 
 /* for dumping key regs*/
This page took 0.02928 seconds and 5 git commands to generate.