Skip to content

Commit 42fd432

Browse files
RajuRangojukuba-moo
authored andcommitted
amd-xgbe: align CL37 AN sequence as per databook
Update the Clause 37 Auto-Negotiation implementation to properly align with the PCS hardware specifications: - Fix incorrect bit settings in Link Status and Link Duplex fields - Implement missing sequence steps 2 and 7 These changes ensure CL37 auto-negotiation protocol follows the exact sequence patterns as specified in the hardware databook. Fixes: 1bf40ad ("amd-xgbe: Add support for clause 37 auto-negotiation") Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com> Link: https://patch.msgid.link/20250630192636.3838291-1-Raju.Rangoju@amd.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent e6ed134 commit 42fd432

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

drivers/net/ethernet/amd/xgbe/xgbe-common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,8 @@
12691269
#define MDIO_VEND2_CTRL1_SS13 BIT(13)
12701270
#endif
12711271

1272+
#define XGBE_VEND2_MAC_AUTO_SW BIT(9)
1273+
12721274
/* MDIO mask values */
12731275
#define XGBE_AN_CL73_INT_CMPLT BIT(0)
12741276
#define XGBE_AN_CL73_INC_LINK BIT(1)

drivers/net/ethernet/amd/xgbe/xgbe-mdio.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@ static void xgbe_an37_set(struct xgbe_prv_data *pdata, bool enable,
266266
reg |= MDIO_VEND2_CTRL1_AN_RESTART;
267267

268268
XMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_CTRL1, reg);
269+
270+
reg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_PCS_DIG_CTRL);
271+
reg |= XGBE_VEND2_MAC_AUTO_SW;
272+
XMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_PCS_DIG_CTRL, reg);
269273
}
270274

271275
static void xgbe_an37_restart(struct xgbe_prv_data *pdata)
@@ -894,6 +898,11 @@ static void xgbe_an37_init(struct xgbe_prv_data *pdata)
894898

895899
netif_dbg(pdata, link, pdata->netdev, "CL37 AN (%s) initialized\n",
896900
(pdata->an_mode == XGBE_AN_MODE_CL37) ? "BaseX" : "SGMII");
901+
902+
reg = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_CTRL1);
903+
reg &= ~MDIO_AN_CTRL1_ENABLE;
904+
XMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_CTRL1, reg);
905+
897906
}
898907

899908
static void xgbe_an73_init(struct xgbe_prv_data *pdata)

drivers/net/ethernet/amd/xgbe/xgbe.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,12 @@
183183
#define XGBE_LINK_TIMEOUT 5
184184
#define XGBE_KR_TRAINING_WAIT_ITER 50
185185

186-
#define XGBE_SGMII_AN_LINK_STATUS BIT(1)
186+
#define XGBE_SGMII_AN_LINK_DUPLEX BIT(1)
187187
#define XGBE_SGMII_AN_LINK_SPEED (BIT(2) | BIT(3))
188188
#define XGBE_SGMII_AN_LINK_SPEED_10 0x00
189189
#define XGBE_SGMII_AN_LINK_SPEED_100 0x04
190190
#define XGBE_SGMII_AN_LINK_SPEED_1000 0x08
191-
#define XGBE_SGMII_AN_LINK_DUPLEX BIT(4)
191+
#define XGBE_SGMII_AN_LINK_STATUS BIT(4)
192192

193193
/* ECC correctable error notification window (seconds) */
194194
#define XGBE_ECC_LIMIT 60

0 commit comments

Comments
 (0)