optimize link update process.

Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn>
---
 drivers/net/zxdh/zxdh_ethdev_ops.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c
index 6ed6c6cfdc..bb9d291181 100644
--- a/drivers/net/zxdh/zxdh_ethdev_ops.c
+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c
@@ -193,6 +193,7 @@ zxdh_link_info_get(struct rte_eth_dev *dev, struct rte_eth_link *link)
             return -1;
         }
         link->link_speed = reply_info.reply_body.link_msg.speed;
+        link->link_autoneg = reply_info.reply_body.link_msg.autoneg;
         hw->speed_mode = reply_info.reply_body.link_msg.speed_modes;
         if ((reply_info.reply_body.link_msg.duplex & RTE_ETH_LINK_FULL_DUPLEX) ==
                 RTE_ETH_LINK_FULL_DUPLEX)
@@ -263,13 +264,22 @@ int32_t zxdh_dev_link_update(struct rte_eth_dev *dev, int32_t wait_to_complete _
         return ret;
     }
     link.link_status &= hw->admin_status;
-    if (link.link_status == RTE_ETH_LINK_DOWN)
-        link.link_speed  = RTE_ETH_SPEED_NUM_UNKNOWN;
-
-    ret = zxdh_config_port_status(dev, link.link_status);
-    if (ret != 0) {
-        PMD_DRV_LOG(ERR, "set port attr %d failed", link.link_status);
-        return ret;
+    if (link.link_status == RTE_ETH_LINK_DOWN) {
+        PMD_DRV_LOG(DEBUG, "dev link status is down.");
+        goto link_down;
+    }
+    goto out;
+
+link_down:
+    link.link_status = RTE_ETH_LINK_DOWN;
+    link.link_speed  = RTE_ETH_SPEED_NUM_UNKNOWN;
+out:
+    if (link.link_status != dev->data->dev_link.link_status) {
+        ret = zxdh_config_port_status(dev, link.link_status);
+        if (ret != 0) {
+            PMD_DRV_LOG(ERR, "set port attr %d failed", link.link_status);
+            return ret;
+        }
     }
     return rte_eth_linkstatus_set(dev, &link);
 }
-- 
2.27.0