net: phy: select copper mode when Marvel 88e1111 in SGMII
authorMadalin Bucur <madalin.bucur@freescale.com>
Fri, 7 Aug 2015 09:07:50 +0000 (17:07 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 10 Aug 2015 20:31:18 +0000 (13:31 -0700)
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 bits are cleared for selecting copper mode.

Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/marvell.c

index 3320a17..e6897b6 100644 (file)
@@ -52,6 +52,7 @@
 #define MII_M1011_PHY_SCR_MDI_X                0x0020
 #define MII_M1011_PHY_SCR_AUTO_CROSS   0x0060
 
+#define MII_M1145_PHY_EXT_ADDR_PAGE    0x16
 #define MII_M1145_PHY_EXT_SR           0x1b
 #define MII_M1145_PHY_EXT_CR           0x14
 #define MII_M1145_RGMII_RX_DELAY       0x0080
@@ -552,6 +553,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 & (~0xff));
+               if (err < 0)
+                       return err;
        }
 
        if (phydev->interface == PHY_INTERFACE_MODE_RTBI) {