diff options
Diffstat (limited to 'drivers/net/ethernet/smsc/smsc911x.c')
| -rw-r--r-- | drivers/net/ethernet/smsc/smsc911x.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index c860c9007e49..219a99b7a631 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c | |||
| @@ -809,22 +809,17 @@ static int smsc911x_phy_check_loopbackpkt(struct smsc911x_data *pdata) | |||
| 809 | 809 | ||
| 810 | static int smsc911x_phy_reset(struct smsc911x_data *pdata) | 810 | static int smsc911x_phy_reset(struct smsc911x_data *pdata) |
| 811 | { | 811 | { |
| 812 | struct phy_device *phy_dev = pdata->phy_dev; | ||
| 813 | unsigned int temp; | 812 | unsigned int temp; |
| 814 | unsigned int i = 100000; | 813 | unsigned int i = 100000; |
| 815 | 814 | ||
| 816 | BUG_ON(!phy_dev); | 815 | temp = smsc911x_reg_read(pdata, PMT_CTRL); |
| 817 | BUG_ON(!phy_dev->bus); | 816 | smsc911x_reg_write(pdata, PMT_CTRL, temp | PMT_CTRL_PHY_RST_); |
| 818 | |||
| 819 | SMSC_TRACE(pdata, hw, "Performing PHY BCR Reset"); | ||
| 820 | smsc911x_mii_write(phy_dev->bus, phy_dev->addr, MII_BMCR, BMCR_RESET); | ||
| 821 | do { | 817 | do { |
| 822 | msleep(1); | 818 | msleep(1); |
| 823 | temp = smsc911x_mii_read(phy_dev->bus, phy_dev->addr, | 819 | temp = smsc911x_reg_read(pdata, PMT_CTRL); |
| 824 | MII_BMCR); | 820 | } while ((i--) && (temp & PMT_CTRL_PHY_RST_)); |
| 825 | } while ((i--) && (temp & BMCR_RESET)); | ||
| 826 | 821 | ||
| 827 | if (temp & BMCR_RESET) { | 822 | if (unlikely(temp & PMT_CTRL_PHY_RST_)) { |
| 828 | SMSC_WARN(pdata, hw, "PHY reset failed to complete"); | 823 | SMSC_WARN(pdata, hw, "PHY reset failed to complete"); |
| 829 | return -EIO; | 824 | return -EIO; |
| 830 | } | 825 | } |
| @@ -2296,7 +2291,7 @@ static int smsc911x_init(struct net_device *dev) | |||
| 2296 | } | 2291 | } |
| 2297 | 2292 | ||
| 2298 | /* Reset the LAN911x */ | 2293 | /* Reset the LAN911x */ |
| 2299 | if (smsc911x_soft_reset(pdata)) | 2294 | if (smsc911x_phy_reset(pdata) || smsc911x_soft_reset(pdata)) |
| 2300 | return -ENODEV; | 2295 | return -ENODEV; |
| 2301 | 2296 | ||
| 2302 | dev->flags |= IFF_MULTICAST; | 2297 | dev->flags |= IFF_MULTICAST; |
