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
|