On Mon, May 18, 2020 at 07:35:48PM +0200, Greg Kroah-Hartman wrote:
From: Alexandre Belloni alexandre.belloni@free-electrons.com
[ Upstream commit 99f81afc139c6edd14d77a91ee91685a414a1c66 ]
I notice 99f81afc139c has been reverted in mainline with commit b43bd72835a5. The revert commit points out that:
"It was papering over the real problem, which is fixed by commit f555f34fdc58 ("net: phy: fix auto-negotiation stall due to unavailable interrupt")"
Therefore, consider backporting f555f34fdc58 instead of 99f81afc139c.
Notice if f555f34fdc58 is taken, then I believe 215d08a85b9a should also be backported.
Thanks, -- Henri
Disable auto negotiation on init to properly detect an already plugged cable at boot.
At boot, when the phy is started, it is in the PHY_UP state. However, if a cable is plugged at boot, because auto negociation is already enabled at the time we get the first interrupt, the phy is already running. But the state machine then switches from PHY_UP to PHY_AN and calls phy_start_aneg(). phy_start_aneg() will not do anything because aneg is already enabled on the phy. It will then wait for a interrupt before going further. This interrupt will never happen unless the cable is unplugged and then replugged.
It was working properly before 321beec5047a (net: phy: Use interrupts when available in NOLINK state) because switching to NOLINK meant starting polling the phy, even if IRQ were enabled.