diff options
Diffstat (limited to 'drivers/qe/uec_phy.c')
| -rw-r--r-- | drivers/qe/uec_phy.c | 145 | 
1 files changed, 73 insertions, 72 deletions
| diff --git a/drivers/qe/uec_phy.c b/drivers/qe/uec_phy.c index 55c262294..c83ca4b58 100644 --- a/drivers/qe/uec_phy.c +++ b/drivers/qe/uec_phy.c @@ -121,8 +121,8 @@ static int gbit_config_aneg (struct uec_mii_info *mii_info);  static int genmii_config_aneg (struct uec_mii_info *mii_info);  static int genmii_update_link (struct uec_mii_info *mii_info);  static int genmii_read_status (struct uec_mii_info *mii_info); -u16 phy_read (struct uec_mii_info *mii_info, u16 regnum); -void phy_write (struct uec_mii_info *mii_info, u16 regnum, u16 val); +u16 uec_phy_read(struct uec_mii_info *mii_info, u16 regnum); +void uec_phy_write(struct uec_mii_info *mii_info, u16 regnum, u16 val);  /* Write value to the PHY for this device to the register at regnum, */  /* waiting until the write is done before it returns.  All PHY */ @@ -242,7 +242,7 @@ static void config_genmii_advert (struct uec_mii_info *mii_info)  	advertise = mii_info->advertising;  	/* Setup standard advertisement */ -	adv = phy_read (mii_info, MII_ADVERTISE); +	adv = uec_phy_read(mii_info, MII_ADVERTISE);  	adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4);  	if (advertise & ADVERTISED_10baseT_Half)  		adv |= ADVERTISE_10HALF; @@ -252,7 +252,7 @@ static void config_genmii_advert (struct uec_mii_info *mii_info)  		adv |= ADVERTISE_100HALF;  	if (advertise & ADVERTISED_100baseT_Full)  		adv |= ADVERTISE_100FULL; -	phy_write (mii_info, MII_ADVERTISE, adv); +	uec_phy_write(mii_info, MII_ADVERTISE, adv);  }  static void genmii_setup_forced (struct uec_mii_info *mii_info) @@ -260,7 +260,7 @@ static void genmii_setup_forced (struct uec_mii_info *mii_info)  	u16 ctrl;  	u32 features = mii_info->phyinfo->features; -	ctrl = phy_read (mii_info, MII_BMCR); +	ctrl = uec_phy_read(mii_info, MII_BMCR);  	ctrl &= ~(BMCR_FULLDPLX | BMCR_SPEED100 |  		  BMCR_SPEED1000 | BMCR_ANENABLE); @@ -290,7 +290,7 @@ static void genmii_setup_forced (struct uec_mii_info *mii_info)  		break;  	} -	phy_write (mii_info, MII_BMCR, ctrl); +	uec_phy_write(mii_info, MII_BMCR, ctrl);  }  /* Enable and Restart Autonegotiation */ @@ -298,9 +298,9 @@ static void genmii_restart_aneg (struct uec_mii_info *mii_info)  {  	u16 ctl; -	ctl = phy_read (mii_info, MII_BMCR); +	ctl = uec_phy_read(mii_info, MII_BMCR);  	ctl |= (BMCR_ANENABLE | BMCR_ANRESTART); -	phy_write (mii_info, MII_BMCR, ctl); +	uec_phy_write(mii_info, MII_BMCR, ctl);  }  static int gbit_config_aneg (struct uec_mii_info *mii_info) @@ -313,14 +313,14 @@ static int gbit_config_aneg (struct uec_mii_info *mii_info)  		config_genmii_advert (mii_info);  		advertise = mii_info->advertising; -		adv = phy_read (mii_info, MII_CTRL1000); +		adv = uec_phy_read(mii_info, MII_CTRL1000);  		adv &= ~(ADVERTISE_1000FULL |  			 ADVERTISE_1000HALF);  		if (advertise & SUPPORTED_1000baseT_Half)  			adv |= ADVERTISE_1000HALF;  		if (advertise & SUPPORTED_1000baseT_Full)  			adv |= ADVERTISE_1000FULL; -		phy_write (mii_info, MII_CTRL1000, adv); +		uec_phy_write(mii_info, MII_CTRL1000, adv);  		/* Start/Restart aneg */  		genmii_restart_aneg (mii_info); @@ -335,13 +335,13 @@ static int marvell_config_aneg (struct uec_mii_info *mii_info)  	/* The Marvell PHY has an errata which requires  	 * that certain registers get written in order  	 * to restart autonegotiation */ -	phy_write (mii_info, MII_BMCR, BMCR_RESET); +	uec_phy_write(mii_info, MII_BMCR, BMCR_RESET); -	phy_write (mii_info, 0x1d, 0x1f); -	phy_write (mii_info, 0x1e, 0x200c); -	phy_write (mii_info, 0x1d, 0x5); -	phy_write (mii_info, 0x1e, 0); -	phy_write (mii_info, 0x1e, 0x100); +	uec_phy_write(mii_info, 0x1d, 0x1f); +	uec_phy_write(mii_info, 0x1e, 0x200c); +	uec_phy_write(mii_info, 0x1d, 0x5); +	uec_phy_write(mii_info, 0x1e, 0); +	uec_phy_write(mii_info, 0x1e, 0x100);  	gbit_config_aneg (mii_info); @@ -373,13 +373,13 @@ static int genmii_update_link (struct uec_mii_info *mii_info)  	u16 status;  	/* Status is read once to clear old link state */ -	phy_read (mii_info, MII_BMSR); +	uec_phy_read(mii_info, MII_BMSR);  	/*  	 * Wait if the link is up, and autonegotiation is in progress  	 * (ie - we're capable and it's not done)  	 */ -	status = phy_read(mii_info, MII_BMSR); +	status = uec_phy_read(mii_info, MII_BMSR);  	if ((status & BMSR_LSTATUS) && (status & BMSR_ANEGCAPABLE)  	    && !(status & BMSR_ANEGCOMPLETE)) {  		int i = 0; @@ -395,7 +395,7 @@ static int genmii_update_link (struct uec_mii_info *mii_info)  			i++;  			udelay(1000);	/* 1 ms */ -			status = phy_read(mii_info, MII_BMSR); +			status = uec_phy_read(mii_info, MII_BMSR);  		}  		mii_info->link = 1;  	} else { @@ -420,7 +420,7 @@ static int genmii_read_status (struct uec_mii_info *mii_info)  		return err;  	if (mii_info->autoneg) { -		status = phy_read(mii_info, MII_STAT1000); +		status = uec_phy_read(mii_info, MII_STAT1000);  		if (status & (LPA_1000FULL | LPA_1000HALF)) {  			mii_info->speed = SPEED_1000; @@ -429,7 +429,7 @@ static int genmii_read_status (struct uec_mii_info *mii_info)  			else  				mii_info->duplex = DUPLEX_HALF;  		} else { -			status = phy_read(mii_info, MII_LPA); +			status = uec_phy_read(mii_info, MII_LPA);  			if (status & (LPA_10FULL | LPA_100FULL))  				mii_info->duplex = DUPLEX_FULL; @@ -463,25 +463,25 @@ static int bcm_init(struct uec_mii_info *mii_info)  		/* Wait for aneg to complete. */  		do -			val = phy_read(mii_info, MII_BMSR); +			val = uec_phy_read(mii_info, MII_BMSR);  		while (--cnt && !(val & BMSR_ANEGCOMPLETE));  		/* Set RDX clk delay. */ -		phy_write(mii_info, 0x18, 0x7 | (7 << 12)); +		uec_phy_write(mii_info, 0x18, 0x7 | (7 << 12)); -		val = phy_read(mii_info, 0x18); +		val = uec_phy_read(mii_info, 0x18);  		/* Set RDX-RXC skew. */  		val |= (1 << 8);  		val |= (7 | (7 << 12));  		/* Write bits 14:0. */  		val |= (1 << 15); -		phy_write(mii_info, 0x18, val); +		uec_phy_write(mii_info, 0x18, val);  	}  	 return 0;  } -static int marvell_init(struct uec_mii_info *mii_info) +static int uec_marvell_init(struct uec_mii_info *mii_info)  {  	struct eth_device *edev = mii_info->dev;  	uec_private_t *uec = edev->priv; @@ -494,7 +494,7 @@ static int marvell_init(struct uec_mii_info *mii_info)  	    iface == RGMII_TXID)) {  		int temp; -		temp = phy_read(mii_info, MII_M1111_PHY_EXT_CR); +		temp = uec_phy_read(mii_info, MII_M1111_PHY_EXT_CR);  		if (iface == RGMII_ID) {  			temp |= MII_M1111_RX_DELAY | MII_M1111_TX_DELAY;  		} else if (iface == RGMII_RXID) { @@ -504,14 +504,14 @@ static int marvell_init(struct uec_mii_info *mii_info)  			temp &= ~MII_M1111_RX_DELAY;  			temp |= MII_M1111_TX_DELAY;  		} -		phy_write(mii_info, MII_M1111_PHY_EXT_CR, temp); +		uec_phy_write(mii_info, MII_M1111_PHY_EXT_CR, temp); -		temp = phy_read(mii_info, MII_M1111_PHY_EXT_SR); +		temp = uec_phy_read(mii_info, MII_M1111_PHY_EXT_SR);  		temp &= ~MII_M1111_HWCFG_MODE_MASK;  		temp |= MII_M1111_HWCFG_MODE_RGMII; -		phy_write(mii_info, MII_M1111_PHY_EXT_SR, temp); +		uec_phy_write(mii_info, MII_M1111_PHY_EXT_SR, temp); -		phy_write(mii_info, MII_BMCR, BMCR_RESET); +		uec_phy_write(mii_info, MII_BMCR, BMCR_RESET);  	}  	return 0; @@ -534,7 +534,7 @@ static int marvell_read_status (struct uec_mii_info *mii_info)  	if (mii_info->autoneg && mii_info->link) {  		int speed; -		status = phy_read (mii_info, MII_M1011_PHY_SPEC_STATUS); +		status = uec_phy_read(mii_info, MII_M1011_PHY_SPEC_STATUS);  		/* Get the duplexity */  		if (status & MII_M1011_PHY_SPEC_STATUS_FULLDUPLEX) @@ -564,7 +564,7 @@ static int marvell_read_status (struct uec_mii_info *mii_info)  static int marvell_ack_interrupt (struct uec_mii_info *mii_info)  {  	/* Clear the interrupts by reading the reg */ -	phy_read (mii_info, MII_M1011_IEVENT); +	uec_phy_read(mii_info, MII_M1011_IEVENT);  	return 0;  } @@ -572,9 +572,10 @@ static int marvell_ack_interrupt (struct uec_mii_info *mii_info)  static int marvell_config_intr (struct uec_mii_info *mii_info)  {  	if (mii_info->interrupts == MII_INTERRUPT_ENABLED) -		phy_write (mii_info, MII_M1011_IMASK, MII_M1011_IMASK_INIT); +		uec_phy_write(mii_info, MII_M1011_IMASK, MII_M1011_IMASK_INIT);  	else -		phy_write (mii_info, MII_M1011_IMASK, MII_M1011_IMASK_CLEAR); +		uec_phy_write(mii_info, MII_M1011_IMASK, +				MII_M1011_IMASK_CLEAR);  	return 0;  } @@ -582,13 +583,13 @@ static int marvell_config_intr (struct uec_mii_info *mii_info)  static int dm9161_init (struct uec_mii_info *mii_info)  {  	/* Reset the PHY */ -	phy_write (mii_info, MII_BMCR, phy_read (mii_info, MII_BMCR) | +	uec_phy_write(mii_info, MII_BMCR, uec_phy_read(mii_info, MII_BMCR) |  		   BMCR_RESET);  	/* PHY and MAC connect */ -	phy_write (mii_info, MII_BMCR, phy_read (mii_info, MII_BMCR) & +	uec_phy_write(mii_info, MII_BMCR, uec_phy_read(mii_info, MII_BMCR) &  		   ~BMCR_ISOLATE); -	phy_write (mii_info, MII_DM9161_SCR, MII_DM9161_SCR_INIT); +	uec_phy_write(mii_info, MII_DM9161_SCR, MII_DM9161_SCR_INIT);  	config_genmii_advert (mii_info);  	/* Start/restart aneg */ @@ -614,7 +615,7 @@ static int dm9161_read_status (struct uec_mii_info *mii_info)  	/* If the link is up, read the speed and duplex  	   If we aren't autonegotiating assume speeds are as set */  	if (mii_info->autoneg && mii_info->link) { -		status = phy_read (mii_info, MII_DM9161_SCSR); +		status = uec_phy_read(mii_info, MII_DM9161_SCSR);  		if (status & (MII_DM9161_SCSR_100F | MII_DM9161_SCSR_100H))  			mii_info->speed = SPEED_100;  		else @@ -632,7 +633,7 @@ static int dm9161_read_status (struct uec_mii_info *mii_info)  static int dm9161_ack_interrupt (struct uec_mii_info *mii_info)  {  	/* Clear the interrupt by reading the reg */ -	phy_read (mii_info, MII_DM9161_INTR); +	uec_phy_read(mii_info, MII_DM9161_INTR);  	return 0;  } @@ -640,9 +641,9 @@ static int dm9161_ack_interrupt (struct uec_mii_info *mii_info)  static int dm9161_config_intr (struct uec_mii_info *mii_info)  {  	if (mii_info->interrupts == MII_INTERRUPT_ENABLED) -		phy_write (mii_info, MII_DM9161_INTR, MII_DM9161_INTR_INIT); +		uec_phy_write(mii_info, MII_DM9161_INTR, MII_DM9161_INTR_INIT);  	else -		phy_write (mii_info, MII_DM9161_INTR, MII_DM9161_INTR_STOP); +		uec_phy_write(mii_info, MII_DM9161_INTR, MII_DM9161_INTR_STOP);  	return 0;  } @@ -696,7 +697,7 @@ static int smsc_read_status (struct uec_mii_info *mii_info)  	if (mii_info->autoneg && mii_info->link) {  		int	val; -		status = phy_read (mii_info, 0x1f); +		status = uec_phy_read(mii_info, 0x1f);  		val = (status & 0x1c) >> 2;  		switch (val) { @@ -751,7 +752,7 @@ static struct phy_info phy_info_marvell = {  	.phy_id_mask = 0xffffff00,  	.name = "Marvell 88E11x1",  	.features = MII_GBIT_FEATURES, -	.init = &marvell_init, +	.init = &uec_marvell_init,  	.config_aneg = &marvell_config_aneg,  	.read_status = &marvell_read_status,  	.ack_interrupt = &marvell_ack_interrupt, @@ -804,12 +805,12 @@ static struct phy_info *phy_info[] = {  	NULL  }; -u16 phy_read (struct uec_mii_info *mii_info, u16 regnum) +u16 uec_phy_read(struct uec_mii_info *mii_info, u16 regnum)  {  	return mii_info->mdio_read (mii_info->dev, mii_info->mii_id, regnum);  } -void phy_write (struct uec_mii_info *mii_info, u16 regnum, u16 val) +void uec_phy_write(struct uec_mii_info *mii_info, u16 regnum, u16 val)  {  	mii_info->mdio_write (mii_info->dev, mii_info->mii_id, regnum, val);  } @@ -825,11 +826,11 @@ struct phy_info *uec_get_phy_info (struct uec_mii_info *mii_info)  	struct phy_info *theInfo = NULL;  	/* Grab the bits from PHYIR1, and put them in the upper half */ -	phy_reg = phy_read (mii_info, MII_PHYSID1); +	phy_reg = uec_phy_read(mii_info, MII_PHYSID1);  	phy_ID = (phy_reg & 0xffff) << 16;  	/* Grab the bits from PHYIR2, and put them in the lower half */ -	phy_reg = phy_read (mii_info, MII_PHYSID2); +	phy_reg = uec_phy_read(mii_info, MII_PHYSID2);  	phy_ID |= (phy_reg & 0xffff);  	/* loop through all the known PHY types, and find one that */ @@ -869,39 +870,39 @@ void marvell_phy_interface_mode (struct eth_device *dev,  	if (type == RGMII) {  		if (speed == 100) { -			phy_write (mii_info, 0x00, 0x9140); -			phy_write (mii_info, 0x1d, 0x001f); -			phy_write (mii_info, 0x1e, 0x200c); -			phy_write (mii_info, 0x1d, 0x0005); -			phy_write (mii_info, 0x1e, 0x0000); -			phy_write (mii_info, 0x1e, 0x0100); -			phy_write (mii_info, 0x09, 0x0e00); -			phy_write (mii_info, 0x04, 0x01e1); -			phy_write (mii_info, 0x00, 0x9140); -			phy_write (mii_info, 0x00, 0x1000); +			uec_phy_write(mii_info, 0x00, 0x9140); +			uec_phy_write(mii_info, 0x1d, 0x001f); +			uec_phy_write(mii_info, 0x1e, 0x200c); +			uec_phy_write(mii_info, 0x1d, 0x0005); +			uec_phy_write(mii_info, 0x1e, 0x0000); +			uec_phy_write(mii_info, 0x1e, 0x0100); +			uec_phy_write(mii_info, 0x09, 0x0e00); +			uec_phy_write(mii_info, 0x04, 0x01e1); +			uec_phy_write(mii_info, 0x00, 0x9140); +			uec_phy_write(mii_info, 0x00, 0x1000);  			udelay (100000); -			phy_write (mii_info, 0x00, 0x2900); -			phy_write (mii_info, 0x14, 0x0cd2); -			phy_write (mii_info, 0x00, 0xa100); -			phy_write (mii_info, 0x09, 0x0000); -			phy_write (mii_info, 0x1b, 0x800b); -			phy_write (mii_info, 0x04, 0x05e1); -			phy_write (mii_info, 0x00, 0xa100); -			phy_write (mii_info, 0x00, 0x2100); +			uec_phy_write(mii_info, 0x00, 0x2900); +			uec_phy_write(mii_info, 0x14, 0x0cd2); +			uec_phy_write(mii_info, 0x00, 0xa100); +			uec_phy_write(mii_info, 0x09, 0x0000); +			uec_phy_write(mii_info, 0x1b, 0x800b); +			uec_phy_write(mii_info, 0x04, 0x05e1); +			uec_phy_write(mii_info, 0x00, 0xa100); +			uec_phy_write(mii_info, 0x00, 0x2100);  			udelay (1000000);  		} else if (speed == 10) { -			phy_write (mii_info, 0x14, 0x8e40); -			phy_write (mii_info, 0x1b, 0x800b); -			phy_write (mii_info, 0x14, 0x0c82); -			phy_write (mii_info, 0x00, 0x8100); +			uec_phy_write(mii_info, 0x14, 0x8e40); +			uec_phy_write(mii_info, 0x1b, 0x800b); +			uec_phy_write(mii_info, 0x14, 0x0c82); +			uec_phy_write(mii_info, 0x00, 0x8100);  			udelay (1000000);  		}  	}  	/* handle 88e1111 rev.B2 erratum 5.6 */  	if (mii_info->autoneg) { -		status = phy_read (mii_info, MII_BMCR); -		phy_write (mii_info, MII_BMCR, status | BMCR_ANENABLE); +		status = uec_phy_read(mii_info, MII_BMCR); +		uec_phy_write(mii_info, MII_BMCR, status | BMCR_ANENABLE);  	}  	/* now the B2 will correctly report autoneg completion status */  } |