On Jan 14, 2010, at 2:13 AM, Liu Yu wrote:

> Signed-off-by: Liu Yu <yu....@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

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to