Skip to content

Commit

Permalink
net: phy: smsc: reintroduced unconditional soft reset
Browse files Browse the repository at this point in the history
We detected some problems using the smsc lan8720a in combination with
i.MX28 and tracked this down to commit 2100968 ("net: phy: smsc: move
smsc_phy_config_init reset part in a soft_reset function")
With 2100968 the generic soft reset is replaced by a specific function
which handles power down state correctly. But additionally the soft reset
itself got conditional and is therefore also only performed if the phy is
in power down state.

This patch keeps the conditional wake up from power down, but
re-introduces the unconditional soft reset using the generic soft reset
function.
It was tested on linux-4.1.25 and linux-4.7.0-rc2.

Signed-off-by: Manfred Schlaegl <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Manfred Schlaegl authored and davem330 committed Jun 11, 2016
1 parent 698ea54 commit fc0f7e3
Showing 1 changed file with 4 additions and 13 deletions.
17 changes: 4 additions & 13 deletions drivers/net/phy/smsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,13 @@ static int smsc_phy_reset(struct phy_device *phydev)
* in all capable mode before using it.
*/
if ((rc & MII_LAN83C185_MODE_MASK) == MII_LAN83C185_MODE_POWERDOWN) {
int timeout = 50000;

/* set "all capable" mode and reset the phy */
/* set "all capable" mode */
rc |= MII_LAN83C185_MODE_ALL;
phy_write(phydev, MII_LAN83C185_SPECIAL_MODES, rc);
phy_write(phydev, MII_BMCR, BMCR_RESET);

/* wait end of reset (max 500 ms) */
do {
udelay(10);
if (timeout-- == 0)
return -1;
rc = phy_read(phydev, MII_BMCR);
} while (rc & BMCR_RESET);
}
return 0;

/* reset the phy */
return genphy_soft_reset(phydev);
}

static int lan911x_config_init(struct phy_device *phydev)
Expand Down

0 comments on commit fc0f7e3

Please sign in to comment.