net: phy: fix too strict check in phy_start_aneg
When adding checks to detect wrong usage of the phylib API we added
a check to phy_start_aneg() which is too strict. If the phylib
state machine is in state PHY_HALTED we should allow reconfiguring
and restarting aneg, and just don't touch the state.
Fixes: 2b3e88ea65
("net: phy: improve phy state checking")
Reported-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Tested-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5642e27bf6
commit
d9f903f6af
|
@ -543,13 +543,6 @@ int phy_start_aneg(struct phy_device *phydev)
|
|||
|
||||
mutex_lock(&phydev->lock);
|
||||
|
||||
if (!__phy_is_started(phydev)) {
|
||||
WARN(1, "called from state %s\n",
|
||||
phy_state_to_str(phydev->state));
|
||||
err = -EBUSY;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (AUTONEG_DISABLE == phydev->autoneg)
|
||||
phy_sanitize_settings(phydev);
|
||||
|
||||
|
@ -560,11 +553,13 @@ int phy_start_aneg(struct phy_device *phydev)
|
|||
if (err < 0)
|
||||
goto out_unlock;
|
||||
|
||||
if (phydev->autoneg == AUTONEG_ENABLE) {
|
||||
err = phy_check_link_status(phydev);
|
||||
} else {
|
||||
phydev->state = PHY_FORCING;
|
||||
phydev->link_timeout = PHY_FORCE_TIMEOUT;
|
||||
if (__phy_is_started(phydev)) {
|
||||
if (phydev->autoneg == AUTONEG_ENABLE) {
|
||||
err = phy_check_link_status(phydev);
|
||||
} else {
|
||||
phydev->state = PHY_FORCING;
|
||||
phydev->link_timeout = PHY_FORCE_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
out_unlock:
|
||||
|
|
Loading…
Reference in New Issue