aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/9043-amd-xgbe-10Gbaset-MDIO-for-10G.patch
blob: 80c676420565b7975f52fe8e50deca32cc043133 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From a4cf803958f674229d9827147a3f278c7bdefe19 Mon Sep 17 00:00:00 2001
From: rgaridap <Ramesh.Garidapuri@amd.com>
Date: Fri, 29 Apr 2022 12:10:49 +0530
Subject: [PATCH 43/48] amd-xgbe: 10Gbaset MDIO for 10G

Signed-off-by: rgaridap <Ramesh.Garidapuri@amd.com>
Change-Id: I071e647c1aa06c0b715f4a449c6970168036e54a
---
 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
index bc8172c19082..944271556e0c 100755
--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
@@ -402,6 +402,7 @@ static void xgbe_an73_set(struct xgbe_prv_data *pdata, bool enable,
 		reg |= MDIO_AN_CTRL1_RESTART;
 
 	XMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_CTRL1, reg);
+	if(pdata->an_mode != XGBE_AN_MODE_MDIO) {
 
 	if(xgbe_cur_mode(pdata) == XGBE_MODE_KR) {
 		/* step-4 Start AN with KR training auto start */
@@ -410,6 +411,7 @@ static void xgbe_an73_set(struct xgbe_prv_data *pdata, bool enable,
 				(XGBE_KR_TRAINING_ENABLE | XGBE_KR_TRAINING_START),
 				(XGBE_KR_TRAINING_ENABLE | XGBE_KR_TRAINING_START));
 	}
+	}
 }
 
 static void xgbe_an73_restart(struct xgbe_prv_data *pdata)
@@ -1062,6 +1064,9 @@ static void xgbe_an_init(struct xgbe_prv_data *pdata)
 	case XGBE_AN_MODE_CL37_SGMII:
 		xgbe_an37_init(pdata);
 		break;
+	case XGBE_AN_MODE_MDIO:
+		netif_dbg(pdata, link, pdata->netdev, "xgbe_an_init for MDIO\n");
+		break;
 	default:
 		break;
 	}
@@ -1214,9 +1219,11 @@ static int __xgbe_phy_config_aneg(struct xgbe_prv_data *pdata, bool set_mode)
 	/* Disable auto-negotiation interrupt */
 	disable_irq(pdata->an_irq);
 
-	if(xgbe_cur_mode(pdata) == XGBE_MODE_KR) {
-		xgbe_change_mode(pdata, XGBE_MODE_KR);
-		netif_dbg(pdata, link, pdata->netdev, "AN force modeset 10GKR \n");
+	if(pdata->an_mode != XGBE_AN_MODE_MDIO) {
+		if(xgbe_cur_mode(pdata) == XGBE_MODE_KR) {
+			xgbe_change_mode(pdata, XGBE_MODE_KR);
+			netif_dbg(pdata, link, pdata->netdev, "AN force modeset 10GKR \n");
+		}
 	}
 
 	if (set_mode) {
@@ -1285,8 +1292,10 @@ static bool xgbe_phy_aneg_done(struct xgbe_prv_data *pdata)
 	if (pdata->an_mode == XGBE_AN_MODE_MDIO) {
 		if(pdata->phy.link)
 			pdata->an_result = XGBE_AN_COMPLETE;
-		else
+		else {
+				netif_dbg(pdata, link, pdata->netdev, "xgbe_phy_aneg_done : *******  Forcing next mode ******* \n");
 			pdata->an_result = XGBE_AN_NO_LINK;
+		}
 	}
 	return (pdata->an_result == XGBE_AN_COMPLETE);
 }
-- 
2.27.0