net: phy: marvell: Refactor setting downshift into a helper
authorAndrew Lunn <andrew@lunn.ch>
Sun, 30 Jul 2017 20:41:50 +0000 (22:41 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Aug 2017 01:00:23 +0000 (18:00 -0700)
The 1116r has code to set downshift. Refactor this into a helper, so
in future other marvell PHYs can use it.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/marvell.c

index 34fd15b904e7065a2c0f97fcf3ec38c71793936d..361fe9927ef2a98059da1b0d142e1e6c7959e5ba 100644 (file)
@@ -58,6 +58,7 @@
 #define MII_M1011_PHY_SCR                      0x10
 #define MII_M1011_PHY_SCR_DOWNSHIFT_EN         BIT(11)
 #define MII_M1011_PHY_SCR_DOWNSHIFT_SHIFT      12
+#define MII_M1011_PHY_SRC_DOWNSHIFT_MASK       0x7800
 #define MII_M1011_PHY_SCR_MDI                  (0x0 << 5)
 #define MII_M1011_PHY_SCR_MDI_X                        (0x1 << 5)
 #define MII_M1011_PHY_SCR_AUTO_CROSS           (0x3 << 5)
@@ -263,6 +264,23 @@ static int marvell_set_polarity(struct phy_device *phydev, int polarity)
        return 0;
 }
 
+static int marvell_set_downshift(struct phy_device *phydev, bool enable,
+                                u8 retries)
+{
+       int reg;
+
+       reg = phy_read(phydev, MII_M1011_PHY_SCR);
+       if (reg < 0)
+               return reg;
+
+       reg &= MII_M1011_PHY_SRC_DOWNSHIFT_MASK;
+       reg |= ((retries - 1) << MII_M1011_PHY_SCR_DOWNSHIFT_SHIFT);
+       if (enable)
+               reg |= MII_M1011_PHY_SCR_DOWNSHIFT_EN;
+
+       return phy_write(phydev, MII_M1011_PHY_SCR, reg);
+}
+
 static int marvell_config_aneg(struct phy_device *phydev)
 {
        int err;
@@ -643,7 +661,6 @@ static int marvell_config_init(struct phy_device *phydev)
 
 static int m88e1116r_config_init(struct phy_device *phydev)
 {
-       int temp;
        int err;
 
        err = genphy_soft_reset(phydev);
@@ -660,10 +677,7 @@ static int m88e1116r_config_init(struct phy_device *phydev)
        if (err < 0)
                return err;
 
-       temp = phy_read(phydev, MII_M1011_PHY_SCR);
-       temp |= (7 << MII_M1011_PHY_SCR_DOWNSHIFT_SHIFT);
-       temp |= MII_M1011_PHY_SCR_DOWNSHIFT_EN;
-       err = phy_write(phydev, MII_M1011_PHY_SCR, temp);
+       err = marvell_set_downshift(phydev, true, 8);
        if (err < 0)
                return err;