Commit aadbd27f authored by Christian Marangi's avatar Christian Marangi Committed by David S. Miller

net: phy: correctly check soft_reset ret ONLY if defined for PHY

Introduced by commit 6e2d85ec ("net: phy: Stop with excessive soft
reset").

soft_reset call for phy_init_hw had multiple revision across the years
and the implementation goes back to 2014. Originally was a simple call
to write the generic PHY reset BIT, it was then moved to a dedicated
function. It was then added the option for PHY driver to define their
own special way to reset the PHY. Till this change, checking for ret was
correct as it was always filled by either the generic reset or the
custom implementation. This changed tho with commit 6e2d85ec ("net:
phy: Stop with excessive soft reset"), as the generic reset call to PHY
was dropped but the ret check was never made entirely optional and
dependent whether soft_reset was defined for the PHY driver or not.

Luckly nothing was ever added before the soft_reset call so the ret
check (in the case where a PHY didn't had soft_reset defined) although
wrong, never caused problems as ret was init 0 at the start of
phy_init_hw.

To prevent any kind of problem and to make the function cleaner and more
robust, correctly move the ret check if the soft_reset section making it
optional and needed only with the function defined.
Signed-off-by: default avatarChristian Marangi <ansuelsmth@gmail.com>
Reviewed-by: default avatarLarysa Zaremba <larysa.zaremba@intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f061c9f7
...@@ -1235,14 +1235,13 @@ int phy_init_hw(struct phy_device *phydev) ...@@ -1235,14 +1235,13 @@ int phy_init_hw(struct phy_device *phydev)
if (phydev->drv->soft_reset) { if (phydev->drv->soft_reset) {
ret = phydev->drv->soft_reset(phydev); ret = phydev->drv->soft_reset(phydev);
if (ret < 0)
return ret;
/* see comment in genphy_soft_reset for an explanation */ /* see comment in genphy_soft_reset for an explanation */
if (!ret)
phydev->suspended = 0; phydev->suspended = 0;
} }
if (ret < 0)
return ret;
ret = phy_scan_fixups(phydev); ret = phy_scan_fixups(phydev);
if (ret < 0) if (ret < 0)
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