net: uec_phy: Implement TXID and RXID RGMII modes for Marvell PHYs
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Wed, 16 Sep 2009 19:21:53 +0000 (23:21 +0400)
committerKim Phillips <kim.phillips@freescale.com>
Fri, 25 Sep 2009 23:25:41 +0000 (18:25 -0500)
This will be needed for MPC8360E-MDS boards with rev. 2.1 CPUs.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
drivers/qe/uec.h
drivers/qe/uec_phy.c

index 1568310090b94d9956c75c33236ed97ba1416c97..df6f7c987817f5b688695cda611442e3c743523e 100644 (file)
@@ -670,6 +670,7 @@ typedef enum enet_interface {
        ENET_1000_RGMII,
        ENET_1000_RGMII_ID,
        ENET_1000_RGMII_RXID,
+       ENET_1000_RGMII_TXID,
        ENET_1000_TBI,
        ENET_1000_RTBI,
        ENET_1000_SGMII
index aa4eb5e389363adf43c823f12b0a7d74ab81244d..97151839428e8913fdf67d8e1f1fc54a42a56049 100644 (file)
@@ -429,12 +429,23 @@ static int marvell_init(struct uec_mii_info *mii_info)
 {
        struct eth_device *edev = mii_info->dev;
        uec_private_t *uec = edev->priv;
+       enum enet_interface iface = uec->uec_info->enet_interface;
 
-       if (uec->uec_info->enet_interface == ENET_1000_RGMII_ID) {
+       if (iface == ENET_1000_RGMII_ID ||
+                       iface == ENET_1000_RGMII_RXID ||
+                       iface == ENET_1000_RGMII_TXID) {
                int temp;
 
                temp = phy_read(mii_info, MII_M1111_PHY_EXT_CR);
-               temp |= (MII_M1111_RX_DELAY | MII_M1111_TX_DELAY);
+               if (iface == ENET_1000_RGMII_ID) {
+                       temp |= MII_M1111_RX_DELAY | MII_M1111_TX_DELAY;
+               } else if (iface == ENET_1000_RGMII_RXID) {
+                       temp &= ~MII_M1111_TX_DELAY;
+                       temp |= MII_M1111_RX_DELAY;
+               } else if (iface == ENET_1000_RGMII_TXID) {
+                       temp &= ~MII_M1111_RX_DELAY;
+                       temp |= MII_M1111_TX_DELAY;
+               }
                phy_write(mii_info, MII_M1111_PHY_EXT_CR, temp);
 
                temp = phy_read(mii_info, MII_M1111_PHY_EXT_SR);