blob: 384d8bdc9363b74696b60eaed9143539f016c7ca (
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
|
From 94f4f26d64b2048d6c99a2aa120b295fa1afba26 Mon Sep 17 00:00:00 2001
From: Sudheesh Mavila <sudheesh.mavila@amd.com>
Date: Tue, 12 Mar 2019 22:33:11 +0530
Subject: [PATCH] amd-xgbe Sometimes driver report incorrect link status and
results in timeout error in driver
Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
---
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
index 151bdb629e8a..ff4eeb55ab79 100755
--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
@@ -2565,8 +2565,18 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
*/
reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
reg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);
- if (reg & MDIO_STAT1_LSTATUS)
- return 1;
+ if(phy_data->sfp_speed == XGBE_SFP_SPEED_10000) {
+ if ((reg & MDIO_STAT1_LSTATUS) && !(reg & MDIO_STAT1_FAULT)) {
+ return 1;
+ } else {
+ *an_restart = 1;
+ pdata->phy_if.phy_reset(pdata);
+ return 0;
+ }
+ } else {
+ if (reg & MDIO_STAT1_LSTATUS)
+ return 1;
+ }
/* No link, attempt a receiver reset cycle */
if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) {
--
2.17.1
|