]> git.baikalelectronics.ru Git - kernel.git/commit
net: phy: smsc: fix printing too many logs
authorDejin Zheng <zhengdejin5@gmail.com>
Sat, 20 Jun 2020 14:55:34 +0000 (22:55 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 22 Jun 2020 23:08:48 +0000 (16:08 -0700)
commit00794ce7369971a66a4885459b134a9af103f4a7
treef196a36bd81a7bc63074db8e094c5637f8e65323
parentd76b73b46e1d77d6e41bd99a3f5709ac4e4d6999
net: phy: smsc: fix printing too many logs

Commit d8edf86a6c1402 ("net: phy: smsc: use phy_read_poll_timeout()
to simplify the code") will print a lot of logs as follows when Ethernet
cable is not connected:

[    4.473105] SMSC LAN8710/LAN8720 2188000.ethernet-1:00: lan87xx_read_status failed: -110

When wait 640 ms for check ENERGYON bit, the timeout should not be
regarded as an actual error and an error message also should not be
printed. due to a hardware bug in LAN87XX device, it leads to unstable
detection of plugging in Ethernet cable when LAN87xx is in Energy Detect
Power-Down mode. the workaround for it involves, when the link is down,
and at each read_status() call:

- disable EDPD mode, forcing the PHY out of low-power mode
- waiting 640ms to see if we have any energy detected from the media
- re-enable entry to EDPD mode

This is presumably enough to allow the PHY to notice that a cable is
connected, and resume normal operations to negotiate with the partner.
The problem is that when no media is detected, the 640ms wait times
out and this commit was modified to prints an error message. it is an
inappropriate conversion by used phy_read_poll_timeout() to introduce
this bug. so fix this issue by use read_poll_timeout() to replace
phy_read_poll_timeout().

Fixes: d8edf86a6c1402 ("net: phy: smsc: use phy_read_poll_timeout() to simplify the code")
Reported-by: Kevin Groeneveld <kgroeneveld@gmail.com>
Signed-off-by: Dejin Zheng <zhengdejin5@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/smsc.c