The em, igb, and igc PMDs currently update the auto-neg status only
during specific link transitions. Updated the auto-neg status regardless
of link transition so that it is consistent with ixgbe, i40e, and iavf
drivers.

Signed-off-by: AKSHATHA S <[email protected]>

v2: Addressed review comments
---
 drivers/net/intel/e1000/em_ethdev.c  | 5 ++---
 drivers/net/intel/e1000/igb_ethdev.c | 5 ++---
 drivers/net/intel/e1000/igc_ethdev.c | 5 ++---
 3 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/net/intel/e1000/em_ethdev.c 
b/drivers/net/intel/e1000/em_ethdev.c
index ec3924bf6b..9e15e882b9 100644
--- a/drivers/net/intel/e1000/em_ethdev.c
+++ b/drivers/net/intel/e1000/em_ethdev.c
@@ -1240,14 +1240,13 @@ eth_em_link_update(struct rte_eth_dev *dev, int 
wait_to_complete)
                                RTE_ETH_LINK_HALF_DUPLEX;
                link.link_speed = speed;
                link.link_status = RTE_ETH_LINK_UP;
-               link.link_autoneg = !(dev->data->dev_conf.link_speeds &
-                               RTE_ETH_LINK_SPEED_FIXED);
        } else {
                link.link_speed = RTE_ETH_SPEED_NUM_NONE;
                link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
                link.link_status = RTE_ETH_LINK_DOWN;
-               link.link_autoneg = RTE_ETH_LINK_FIXED;
        }
+       link.link_autoneg = !(dev->data->dev_conf.link_speeds &
+                       RTE_ETH_LINK_SPEED_FIXED);
 
        return rte_eth_linkstatus_set(dev, &link);
 }
diff --git a/drivers/net/intel/e1000/igb_ethdev.c 
b/drivers/net/intel/e1000/igb_ethdev.c
index 1f51ba6406..ef1599ac38 100644
--- a/drivers/net/intel/e1000/igb_ethdev.c
+++ b/drivers/net/intel/e1000/igb_ethdev.c
@@ -2568,14 +2568,13 @@ eth_igb_link_update(struct rte_eth_dev *dev, int 
wait_to_complete)
                                RTE_ETH_LINK_HALF_DUPLEX;
                link.link_speed = speed;
                link.link_status = RTE_ETH_LINK_UP;
-               link.link_autoneg = !(dev->data->dev_conf.link_speeds &
-                               RTE_ETH_LINK_SPEED_FIXED);
        } else if (!link_check) {
                link.link_speed = 0;
                link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
                link.link_status = RTE_ETH_LINK_DOWN;
-               link.link_autoneg = RTE_ETH_LINK_FIXED;
        }
+       link.link_autoneg = !(dev->data->dev_conf.link_speeds &
+                       RTE_ETH_LINK_SPEED_FIXED);
 
        return rte_eth_linkstatus_set(dev, &link);
 }
diff --git a/drivers/net/intel/e1000/igc_ethdev.c 
b/drivers/net/intel/e1000/igc_ethdev.c
index 2155a67268..727ea36c2b 100644
--- a/drivers/net/intel/e1000/igc_ethdev.c
+++ b/drivers/net/intel/e1000/igc_ethdev.c
@@ -549,8 +549,6 @@ eth_igc_link_update(struct rte_eth_dev *dev, int 
wait_to_complete)
                                RTE_ETH_LINK_HALF_DUPLEX;
                link.link_speed = speed;
                link.link_status = RTE_ETH_LINK_UP;
-               link.link_autoneg = !(dev->data->dev_conf.link_speeds &
-                               RTE_ETH_LINK_SPEED_FIXED);
 
                if (speed == SPEED_2500) {
                        uint32_t tipg = E1000_READ_REG(hw, E1000_TIPG);
@@ -564,8 +562,9 @@ eth_igc_link_update(struct rte_eth_dev *dev, int 
wait_to_complete)
                link.link_speed = 0;
                link.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
                link.link_status = RTE_ETH_LINK_DOWN;
-               link.link_autoneg = RTE_ETH_LINK_FIXED;
        }
+       link.link_autoneg = !(dev->data->dev_conf.link_speeds &
+                       RTE_ETH_LINK_SPEED_FIXED);
 
        return rte_eth_linkstatus_set(dev, &link);
 }
-- 
2.43.0

Reply via email to