[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <60685308-a848-e4d0-e170-f2738f046679@gmail.com>
Date: Wed, 18 Jul 2018 08:14:09 +0200
From: Heiner Kallweit <hkallweit1@...il.com>
To: Andrew Lunn <andrew@...n.ch>,
Florian Fainelli <f.fainelli@...il.com>,
David Miller <davem@...emloft.net>
Cc: "netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: [PATCH net-next] net: phy: add GBit master / slave error detection
Certain PHY's have issues when operating in GBit slave mode and can
be forced to master mode. Examples are RTL8211C, also the Micrel PHY
driver has a DT setting to force master mode.
If two such chips are link partners the autonegotiation will fail.
Standard defines a self-clearing on read, latched-high bit to
indicate this error. Check this bit to inform the user.
Signed-off-by: Heiner Kallweit <hkallweit1@...il.com>
---
drivers/net/phy/phy_device.c | 5 +++++
include/uapi/linux/mii.h | 1 +
2 files changed, 6 insertions(+)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index b9f5f40a..249c6f75 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -1551,6 +1551,11 @@ int genphy_read_status(struct phy_device *phydev)
if (lpagb < 0)
return lpagb;
+ if (lpagb & LPA_1000MSFAIL) {
+ phydev_err(phydev, "Master/Slave resolution failed, maybe conflicting manual settings?\n");
+ return -ENOLINK;
+ }
+
adv = phy_read(phydev, MII_CTRL1000);
if (adv < 0)
return adv;
diff --git a/include/uapi/linux/mii.h b/include/uapi/linux/mii.h
index b5c2fdcf..a5062165 100644
--- a/include/uapi/linux/mii.h
+++ b/include/uapi/linux/mii.h
@@ -136,6 +136,7 @@
#define CTL1000_ENABLE_MASTER 0x1000
/* 1000BASE-T Status register */
+#define LPA_1000MSFAIL 0x8000 /* Master/Slave resolution failure */
#define LPA_1000LOCALRXOK 0x2000 /* Link partner local receiver status */
#define LPA_1000REMRXOK 0x1000 /* Link partner remote receiver status */
#define LPA_1000FULL 0x0800 /* Link partner 1000BASE-T full duplex */
--
2.18.0
Powered by blists - more mailing lists