2.6.36-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Arnaud Patard <[email protected]>

commit be8c648051048bc66fbca590d00f3e8543ec32af upstream.

Commit c477d0447db08068a497e7beb892b2b2a7bff64b added support for RGMII
rx/tx delays except that it ends up clearing rx/tx delays bit for modes
differents that RGMII*ID. Due to this, ethernet is not working anymore
on my guruplug server +. This patch is fixing that.

Signed-off-by: Arnaud Patard <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/net/phy/marvell.c |   31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -196,20 +196,27 @@ static int m88e1121_config_aneg(struct p
                        MII_88E1121_PHY_MSCR_PAGE);
        if (err < 0)
                return err;
-       mscr = phy_read(phydev, MII_88E1121_PHY_MSCR_REG) &
-               MII_88E1121_PHY_MSCR_DELAY_MASK;
 
-       if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
-               mscr |= (MII_88E1121_PHY_MSCR_RX_DELAY |
-                        MII_88E1121_PHY_MSCR_TX_DELAY);
-       else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
-               mscr |= MII_88E1121_PHY_MSCR_RX_DELAY;
-       else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
-               mscr |= MII_88E1121_PHY_MSCR_TX_DELAY;
+       if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
 
-       err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr);
-       if (err < 0)
-               return err;
+               mscr = phy_read(phydev, MII_88E1121_PHY_MSCR_REG) &
+                       MII_88E1121_PHY_MSCR_DELAY_MASK;
+
+               if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
+                       mscr |= (MII_88E1121_PHY_MSCR_RX_DELAY |
+                                MII_88E1121_PHY_MSCR_TX_DELAY);
+               else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
+                       mscr |= MII_88E1121_PHY_MSCR_RX_DELAY;
+               else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
+                       mscr |= MII_88E1121_PHY_MSCR_TX_DELAY;
+
+               err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr);
+               if (err < 0)
+                       return err;
+       }
 
        phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
 


_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to