On Wed, Feb 28, 2018 at 04:43:48PM +0100, Andrew Lunn wrote:
When a PHY has the BMCR_PDOWN bit set, it may decide to ignore writes to other registers, or reset the registers to power-on defaults. Micrel PHYs do this for their interrupt registers.
The current structure of phylib tries to enable interrupts before resuming (and releasing) the BMCR_PDOWN bit. This fails, causing Micrel PHYs to stop working after a suspend/resume sequence if they are using interrupts.
Fix this by ensuring that the PHY driver resume methods do not take the phydev->lock mutex themselves, but the callers of phy_resume() take that lock. This then allows us to move the call to phy_resume() before we enable interrupts in phy_start().
Hi Greg
This patch introduces some issues. You don't want this patch on its own, you want it in combination with:
Fixes: 9c2c2e62df3f ("net: phy: Restore phy_resume() locking assumption")
Which went into David Millers net tree yesterday and should be making its way towards stable.
I suggest you hold off on this patch, until you can do both at the same time.
Thanks for letting me know, I've now dropped this.
greg k-h