From 5767d52cec831b0e2927d34e91acd738cc1cb0ef Mon Sep 17 00:00:00 2001 From: Madalin Bucur Date: Mon, 14 May 2012 22:11:47 +0000 Subject: 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 (cherry picked from commit 2db23c6bd45fc4e6833dd86bb3ca28e37199b6ba) Reviewed-on: http://git.am.freescale.net:8181/1028 Reviewed-by: Fleming Andrew-AFLEMING Tested-by: Fleming Andrew-AFLEMING 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) { -- cgit v0.10.2