summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMadalin Bucur <madalin.bucur@freescale.com>2012-05-14 22:11:47 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-08 23:07:17 (GMT)
commit5767d52cec831b0e2927d34e91acd738cc1cb0ef (patch)
tree09f5807d4f3751b9622243f4e2ce37c06425de6a
parent392aeab578c624bb00787b21d7a0b27f31785f23 (diff)
downloadlinux-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.c12
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) {