net: mv643xx_eth: use phy_init_hw to reset PHY
authorFlorian Fainelli <f.fainelli@gmail.com>
Fri, 6 Dec 2013 21:01:35 +0000 (13:01 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 10 Dec 2013 01:38:59 +0000 (20:38 -0500)
Instead of open-coding a PHY reset through the MII BMCR register, use
phy_init_hw() which does that for us and will also make sure that PHY
fixups are applied if required. We also remove a call to phy_reset()
due to the following sequence of calls in the driver:

phy_scan()
-> phy_connect()
-> phy_connect_direct()
-> phy_attach_direct()
-> phy_init_hw()

and we only have a call to phy_init() after phy_scan().

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mv643xx_eth.c

index fa905052fbf4c220abc34505ad96058ec8ab689e..b3d9327f78b9124cdd297fdbdb8d02bacbbbe335 100644 (file)
@@ -2066,23 +2066,6 @@ static inline void oom_timer_wrapper(unsigned long data)
        napi_schedule(&mp->napi);
 }
 
-static void phy_reset(struct mv643xx_eth_private *mp)
-{
-       int data;
-
-       data = phy_read(mp->phy, MII_BMCR);
-       if (data < 0)
-               return;
-
-       data |= BMCR_RESET;
-       if (phy_write(mp->phy, MII_BMCR, data) < 0)
-               return;
-
-       do {
-               data = phy_read(mp->phy, MII_BMCR);
-       } while (data >= 0 && data & BMCR_RESET);
-}
-
 static void port_start(struct mv643xx_eth_private *mp)
 {
        u32 pscr;
@@ -2095,7 +2078,7 @@ static void port_start(struct mv643xx_eth_private *mp)
                struct ethtool_cmd cmd;
 
                mv643xx_eth_get_settings(mp->dev, &cmd);
-               phy_reset(mp);
+               phy_init_hw(mp->phy);
                mv643xx_eth_set_settings(mp->dev, &cmd);
        }
 
@@ -2763,8 +2746,6 @@ static void phy_init(struct mv643xx_eth_private *mp, int speed, int duplex)
 {
        struct phy_device *phy = mp->phy;
 
-       phy_reset(mp);
-
        if (speed == 0) {
                phy->autoneg = AUTONEG_ENABLE;
                phy->speed = 0;