Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af2d940d authored by Andy Fleming's avatar Andy Fleming Committed by Jeff Garzik
Browse files

Fix Vitesse RGMII-ID support



The Vitesse PHY on the 8641D needs to be set up with internal delay to
work in RGMII mode.  So we add skew when it is set to RGMII_ID mode.

Signed-off-by: default avatarAndy Fleming <afleming@freescale.com>
Signed-off-by: default avatarHaruki Dai <Dai.Haruki@freescale.com>
Signed-off-by: default avatarHaiying Wang <Haiying.Wang@freescale.com>
parent cc65185d
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@
/* Vitesse Extended Control Register 1 */
#define MII_VSC8244_EXT_CON1           0x17
#define MII_VSC8244_EXTCON1_INIT       0x0000
#define MII_VSC8244_EXTCON1_TX_SKEW_MASK	0x0c00
#define MII_VSC8244_EXTCON1_RX_SKEW_MASK	0x0300
#define MII_VSC8244_EXTCON1_TX_SKEW	0x0800
#define MII_VSC8244_EXTCON1_RX_SKEW	0x0200

/* Vitesse Interrupt Mask Register */
#define MII_VSC8244_IMASK		0x19
@@ -39,7 +43,7 @@

/* Vitesse Auxiliary Control/Status Register */
#define MII_VSC8244_AUX_CONSTAT        	0x1c
#define MII_VSC8244_AUXCONSTAT_INIT    	0x0004
#define MII_VSC8244_AUXCONSTAT_INIT    	0x0000
#define MII_VSC8244_AUXCONSTAT_DUPLEX  	0x0020
#define MII_VSC8244_AUXCONSTAT_SPEED   	0x0018
#define MII_VSC8244_AUXCONSTAT_GBIT    	0x0010
@@ -51,6 +55,7 @@ MODULE_LICENSE("GPL");

static int vsc824x_config_init(struct phy_device *phydev)
{
	int extcon;
	int err;

	err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
@@ -58,8 +63,20 @@ static int vsc824x_config_init(struct phy_device *phydev)
	if (err < 0)
		return err;

	err = phy_write(phydev, MII_VSC8244_EXT_CON1,
			MII_VSC8244_EXTCON1_INIT);
	extcon = phy_read(phydev, MII_VSC8244_EXT_CON1);

	if (extcon < 0)
		return err;

	extcon &= ~(MII_VSC8244_EXTCON1_TX_SKEW_MASK |
			MII_VSC8244_EXTCON1_RX_SKEW_MASK);

	if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
		extcon |= (MII_VSC8244_EXTCON1_TX_SKEW |
				MII_VSC8244_EXTCON1_RX_SKEW);

	err = phy_write(phydev, MII_VSC8244_EXT_CON1, extcon);

	return err;
}