Merge branch 'rmobile' of git://git.denx.de/u-boot-sh
[platform/kernel/u-boot.git] / drivers / net / phy / marvell.c
index b8b1157..4eeb0f6 100644 (file)
@@ -8,6 +8,7 @@
  */
 #include <config.h>
 #include <common.h>
+#include <errno.h>
 #include <phy.h>
 
 #define PHY_AUTONEGOTIATE_TIMEOUT 5000
@@ -103,7 +104,7 @@ static int m88e1011s_config(struct phy_device *phydev)
 /* Parse the 88E1011's status register for speed and duplex
  * information
  */
-static uint m88e1xxx_parse_status(struct phy_device *phydev)
+static int m88e1xxx_parse_status(struct phy_device *phydev)
 {
        unsigned int speed;
        unsigned int mii_reg;
@@ -120,7 +121,7 @@ static uint m88e1xxx_parse_status(struct phy_device *phydev)
                        if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
                                puts(" TIMEOUT !\n");
                                phydev->link = 0;
-                               break;
+                               return -ETIMEDOUT;
                        }
 
                        if ((i++ % 1000) == 0)
@@ -162,10 +163,13 @@ static uint m88e1xxx_parse_status(struct phy_device *phydev)
 
 static int m88e1011s_startup(struct phy_device *phydev)
 {
-       genphy_update_link(phydev);
-       m88e1xxx_parse_status(phydev);
+       int ret;
 
-       return 0;
+       ret = genphy_update_link(phydev);
+       if (ret)
+               return ret;
+
+       return m88e1xxx_parse_status(phydev);
 }
 
 /* Marvell 88E1111S */
@@ -349,22 +353,21 @@ static int m88e1118_config(struct phy_device *phydev)
        /* Change Page Number */
        phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 0x0000);
 
-       genphy_config_aneg(phydev);
-
-       phy_reset(phydev);
-
-       return 0;
+       return genphy_config_aneg(phydev);
 }
 
 static int m88e1118_startup(struct phy_device *phydev)
 {
+       int ret;
+
        /* Change Page Number */
        phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 0x0000);
 
-       genphy_update_link(phydev);
-       m88e1xxx_parse_status(phydev);
+       ret = genphy_update_link(phydev);
+       if (ret)
+               return ret;
 
-       return 0;
+       return m88e1xxx_parse_status(phydev);
 }
 
 /* Marvell 88E1121R */
@@ -421,12 +424,15 @@ static int m88e1145_config(struct phy_device *phydev)
 
 static int m88e1145_startup(struct phy_device *phydev)
 {
-       genphy_update_link(phydev);
+       int ret;
+
+       ret = genphy_update_link(phydev);
+       if (ret)
+               return ret;
+
        phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1145_PHY_LED_CONTROL,
                        MIIM_88E1145_PHY_LED_DIRECT);
-       m88e1xxx_parse_status(phydev);
-
-       return 0;
+       return m88e1xxx_parse_status(phydev);
 }
 
 /* Marvell 88E1149S */
@@ -471,10 +477,7 @@ static int m88e1310_config(struct phy_device *phydev)
        /* Ensure to return to page 0 */
        phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1310_PHY_PAGE, 0x0000);
 
-       genphy_config_aneg(phydev);
-       phy_reset(phydev);
-
-       return 0;
+       return genphy_config_aneg(phydev);
 }
 
 static struct phy_driver M88E1011S_driver = {