patch 'net/txgbe: fix to set autoneg for 1G speed' has been queued to stable release 22.11.3

Xueming Li xuemingl at nvidia.com
Thu Aug 10 01:47:47 CEST 2023


Hi,

FYI, your patch has been queued to stable release 22.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/11/23. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://git.dpdk.org/dpdk-stable/log/?h=22.11-staging

This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=22.11-staging&id=19c8a701a783f363dbc8dede60ea1d7e647c554c

Thanks.

Xueming Li <xuemingl at nvidia.com>

---
>From 19c8a701a783f363dbc8dede60ea1d7e647c554c Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu at trustnetic.com>
Date: Wed, 14 Jun 2023 10:34:24 +0800
Subject: [PATCH] net/txgbe: fix to set autoneg for 1G speed
Cc: Xueming Li <xuemingl at nvidia.com>

[ upstream commit 658dbfa6360fcda0a5798669f6eac8293e4a2d73 ]

Autoneg was always on for 1G speed, fix to set autoneg off.

Fixes: 01c3cf5c85a7 ("net/txgbe: add autoneg control read and write")
Fixes: e4c515a7bc7e ("net/txgbe: add multi-speed link setup")

Signed-off-by: Jiawen Wu <jiawenwu at trustnetic.com>
---
 drivers/net/txgbe/base/txgbe_hw.c   | 14 ++++++++++++++
 drivers/net/txgbe/base/txgbe_phy.c  |  4 +++-
 drivers/net/txgbe/base/txgbe_type.h |  1 +
 drivers/net/txgbe/txgbe_ethdev.c    |  2 ++
 4 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/net/txgbe/base/txgbe_hw.c b/drivers/net/txgbe/base/txgbe_hw.c
index 601c30ab81..de96549ae8 100644
--- a/drivers/net/txgbe/base/txgbe_hw.c
+++ b/drivers/net/txgbe/base/txgbe_hw.c
@@ -2273,10 +2273,24 @@ s32 txgbe_setup_mac_link_multispeed_fiber(struct txgbe_hw *hw,
 	}
 
 	if (speed & TXGBE_LINK_SPEED_1GB_FULL) {
+		u32 curr_autoneg;
+
 		speedcnt++;
 		if (highest_link_speed == TXGBE_LINK_SPEED_UNKNOWN)
 			highest_link_speed = TXGBE_LINK_SPEED_1GB_FULL;
 
+		status = hw->mac.check_link(hw, &link_speed, &link_up, false);
+		if (status != 0)
+			return status;
+
+		/* If we already have link at this speed, just jump out */
+		if (link_speed == TXGBE_LINK_SPEED_1GB_FULL) {
+			curr_autoneg = rd32_epcs(hw, SR_MII_MMD_CTL);
+			if (link_up && (hw->autoneg ==
+					!!(curr_autoneg & SR_MII_MMD_CTL_AN_EN)))
+				goto out;
+		}
+
 		/* Set the module link speed */
 		switch (hw->phy.media_type) {
 		case txgbe_media_type_fiber:
diff --git a/drivers/net/txgbe/base/txgbe_phy.c b/drivers/net/txgbe/base/txgbe_phy.c
index 6bbb2a5e71..a7c11c50df 100644
--- a/drivers/net/txgbe/base/txgbe_phy.c
+++ b/drivers/net/txgbe/base/txgbe_phy.c
@@ -1380,7 +1380,9 @@ txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
 		wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105);
 	wr32_epcs(hw, SR_MII_MMD_DIGI_CTL, 0x0200);
 	value = rd32_epcs(hw, SR_MII_MMD_CTL);
-	value = (value & ~0x1200) | (0x1 << 12) | (0x1 << 9);
+	value = (value & ~0x1200) | (0x1 << 9);
+	if (hw->autoneg)
+		value |= SR_MII_MMD_CTL_AN_EN;
 	wr32_epcs(hw, SR_MII_MMD_CTL, value);
 }
 
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index c3486b472f..75e839b7de 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -783,6 +783,7 @@ struct txgbe_hw {
 	bool allow_unsupported_sfp;
 	bool need_crosstalk_fix;
 	bool dev_start;
+	bool autoneg;
 	struct txgbe_devargs devarg;
 
 	uint64_t isb_dma;
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 9fb30c896a..d94c4180ff 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1809,6 +1809,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
 		speed = (TXGBE_LINK_SPEED_100M_FULL |
 			 TXGBE_LINK_SPEED_1GB_FULL |
 			 TXGBE_LINK_SPEED_10GB_FULL);
+		hw->autoneg = true;
 	} else {
 		if (*link_speeds & RTE_ETH_LINK_SPEED_10G)
 			speed |= TXGBE_LINK_SPEED_10GB_FULL;
@@ -1820,6 +1821,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
 			speed |= TXGBE_LINK_SPEED_1GB_FULL;
 		if (*link_speeds & RTE_ETH_LINK_SPEED_100M)
 			speed |= TXGBE_LINK_SPEED_100M_FULL;
+		hw->autoneg = false;
 	}
 
 	err = hw->mac.setup_link(hw, speed, link_up);
-- 
2.25.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-08-09 21:51:18.920695600 +0800
+++ 0025-net-txgbe-fix-to-set-autoneg-for-1G-speed.patch	2023-08-09 21:51:18.154352000 +0800
@@ -1 +1 @@
-From 658dbfa6360fcda0a5798669f6eac8293e4a2d73 Mon Sep 17 00:00:00 2001
+From 19c8a701a783f363dbc8dede60ea1d7e647c554c Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit 658dbfa6360fcda0a5798669f6eac8293e4a2d73 ]
@@ -10 +12,0 @@
-Cc: stable at dpdk.org
@@ -21 +23 @@
-index 2952c408fd..d19fd0065d 100644
+index 601c30ab81..de96549ae8 100644
@@ -50 +52 @@
-index 1eb45b068a..d87af656d5 100644
+index 6bbb2a5e71..a7c11c50df 100644
@@ -53 +55 @@
-@@ -1402,7 +1402,9 @@ txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
+@@ -1380,7 +1380,9 @@ txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
@@ -77 +79 @@
-index 36c74d353d..962667acdc 100644
+index 9fb30c896a..d94c4180ff 100644
@@ -80 +82 @@
-@@ -1821,6 +1821,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
+@@ -1809,6 +1809,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
@@ -88 +90 @@
-@@ -1832,6 +1833,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
+@@ -1820,6 +1821,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)


More information about the stable mailing list