[PATCH v2] net/e1000: align link updates in em igb and igc

AKSHATHA S akshathax.s at intel.com
Sat Mar 7 00:36:14 CET 2026


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 <akshathax.s at intel.com>

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



More information about the dev mailing list