[U-Boot] [PATCH 1/1] net: phy/realtek: Add support for RTL8211DN and RTL8211E phy modules

Sharma Bhupesh-B45370 B45370 at freescale.com
Wed Aug 14 22:30:27 CEST 2013


Hi York,

I guess with Andy no longer there as FSL u-boot maintainer, will the patch below
go through you or Joe. If no one has an objection to this patch, can I get a Acked-by and
can we queue it up for upstream.
 
Regards,
Bhupesh

> -----Original Message-----
> From: Sharma Bhupesh-B45370
> Sent: Tuesday, July 23, 2013 2:00 PM
> To: u-boot at lists.denx.de; Fleming Andy-AFLEMING;
> joe.hershberger at gmail.com
> Cc: Sharma Bhupesh-B45370
> Subject: RE: [PATCH 1/1] net: phy/realtek: Add support for RTL8211DN and
> RTL8211E phy modules
> 
> Hi Andy, Joe,
> 
> > This patch adds support for Realtek PHY modules RTL8211DN and RTL8211E
> > (variants: RTL8211E-VB-CG, RTL8211E-VL-CG, RTL8211EG-VB-CG), which can
> > be found on Freescale's T1040RDB boards.
> >
> > To make the driver more generic across 8211 family, a generic name
> > 8211x is added for macros and function names.
> >
> > Signed-off-by: Bhupesh Sharma <bhupesh.sharma at freescale.com>
> 
> Can you please review this patch and let me know if these changes seem
> suitable to you.
> 
> Thanks for your help.
> Regards,
> Bhupesh
> 
> > ---
> >  drivers/net/phy/realtek.c | 77
> > +++++++++++++++++++++++++++++++----------
> > ------
> >  1 file changed, 51 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
> > index
> > b7e2753..b971456 100644
> > --- a/drivers/net/phy/realtek.c
> > +++ b/drivers/net/phy/realtek.c
> > @@ -26,18 +26,18 @@
> >
> >  #define PHY_AUTONEGOTIATE_TIMEOUT 5000
> >
> > -/* RTL8211B PHY Status Register */
> > -#define MIIM_RTL8211B_PHY_STATUS       0x11
> > -#define MIIM_RTL8211B_PHYSTAT_SPEED    0xc000
> > -#define MIIM_RTL8211B_PHYSTAT_GBIT     0x8000
> > -#define MIIM_RTL8211B_PHYSTAT_100      0x4000
> > -#define MIIM_RTL8211B_PHYSTAT_DUPLEX   0x2000
> > -#define MIIM_RTL8211B_PHYSTAT_SPDDONE  0x0800
> > -#define MIIM_RTL8211B_PHYSTAT_LINK     0x0400
> > -
> > -
> > -/* RealTek RTL8211B */
> > -static int rtl8211b_config(struct phy_device *phydev)
> > +/* RTL8211x PHY Status Register */
> > +#define MIIM_RTL8211x_PHY_STATUS       0x11
> > +#define MIIM_RTL8211x_PHYSTAT_SPEED    0xc000
> > +#define MIIM_RTL8211x_PHYSTAT_GBIT     0x8000
> > +#define MIIM_RTL8211x_PHYSTAT_100      0x4000
> > +#define MIIM_RTL8211x_PHYSTAT_DUPLEX   0x2000
> > +#define MIIM_RTL8211x_PHYSTAT_SPDDONE  0x0800
> > +#define MIIM_RTL8211x_PHYSTAT_LINK     0x0400
> > +
> > +
> > +/* RealTek RTL8211x */
> > +static int rtl8211x_config(struct phy_device *phydev)
> >  {
> >  	phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
> >
> > @@ -46,20 +46,20 @@ static int rtl8211b_config(struct phy_device
> *phydev)
> >  	return 0;
> >  }
> >
> > -static int rtl8211b_parse_status(struct phy_device *phydev)
> > +static int rtl8211x_parse_status(struct phy_device *phydev)
> >  {
> >  	unsigned int speed;
> >  	unsigned int mii_reg;
> >
> > -	mii_reg = phy_read(phydev, MDIO_DEVAD_NONE,
> > MIIM_RTL8211B_PHY_STATUS);
> > +	mii_reg = phy_read(phydev, MDIO_DEVAD_NONE,
> > MIIM_RTL8211x_PHY_STATUS);
> >
> > -	if (!(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
> > +	if (!(mii_reg & MIIM_RTL8211x_PHYSTAT_SPDDONE)) {
> >  		int i = 0;
> >
> >  		/* in case of timeout ->link is cleared */
> >  		phydev->link = 1;
> >  		puts("Waiting for PHY realtime link");
> > -		while (!(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
> > +		while (!(mii_reg & MIIM_RTL8211x_PHYSTAT_SPDDONE)) {
> >  			/* Timeout reached ? */
> >  			if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
> >  				puts(" TIMEOUT !\n");
> > @@ -71,29 +71,29 @@ static int rtl8211b_parse_status(struct phy_device
> > *phydev)
> >  				putc('.');
> >  			udelay(1000);	/* 1 ms */
> >  			mii_reg = phy_read(phydev, MDIO_DEVAD_NONE,
> > -					MIIM_RTL8211B_PHY_STATUS);
> > +					MIIM_RTL8211x_PHY_STATUS);
> >  		}
> >  		puts(" done\n");
> >  		udelay(500000);	/* another 500 ms (results in faster
> > booting) */
> >  	} else {
> > -		if (mii_reg & MIIM_RTL8211B_PHYSTAT_LINK)
> > +		if (mii_reg & MIIM_RTL8211x_PHYSTAT_LINK)
> >  			phydev->link = 1;
> >  		else
> >  			phydev->link = 0;
> >  	}
> >
> > -	if (mii_reg & MIIM_RTL8211B_PHYSTAT_DUPLEX)
> > +	if (mii_reg & MIIM_RTL8211x_PHYSTAT_DUPLEX)
> >  		phydev->duplex = DUPLEX_FULL;
> >  	else
> >  		phydev->duplex = DUPLEX_HALF;
> >
> > -	speed = (mii_reg & MIIM_RTL8211B_PHYSTAT_SPEED);
> > +	speed = (mii_reg & MIIM_RTL8211x_PHYSTAT_SPEED);
> >
> >  	switch (speed) {
> > -	case MIIM_RTL8211B_PHYSTAT_GBIT:
> > +	case MIIM_RTL8211x_PHYSTAT_GBIT:
> >  		phydev->speed = SPEED_1000;
> >  		break;
> > -	case MIIM_RTL8211B_PHYSTAT_100:
> > +	case MIIM_RTL8211x_PHYSTAT_100:
> >  		phydev->speed = SPEED_100;
> >  		break;
> >  	default:
> > @@ -103,28 +103,53 @@ static int rtl8211b_parse_status(struct
> > phy_device
> > *phydev)
> >  	return 0;
> >  }
> >
> > -static int rtl8211b_startup(struct phy_device *phydev)
> > +static int rtl8211x_startup(struct phy_device *phydev)
> >  {
> >  	/* Read the Status (2x to make sure link is right) */
> >  	genphy_update_link(phydev);
> > -	rtl8211b_parse_status(phydev);
> > +	rtl8211x_parse_status(phydev);
> >
> >  	return 0;
> >  }
> >
> > +/* Support for RTL8211B PHY */
> >  static struct phy_driver RTL8211B_driver = {
> >  	.name = "RealTek RTL8211B",
> >  	.uid = 0x1cc910,
> >  	.mask = 0xfffff0,
> >  	.features = PHY_GBIT_FEATURES,
> > -	.config = &rtl8211b_config,
> > -	.startup = &rtl8211b_startup,
> > +	.config = &rtl8211x_config,
> > +	.startup = &rtl8211x_startup,
> > +	.shutdown = &genphy_shutdown,
> > +};
> > +
> > +/* Support for RTL8211E-VB-CG, RTL8211E-VL-CG and RTL8211EG-VB-CG
> > +PHYs */ static struct phy_driver RTL8211E_driver = {
> > +	.name = "RealTek RTL8211E",
> > +	.uid = 0x1cc915,
> > +	.mask = 0xfffff0,
> > +	.features = PHY_GBIT_FEATURES,
> > +	.config = &rtl8211x_config,
> > +	.startup = &rtl8211x_startup,
> > +	.shutdown = &genphy_shutdown,
> > +};
> > +
> > +/* Support for RTL8211DN PHY */
> > +static struct phy_driver RTL8211DN_driver = {
> > +	.name = "RealTek RTL8211DN",
> > +	.uid = 0x1cc914,
> > +	.mask = 0xfffff0,
> > +	.features = PHY_GBIT_FEATURES,
> > +	.config = &rtl8211x_config,
> > +	.startup = &rtl8211x_startup,
> >  	.shutdown = &genphy_shutdown,
> >  };
> >
> >  int phy_realtek_init(void)
> >  {
> >  	phy_register(&RTL8211B_driver);
> > +	phy_register(&RTL8211E_driver);
> > +	phy_register(&RTL8211DN_driver);
> >
> >  	return 0;
> >  }
> > --
> > 1.7.11.7
> >




More information about the U-Boot mailing list