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

luca.boccassi at gmail.com luca.boccassi at gmail.com
Wed Jun 28 16:10:35 CEST 2023


Hi,

FYI, your patch has been queued to stable release 20.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/30/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://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/99826547c868ab79b3fbdf8ca7b2bda428d4c28d

Thanks.

Luca Boccassi

---
>From 99826547c868ab79b3fbdf8ca7b2bda428d4c28d 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

[ 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 e6ffbd900e..4768c2aa25 100644
--- a/drivers/net/txgbe/base/txgbe_hw.c
+++ b/drivers/net/txgbe/base/txgbe_hw.c
@@ -2321,10 +2321,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 01bd5a72f1..b25db92a4e 100644
--- a/drivers/net/txgbe/base/txgbe_phy.c
+++ b/drivers/net/txgbe/base/txgbe_phy.c
@@ -1347,7 +1347,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);
 	return 0;
 }
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index e17f40b978..27f04082b2 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -670,6 +670,7 @@ struct txgbe_hw {
 	bool adapter_stopped;
 	bool allow_unsupported_sfp;
 	bool need_crosstalk_fix;
+	bool autoneg;
 
 	uint64_t isb_dma;
 	void IOMEM *isb_mem;
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index a9797ff95b..a7f764b288 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1571,6 +1571,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 & ETH_LINK_SPEED_10G)
 			speed |= TXGBE_LINK_SPEED_10GB_FULL;
@@ -1582,6 +1583,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
 			speed |= TXGBE_LINK_SPEED_1GB_FULL;
 		if (*link_speeds & ETH_LINK_SPEED_100M)
 			speed |= TXGBE_LINK_SPEED_100M_FULL;
+		hw->autoneg = false;
 	}
 
 	err = hw->mac.setup_link(hw, speed, link_up);
-- 
2.39.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-06-28 11:40:08.536611966 +0100
+++ 0011-net-txgbe-fix-to-set-autoneg-for-1G-speed.patch	2023-06-28 11:40:08.060027588 +0100
@@ -1 +1 @@
-From 658dbfa6360fcda0a5798669f6eac8293e4a2d73 Mon Sep 17 00:00:00 2001
+From 99826547c868ab79b3fbdf8ca7b2bda428d4c28d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 658dbfa6360fcda0a5798669f6eac8293e4a2d73 ]
+
@@ -10 +11,0 @@
-Cc: stable at dpdk.org
@@ -21 +22 @@
-index 2952c408fd..d19fd0065d 100644
+index e6ffbd900e..4768c2aa25 100644
@@ -24 +25 @@
-@@ -2273,10 +2273,24 @@ s32 txgbe_setup_mac_link_multispeed_fiber(struct txgbe_hw *hw,
+@@ -2321,10 +2321,24 @@ s32 txgbe_setup_mac_link_multispeed_fiber(struct txgbe_hw *hw,
@@ -50 +51 @@
-index 1eb45b068a..d87af656d5 100644
+index 01bd5a72f1..b25db92a4e 100644
@@ -53,2 +54,2 @@
-@@ -1402,7 +1402,9 @@ txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
- 		wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105);
+@@ -1347,7 +1347,9 @@ txgbe_set_sgmii_an37_ability(struct txgbe_hw *hw)
+ 	wr32_epcs(hw, SR_MII_MMD_AN_CTL, 0x0105);
@@ -61,0 +63 @@
+ 	return 0;
@@ -63 +64,0 @@
- 
@@ -65 +66 @@
-index c3486b472f..75e839b7de 100644
+index e17f40b978..27f04082b2 100644
@@ -68 +69,2 @@
-@@ -783,6 +783,7 @@ struct txgbe_hw {
+@@ -670,6 +670,7 @@ struct txgbe_hw {
+ 	bool adapter_stopped;
@@ -71 +72,0 @@
- 	bool dev_start;
@@ -73 +73,0 @@
- 	struct txgbe_devargs devarg;
@@ -75,0 +76 @@
+ 	void IOMEM *isb_mem;
@@ -77 +78 @@
-index 36c74d353d..962667acdc 100644
+index a9797ff95b..a7f764b288 100644
@@ -80 +81 @@
-@@ -1821,6 +1821,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
+@@ -1571,6 +1571,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
@@ -86 +87 @@
- 		if (*link_speeds & RTE_ETH_LINK_SPEED_10G)
+ 		if (*link_speeds & ETH_LINK_SPEED_10G)
@@ -88 +89 @@
-@@ -1832,6 +1833,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
+@@ -1582,6 +1583,7 @@ txgbe_dev_start(struct rte_eth_dev *dev)
@@ -90 +91 @@
- 		if (*link_speeds & RTE_ETH_LINK_SPEED_100M)
+ 		if (*link_speeds & ETH_LINK_SPEED_100M)


More information about the stable mailing list