From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joe Hershberger Date: Thu, 23 Apr 2015 09:42:09 -0500 Subject: [U-Boot] [PATCH] net/phy: refactor RTL8211F initialization In-Reply-To: <1429698120-17882-1-git-send-email-Shengzhou.Liu@freescale.com> References: <1429698120-17882-1-git-send-email-Shengzhou.Liu@freescale.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Shengzhou Liu, On Wed, Apr 22, 2015 at 5:22 AM, Shengzhou Liu wrote: > RTL8211F needs to enalbe TXDLY for RGMII during > phy initialization, so move it to rtl8211f_config > for early initialization. > > Signed-off-by: Shengzhou Liu > cc: Joe Hershberger > --- > drivers/net/phy/realtek.c | 25 +++++++++++++++++-------- > 1 file changed, 17 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c > index 3917c82..d48095b 100644 > --- a/drivers/net/phy/realtek.c > +++ b/drivers/net/phy/realtek.c > @@ -43,6 +43,22 @@ static int rtl8211x_config(struct phy_device *phydev) > return 0; > } > > +static int rtl8211f_config(struct phy_device *phydev) > +{ > + phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET); Do you not need to disable the phy interrupt here? > + > + if (phydev->interface == PHY_INTERFACE_MODE_RGMII) { > + /* enable TXDLY */ > + phy_write(phydev, MDIO_DEVAD_NONE, > + MIIM_RTL8211F_PAGE_SELECT, 0xd08); Why do you not need to change the page back to default? Does it only apply to one following command or something? I haven't read the data sheet for this phy to understand its behavior, but want to make sure it's clear here. Please at least add a comment describing why the page need not be changed back. > + phy_write(phydev, MDIO_DEVAD_NONE, 0x11, 0x109); Is this TX delay board specific? Seems like it would be. Should it be parameterized to come from a board CONFIG_? If not, at least add a comment describing these magic numbers. > + } > + > + genphy_config_aneg(phydev); > + > + return 0; > +} > + > static int rtl8211x_parse_status(struct phy_device *phydev) > { > unsigned int speed; > @@ -142,13 +158,6 @@ static int rtl8211f_parse_status(struct phy_device *phydev) > phydev->speed = SPEED_10; > } > > - if (phydev->interface == PHY_INTERFACE_MODE_RGMII) { > - /* enable TXDLY */ > - phy_write(phydev, MDIO_DEVAD_NONE, > - MIIM_RTL8211F_PAGE_SELECT, 0xd08); > - phy_write(phydev, MDIO_DEVAD_NONE, 0x11, 0x109); > - } > - > return 0; > } > > @@ -209,7 +218,7 @@ static struct phy_driver RTL8211F_driver = { > .uid = 0x1cc916, > .mask = 0xffffff, > .features = PHY_GBIT_FEATURES, > - .config = &rtl8211x_config, > + .config = &rtl8211f_config, > .startup = &rtl8211f_startup, > .shutdown = &genphy_shutdown, > }; > -- > 2.1.0.27.g96db324 >