On Wed, Dec 09, 2015 at 11:21:25AM -0800, Stefan Agner wrote: > When doing a software reset, the reset flag should be written without > other bits set. Writing the current state will lead to restoring the > state of the PHY (e.g. Powerdown), which is not what is expected from > a software reset. > > Signed-off-by: Stefan Agner <ste...@agner.ch>
Acked-by: Michael Welling <mwell...@ieee.org> > --- > This lead to the PHY staying powered down on a reboot when using a > Micrel PHY and not using hardware reset... > > It also aligns with the behavior of Linux: > http://lxr.free-electrons.com/source/drivers/net/phy/phy_device.c#L1122 > > -- > Stefan > > drivers/net/phy/phy.c | 11 ++--------- > 1 file changed, 2 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c > index 51b5746..ef9f13b 100644 > --- a/drivers/net/phy/phy.c > +++ b/drivers/net/phy/phy.c > @@ -717,15 +717,7 @@ int phy_reset(struct phy_device *phydev) > } > #endif > > - reg = phy_read(phydev, devad, MII_BMCR); > - if (reg < 0) { > - debug("PHY status read failed\n"); > - return -1; > - } > - > - reg |= BMCR_RESET; > - > - if (phy_write(phydev, devad, MII_BMCR, reg) < 0) { > + if (phy_write(phydev, devad, MII_BMCR, BMCR_RESET) < 0) { > debug("PHY reset failed\n"); > return -1; > } > @@ -738,6 +730,7 @@ int phy_reset(struct phy_device *phydev) > * auto-clearing). This should happen within 0.5 seconds per the > * IEEE spec. > */ > + reg = phy_read(phydev, devad, MII_BMCR); > while ((reg & BMCR_RESET) && timeout--) { > reg = phy_read(phydev, devad, MII_BMCR); > > -- > 2.6.3 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot