Message ID | 1263456799-3306-4-git-send-email-yu.liu@freescale.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Jan 14, 2010, at 2:13 AM, Liu Yu wrote: > Signed-off-by: Liu Yu <yu.liu@freescale.com> > --- > drivers/net/phy/marvell.c | 38 ++++++++++++++++++++++++++++++++++++++ > 1 files changed, 38 insertions(+), 0 deletions(-) > > diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c > index 6f69b9b..65ed385 100644 > --- a/drivers/net/phy/marvell.c > +++ b/drivers/net/phy/marvell.c > @@ -63,6 +63,7 @@ > #define MII_M1111_HWCFG_MODE_COPPER_RGMII 0xb > #define MII_M1111_HWCFG_MODE_FIBER_RGMII 0x3 > #define MII_M1111_HWCFG_MODE_SGMII_NO_CLK 0x4 > +#define MII_M1111_HWCFG_MODE_COPPER_RTBI 0x9 > #define MII_M1111_HWCFG_FIBER_COPPER_AUTO 0x8000 > #define MII_M1111_HWCFG_FIBER_COPPER_RES 0x2000 > > @@ -269,6 +270,43 @@ static int m88e1111_config_init(struct phy_device *phydev) > return err; > } > > + if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { > + temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); > + if (temp < 0) > + return temp; > + temp |= (MII_M1111_RX_DELAY | MII_M1111_TX_DELAY); > + err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); > + if (err < 0) > + return err; > + > + temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); > + if (temp < 0) > + return temp; > + temp &= ~(MII_M1111_HWCFG_MODE_MASK | MII_M1111_HWCFG_FIBER_COPPER_RES); > + temp |= 0x7 | MII_M1111_HWCFG_FIBER_COPPER_AUTO; Does this magic 0x7 have some meaning? > + err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); > + if (err < 0) > + return err; > + > + /* soft reset */ > + err = phy_write(phydev, MII_BMCR, BMCR_RESET); > + if (err < 0) > + return err; > + do > + temp = phy_read(phydev, MII_BMCR); > + while (temp & BMCR_RESET); > + > + temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); > + if (temp < 0) > + return temp; > + temp &= ~(MII_M1111_HWCFG_MODE_MASK | MII_M1111_HWCFG_FIBER_COPPER_RES); > + temp |= MII_M1111_HWCFG_MODE_COPPER_RTBI | MII_M1111_HWCFG_FIBER_COPPER_AUTO; > + err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); > + if (err < 0) > + return err; > + } > + > + > err = phy_write(phydev, MII_BMCR, BMCR_RESET); > if (err < 0) > return err; > -- > 1.6.4 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Kumar Gala [mailto:galak@kernel.crashing.org] > Sent: Friday, January 15, 2010 12:20 AM > To: Liu Yu-B13201 > Cc: davem@davemloft.net; linuxppc-dev@lists.ozlabs.org; > netdev@vger.kernel.org > Subject: Re: [PATCH 4/4] phy: add RTBI mode for m88e1111 > > > On Jan 14, 2010, at 2:13 AM, Liu Yu wrote: > > > Signed-off-by: Liu Yu <yu.liu@freescale.com> > > --- > > drivers/net/phy/marvell.c | 38 > ++++++++++++++++++++++++++++++++++++++ > > 1 files changed, 38 insertions(+), 0 deletions(-) > > > > diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c > > index 6f69b9b..65ed385 100644 > > --- a/drivers/net/phy/marvell.c > > +++ b/drivers/net/phy/marvell.c > > @@ -63,6 +63,7 @@ > > #define MII_M1111_HWCFG_MODE_COPPER_RGMII 0xb > > #define MII_M1111_HWCFG_MODE_FIBER_RGMII 0x3 > > #define MII_M1111_HWCFG_MODE_SGMII_NO_CLK 0x4 > > +#define MII_M1111_HWCFG_MODE_COPPER_RTBI 0x9 > > #define MII_M1111_HWCFG_FIBER_COPPER_AUTO 0x8000 > > #define MII_M1111_HWCFG_FIBER_COPPER_RES 0x2000 > > > > @@ -269,6 +270,43 @@ static int m88e1111_config_init(struct > phy_device *phydev) > > return err; > > } > > > > + if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { > > + temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); > > + if (temp < 0) > > + return temp; > > + temp |= (MII_M1111_RX_DELAY | MII_M1111_TX_DELAY); > > + err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); > > + if (err < 0) > > + return err; > > + > > + temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); > > + if (temp < 0) > > + return temp; > > + temp &= ~(MII_M1111_HWCFG_MODE_MASK | > MII_M1111_HWCFG_FIBER_COPPER_RES); > > + temp |= 0x7 | MII_M1111_HWCFG_FIBER_COPPER_AUTO; > > Does this magic 0x7 have some meaning? > Hrr... it's GMII to fibre mode. Document 88E1111_erata_RevB2 chapter 4.35 describ the reason. Without this sometimes phys couldnot work. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: "Liu Yu-B13201" <B13201@freescale.com> Date: Fri, 15 Jan 2010 10:49:37 +0800 >> -----Original Message----- >> From: Kumar Gala [mailto:galak@kernel.crashing.org] >> Sent: Friday, January 15, 2010 12:20 AM >> To: Liu Yu-B13201 >> Cc: davem@davemloft.net; linuxppc-dev@lists.ozlabs.org; >> netdev@vger.kernel.org >> Subject: Re: [PATCH 4/4] phy: add RTBI mode for m88e1111 >> >> >> Does this magic 0x7 have some meaning? >> > > Hrr... it's GMII to fibre mode. > Document 88E1111_erata_RevB2 chapter 4.35 describ the reason. > Without this sometimes phys couldnot work. Just FYI, I've applied all of these patches to net-next-2.6 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 6f69b9b..65ed385 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -63,6 +63,7 @@ #define MII_M1111_HWCFG_MODE_COPPER_RGMII 0xb #define MII_M1111_HWCFG_MODE_FIBER_RGMII 0x3 #define MII_M1111_HWCFG_MODE_SGMII_NO_CLK 0x4 +#define MII_M1111_HWCFG_MODE_COPPER_RTBI 0x9 #define MII_M1111_HWCFG_FIBER_COPPER_AUTO 0x8000 #define MII_M1111_HWCFG_FIBER_COPPER_RES 0x2000 @@ -269,6 +270,43 @@ static int m88e1111_config_init(struct phy_device *phydev) return err; } + if (phydev->interface == PHY_INTERFACE_MODE_RTBI) { + temp = phy_read(phydev, MII_M1111_PHY_EXT_CR); + if (temp < 0) + return temp; + temp |= (MII_M1111_RX_DELAY | MII_M1111_TX_DELAY); + err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp); + if (err < 0) + return err; + + temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); + if (temp < 0) + return temp; + temp &= ~(MII_M1111_HWCFG_MODE_MASK | MII_M1111_HWCFG_FIBER_COPPER_RES); + temp |= 0x7 | MII_M1111_HWCFG_FIBER_COPPER_AUTO; + err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); + if (err < 0) + return err; + + /* soft reset */ + err = phy_write(phydev, MII_BMCR, BMCR_RESET); + if (err < 0) + return err; + do + temp = phy_read(phydev, MII_BMCR); + while (temp & BMCR_RESET); + + temp = phy_read(phydev, MII_M1111_PHY_EXT_SR); + if (temp < 0) + return temp; + temp &= ~(MII_M1111_HWCFG_MODE_MASK | MII_M1111_HWCFG_FIBER_COPPER_RES); + temp |= MII_M1111_HWCFG_MODE_COPPER_RTBI | MII_M1111_HWCFG_FIBER_COPPER_AUTO; + err = phy_write(phydev, MII_M1111_PHY_EXT_SR, temp); + if (err < 0) + return err; + } + + err = phy_write(phydev, MII_BMCR, BMCR_RESET); if (err < 0) return err;
Signed-off-by: Liu Yu <yu.liu@freescale.com> --- drivers/net/phy/marvell.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 38 insertions(+), 0 deletions(-)