diff options
author | Madalin Bucur <madalin.bucur@freescale.com> | 2012-05-14 22:11:47 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-08 23:07:17 (GMT) |
commit | 5767d52cec831b0e2927d34e91acd738cc1cb0ef (patch) | |
tree | 09f5807d4f3751b9622243f4e2ce37c06425de6a | |
parent | 392aeab578c624bb00787b21d7a0b27f31785f23 (diff) | |
download | linux-fsl-qoriq-5767d52cec831b0e2927d34e91acd738cc1cb0ef.tar.xz |
phy/marvell: select copper registers in SGMII to copper mode
For the Marvel 88e1111 PHY only two SGMII modes are available, both
allowing only SGMII to copper mode (with or without clock). SGMII
to fiber mode is not supported. Make sure the fiber/copper registers
selector bit is cleared, selecting copper mode registers. The bit is
found set after the Auto-Negotiation restart erratum is performed.
Change-Id: I21c829260e0f2440f66170d5d8721e7569d8154d
Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
(cherry picked from commit 2db23c6bd45fc4e6833dd86bb3ca28e37199b6ba)
Reviewed-on: http://git.am.freescale.net:8181/1028
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
-rw-r--r-- | drivers/net/phy/marvell.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 22dec9c..db59f9e 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -52,6 +52,8 @@ #define MII_M1145_RGMII_RX_DELAY 0x0080 #define MII_M1145_RGMII_TX_DELAY 0x0002 +#define MII_M1145_PHY_EXT_ADDR_PAGE 0x16 + #define MII_M1111_PHY_LED_CONTROL 0x18 #define MII_M1111_PHY_LED_DIRECT 0x4100 #define MII_M1111_PHY_LED_COMBINE 0x411c @@ -404,6 +406,16 @@ static int m88e1111_config_init(struct phy_device *phydev) err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); if (err < 0) return err; + + /* make sure copper is selected */ + err = phy_read(phydev, MII_M1145_PHY_EXT_ADDR_PAGE); + if (err < 0) + return err; + + err = phy_write(phydev, MII_M1145_PHY_EXT_ADDR_PAGE, + err & (~1)); + if (err < 0) + return err; } if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { |