Commit 9576e9fa authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

net: phy: clear phydev->suspended after soft reset

If a soft reset is triggered whilst PHY is in power-down, then
phydev->suspended will remain set. Seems we didn't face any issue yet
caused by this, but better reset the suspended flag after soft reset.

See also the following from 22.2.4.1.1
Resetting a PHY is accomplished by setting bit 0.15 to a logic one.
This action shall set the status and control registers to their default
states.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 31949154
...@@ -1082,8 +1082,12 @@ int phy_init_hw(struct phy_device *phydev) ...@@ -1082,8 +1082,12 @@ int phy_init_hw(struct phy_device *phydev)
if (!phydev->drv) if (!phydev->drv)
return 0; return 0;
if (phydev->drv->soft_reset) if (phydev->drv->soft_reset) {
ret = phydev->drv->soft_reset(phydev); ret = phydev->drv->soft_reset(phydev);
/* see comment in genphy_soft_reset for an explanation */
if (!ret)
phydev->suspended = 0;
}
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -2157,6 +2161,12 @@ int genphy_soft_reset(struct phy_device *phydev) ...@@ -2157,6 +2161,12 @@ int genphy_soft_reset(struct phy_device *phydev)
if (ret < 0) if (ret < 0)
return ret; return ret;
/* Clause 22 states that setting bit BMCR_RESET sets control registers
* to their default value. Therefore the POWER DOWN bit is supposed to
* be cleared after soft reset.
*/
phydev->suspended = 0;
ret = phy_poll_reset(phydev); ret = phy_poll_reset(phydev);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment