[PATCH net-next 2/4] net: phy: xpcs: Return error upon RX/TX fault

From: Jose Abreu
Date: Fri Mar 13 2020 - 09:40:29 EST


RX/TX fault status results in link errors. Return error upon these cases
so that XPCS can be correctly resumed.

Signed-off-by: Jose Abreu <Jose.Abreu@xxxxxxxxxxxx>

---
Cc: Jose Abreu <Jose.Abreu@xxxxxxxxxxxx>
Cc: Andrew Lunn <andrew@xxxxxxx>
Cc: Florian Fainelli <f.fainelli@xxxxxxxxx>
Cc: Heiner Kallweit <hkallweit1@xxxxxxxxx>
Cc: Russell King <linux@xxxxxxxxxxxxxxx>
Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
Cc: netdev@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
---
drivers/net/phy/mdio-xpcs.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/mdio-xpcs.c b/drivers/net/phy/mdio-xpcs.c
index a4cbeecc6d42..23516397b982 100644
--- a/drivers/net/phy/mdio-xpcs.c
+++ b/drivers/net/phy/mdio-xpcs.c
@@ -190,10 +190,14 @@ static int xpcs_read_fault(struct mdio_xpcs_args *xpcs,
if (ret < 0)
return ret;

- if (ret & MDIO_STAT2_RXFAULT)
+ if (ret & MDIO_STAT2_RXFAULT) {
xpcs_warn(xpcs, state, "Receiver fault detected!\n");
- if (ret & MDIO_STAT2_TXFAULT)
+ return -EFAULT;
+ }
+ if (ret & MDIO_STAT2_TXFAULT) {
xpcs_warn(xpcs, state, "Transmitter fault detected!\n");
+ return -EFAULT;
+ }

ret = xpcs_read_vendor(xpcs, MDIO_MMD_PCS, DW_VR_XS_PCS_DIG_STS);
if (ret < 0)
--
2.7.4