]> git.baikalelectronics.ru Git - kernel.git/commit
phy: micrel: Disable auto negotiation on startup
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>
Fri, 26 Feb 2016 18:18:23 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Mar 2016 21:52:09 +0000 (16:52 -0500)
commitc3113812c04e6d0195df81ab2bc888134daa0ae8
tree9a5f0505739358bb9ad908e4d7a959849199cf00
parentbff06a34c7d26f70a212fa9da1168cabe9cc04ef
phy: micrel: Disable auto negotiation on startup

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 d64ce4d8714a (net: phy: Use interrupts when
available in NOLINK state) because switching to NOLINK meant starting
polling the phy, even if IRQ were enabled.

Fixes: d64ce4d8714a (net: phy: Use interrupts when available in NOLINK state)
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/micrel.c