diff options
author | Andrew Lunn <andrew@lunn.ch> | 2017-07-30 22:41:50 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-07-31 18:00:23 -0700 |
commit | 6ef05eb73c8f623aec11449c9c763f19fb8a8fb1 (patch) | |
tree | 6995f43e857b9797d07ac67ff59d257cdfe2f079 /drivers | |
parent | fecd5e910ebed27fa68c34bf7ecc300a12950897 (diff) |
net: phy: marvell: Refactor setting downshift into a helper
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/phy/marvell.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 34fd15b904e7..361fe9927ef2 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -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; |