On Wed, Jun 17, 2020 at 11:36:42PM +0200, Andrew Lunn wrote: > On Wed, Jun 17, 2020 at 09:24:50PM +0100, Russell King - ARM Linux admin > wrote: > > On Wed, Jun 17, 2020 at 08:43:34PM +0200, Andrew Lunn wrote: > > > You have explained what the change does. But not why it is > > > needed. What exactly is happening. To me, the key thing is > > > understanding why we get -110, and why it is not an actual error we > > > should be reporting as an error. That is what needs explaining. > > > > The patch author really ought to be explaining this... but let me > > have a go. It's worth pointing out that the comments in the file > > aren't good English either, so don't really describe what is going > > on. > > > > When this PHY is in EDPD mode, it doesn't always detect a connected > > cable. 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 (as it should, we don't want to wait forever) and the kernel > > prints a warning. > > Hi Russell > > Yes, that is what i was thinking. > > There probably should be a comment added just to prevent somebody > swapping it back to phy_read_poll_timeout(). It is not clear that > -ETIMEOUT is expected under some conditions. > > Andrew
Hi Andrew and Russell, First of all, thanks very much for your comment! I did not understand Andrew's comments correctly in the previous email, sorry for my bad English. I found something in the commit 776829de90c597 ("net: phy: workaround for buggy cable detection by LAN8700 after cable plugging") about why it is not an actual error when get a timeout error in this driver. the commit's link is here: https://lore.kernel.org/patchwork/patch/590285/ As Russell said, it just for fix a hardware bug on LAN8700 device by wait 640ms, so it should not as an actual error when got timeout. The following is my understanding: It leads to unstable detection of plugging in Ethernet cable when LAN87xx is in Energy Detect Power-Down mode. Because the ENERGYON bit is not set. For fix this issue, it will disables Energy Detect Power-Down mode and check ENERGYON bit to waiting for response on link pulses to detect presence of plugged Ethernet cable in the 640ms. if got the ENERGYON bit is set, I guess the cable plug-in event was detected and will report an interrupt after exit lan87xx_read_status() funtion, if the ENERGYON bit is not set, the plug-in event was not detected. after that, entry Energy Detect Power-Down mode again. it will re-call lan87xx_read_status() funtion by interrupt when got the ENERGYON bit is set. and check link status again. then, It will get a stable link status for LAN87xx device. So the timeout for wait 640ms should not as an actual error. Thanks! Dejin