Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1207079
| From | Igor Plyatov <plyatov@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v2] net: phy: workaround for buggy cable detection by LAN8700 after cable plugging |
| Date | 2015-08-13 21:20 +0200 |
| Message-ID | <pX6cF-43o-9@gated-at.bofh.it> (permalink) |
| Organization | linux.* mail to news gateway |
* Due to HW bug, LAN8700 sometimes does not detect presence of energy in the
Ethernet cable in Energy Detect Power-Down mode (e.g while EDPWRDOWN bit is
set, the ENERGYON bit does not asserted sometimes). This is a common bug of
LAN87xx family of PHY chips.
* The lan87xx_read_status() was improved to acquire ENERGYON bit. Its previous
algorythm still not reliable on 100 % and sometimes skip cable plugging.
Signed-off-by: Igor Plyatov <plyatov@gmail.com>
---
drivers/net/phy/smsc.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
index c0f6479..8559ff1 100644
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -104,6 +104,7 @@ static int lan911x_config_init(struct phy_device *phydev)
static int lan87xx_read_status(struct phy_device *phydev)
{
int err = genphy_read_status(phydev);
+ int i;
if (!phydev->link) {
/* Disable EDPD to wake up PHY */
@@ -116,8 +117,16 @@ static int lan87xx_read_status(struct phy_device *phydev)
if (rc < 0)
return rc;
- /* Sleep 64 ms to allow ~5 link test pulses to be sent */
- msleep(64);
+ /* Wait max 640 ms to detect energy */
+ for (i = 0; i < 64; i++) {
+ /* Sleep to allow link test pulses to be sent */
+ msleep(10);
+ rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
+ if (rc < 0)
+ return rc;
+ if (rc & MII_LAN83C185_ENERGYON)
+ break;
+ };
/* Re-enable EDPD */
rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
@@ -191,7 +200,7 @@ static struct phy_driver smsc_phy_driver[] = {
/* basic functions */
.config_aneg = genphy_config_aneg,
- .read_status = genphy_read_status,
+ .read_status = lan87xx_read_status,
.config_init = smsc_phy_config_init,
.soft_reset = smsc_phy_reset,
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
[PATCH v2] net: phy: workaround for buggy cable detection by LAN8700 after cable plugging Igor Plyatov <plyatov@gmail.com> - 2015-08-13 21:20 +0200
Re: [PATCH v2] net: phy: workaround for buggy cable detection by LAN8700 after cable plugging Igor Plyatov <plyatov@gmail.com> - 2015-08-14 10:10 +0200
Re: [PATCH v2] net: phy: workaround for buggy cable detection by LAN8700 after cable plugging Michael Heimpold <mhei@heimpold.de> - 2015-08-14 18:40 +0200
Re: [PATCH v2] net: phy: workaround for buggy cable detection by LAN8700 after cable plugging Igor Plyatov <plyatov@gmail.com> - 2015-08-14 19:20 +0200
csiph-web