Skip to content

Commit

Permalink
net: phy: marvell: Consolidate setting the phy-mode
Browse files Browse the repository at this point in the history
The same code is repeated a few times. Refactor into a helped.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Andrew Lunn authored and David S. Miller committed Aug 1, 2017
1 parent 6111159 commit 865b813
Showing 1 changed file with 40 additions and 48 deletions.
88 changes: 40 additions & 48 deletions drivers/net/phy/marvell.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,6 @@
#define MII_M1011_PHY_SCR_MDI_X 0x0020
#define MII_M1011_PHY_SCR_AUTO_CROSS 0x0060

#define MII_M1145_PHY_EXT_SR 0x1b
#define MII_M1145_HWCFG_MODE_SGMII_NO_CLK 0x4
#define MII_M1145_HWCFG_MODE_MASK 0xf
#define MII_M1145_HWCFG_FIBER_COPPER_AUTO 0x8000

#define MII_M1111_PHY_LED_CONTROL 0x18
#define MII_M1111_PHY_LED_DIRECT 0x4100
#define MII_M1111_PHY_LED_COMBINE 0x411c
Expand All @@ -74,12 +69,13 @@
#define MII_M1111_PHY_EXT_SR 0x1b

#define MII_M1111_HWCFG_MODE_MASK 0xf
#define MII_M1111_HWCFG_MODE_COPPER_RGMII 0xb
#define MII_M1111_HWCFG_MODE_FIBER_RGMII 0x3
#define MII_M1111_HWCFG_MODE_SGMII_NO_CLK 0x4
#define MII_M1111_HWCFG_MODE_RTBI 0x7
#define MII_M1111_HWCFG_MODE_COPPER_RTBI 0x9
#define MII_M1111_HWCFG_FIBER_COPPER_AUTO 0x8000
#define MII_M1111_HWCFG_FIBER_COPPER_RES 0x2000
#define MII_M1111_HWCFG_MODE_COPPER_RGMII 0xb
#define MII_M1111_HWCFG_FIBER_COPPER_RES BIT(13)
#define MII_M1111_HWCFG_FIBER_COPPER_AUTO BIT(15)

#define MII_88E1121_PHY_MSCR_REG 21
#define MII_88E1121_PHY_MSCR_RX_DELAY BIT(5)
Expand Down Expand Up @@ -693,6 +689,27 @@ static int m88e3016_config_init(struct phy_device *phydev)
return marvell_config_init(phydev);
}

static int m88e1111_config_init_hwcfg_mode(struct phy_device *phydev,
u16 mode,
int fibre_copper_auto)
{
int temp;

temp = phy_read(phydev, MII_M1111_PHY_EXT_SR);
if (temp < 0)
return temp;

temp &= ~(MII_M1111_HWCFG_MODE_MASK |
MII_M1111_HWCFG_FIBER_COPPER_AUTO |
MII_M1111_HWCFG_FIBER_COPPER_RES);
temp |= mode;

if (fibre_copper_auto)
temp |= MII_M1111_HWCFG_FIBER_COPPER_AUTO;

return phy_write(phydev, MII_M1111_PHY_EXT_SR, temp);
}

static int m88e1111_config_init_rgmii_delays(struct phy_device *phydev)
{
int temp;
Expand Down Expand Up @@ -740,17 +757,11 @@ static int m88e1111_config_init_rgmii(struct phy_device *phydev)
static int m88e1111_config_init_sgmii(struct phy_device *phydev)
{
int err;
int temp;

temp = phy_read(phydev, MII_M1111_PHY_EXT_SR);
if (temp < 0)
return temp;

temp &= ~(MII_M1111_HWCFG_MODE_MASK);
temp |= MII_M1111_HWCFG_MODE_SGMII_NO_CLK;
temp |= MII_M1111_HWCFG_FIBER_COPPER_AUTO;

err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp);
err = m88e1111_config_init_hwcfg_mode(
phydev,
MII_M1111_HWCFG_MODE_SGMII_NO_CLK,
MII_M1111_HWCFG_FIBER_COPPER_AUTO);
if (err < 0)
return err;

Expand All @@ -760,22 +771,16 @@ static int m88e1111_config_init_sgmii(struct phy_device *phydev)

static int m88e1111_config_init_rtbi(struct phy_device *phydev)
{
int temp;
int err;

err = m88e1111_config_init_rgmii_delays(phydev);
if (err)
return err;

temp = phy_read(phydev, MII_M1111_PHY_EXT_SR);
if (temp < 0)
return temp;

temp &= ~(MII_M1111_HWCFG_MODE_MASK |
MII_M1111_HWCFG_FIBER_COPPER_RES);
temp |= 0x7 | MII_M1111_HWCFG_FIBER_COPPER_AUTO;

err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp);
err = m88e1111_config_init_hwcfg_mode(
phydev,
MII_M1111_HWCFG_MODE_RTBI,
MII_M1111_HWCFG_FIBER_COPPER_AUTO);
if (err < 0)
return err;

Expand All @@ -784,16 +789,10 @@ static int m88e1111_config_init_rtbi(struct phy_device *phydev)
if (err < 0)
return err;

temp = phy_read(phydev, MII_M1111_PHY_EXT_SR);
if (temp < 0)
return temp;

temp &= ~(MII_M1111_HWCFG_MODE_MASK |
MII_M1111_HWCFG_FIBER_COPPER_RES);
temp |= MII_M1111_HWCFG_MODE_COPPER_RTBI |
MII_M1111_HWCFG_FIBER_COPPER_AUTO;

return phy_write(phydev, MII_M1111_PHY_EXT_SR, temp);
return m88e1111_config_init_hwcfg_mode(
phydev,
MII_M1111_HWCFG_MODE_RTBI,
MII_M1111_HWCFG_FIBER_COPPER_AUTO);
}

static int m88e1111_config_init(struct phy_device *phydev)
Expand Down Expand Up @@ -999,16 +998,9 @@ static int m88e1145_config_init_rgmii(struct phy_device *phydev)

static int m88e1145_config_init_sgmii(struct phy_device *phydev)
{
int temp = phy_read(phydev, MII_M1145_PHY_EXT_SR);

if (temp < 0)
return temp;

temp &= ~MII_M1145_HWCFG_MODE_MASK;
temp |= MII_M1145_HWCFG_MODE_SGMII_NO_CLK;
temp |= MII_M1145_HWCFG_FIBER_COPPER_AUTO;

return phy_write(phydev, MII_M1145_PHY_EXT_SR, temp);
return m88e1111_config_init_hwcfg_mode(
phydev, MII_M1111_HWCFG_MODE_SGMII_NO_CLK,
MII_M1111_HWCFG_FIBER_COPPER_AUTO);
}

static int m88e1145_config_init(struct phy_device *phydev)
Expand Down

0 comments on commit 865b813

Please sign in to comment.