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: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Heiner Kallweit 2020-04-23 21:38:42 +02:00 committed by David S. Miller
parent 3194915486
commit 9576e9fa1c
1 changed files with 11 additions and 1 deletions

View File

@ -1082,8 +1082,12 @@ int phy_init_hw(struct phy_device *phydev)
if (!phydev->drv)
return 0;
if (phydev->drv->soft_reset)
if (phydev->drv->soft_reset) {
ret = phydev->drv->soft_reset(phydev);
/* see comment in genphy_soft_reset for an explanation */
if (!ret)
phydev->suspended = 0;
}
if (ret < 0)
return ret;
@ -2157,6 +2161,12 @@ int genphy_soft_reset(struct phy_device *phydev)
if (ret < 0)
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);
if (ret)
return ret;