[U-Boot] [PATCH 1/2] net: phy: Add SGMII support for TI phy

Joe Hershberger joe.hershberger at gmail.com
Tue Apr 26 00:17:56 CEST 2016


On Thu, Mar 31, 2016 at 3:53 AM, Michal Simek <michal.simek at xilinx.com> wrote:
> From: Siva Durga Prasad Paladugu <siva.durga.paladugu at xilinx.com>
>
> Add support of SGMII to TI phy dp838367
> Enable the SGMII and PCS settings in phy
> control, CFG2 and BIST registers
>
> Signed-off-by: Siva Durga Prasad Paladugu <sivadur at xilinx.com>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
>
>  drivers/net/phy/ti.c | 39 ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/phy/ti.c b/drivers/net/phy/ti.c
> index c3912d52f320..937426bc8565 100644
> --- a/drivers/net/phy/ti.c
> +++ b/drivers/net/phy/ti.c
> @@ -12,6 +12,8 @@
>
>  #define MII_DP83867_PHYCTRL    0x10
>  #define MII_DP83867_MICR       0x12
> +#define MII_DP83867_CFG2       0x14
> +#define MII_DP83867_BISCR      0x16
>  #define DP83867_CTRL           0x1f
>
>  /* Extended Registers */
> @@ -43,10 +45,22 @@
>  #define DP83867_PHYCR_FIFO_DEPTH_SHIFT         14
>  #define DP83867_MDI_CROSSOVER          5
>  #define DP83867_MDI_CROSSOVER_AUTO     2
> +#define DP83867_MDI_CROSSOVER_MDIX     2
> +#define DP83867_PHYCTRL_SGMIIEN                        0x0800

It would be good to be using the BIT() macro from
include/linux/bitops.h for this type of single bit setting.

> +#define DP83867_PHYCTRL_RXFIFO_SHIFT   12
> +#define DP83867_PHYCTRL_TXFIFO_SHIFT   14
>
>  /* RGMIIDCTL bits */
>  #define DP83867_RGMII_TX_CLK_DELAY_SHIFT       4
>
> +/* CFG2 bits */
> +#define MII_DP83867_CFG2_SPEEDOPT_10EN         0x0040
> +#define MII_DP83867_CFG2_SGMII_AUTONEGEN       0x0080
> +#define MII_DP83867_CFG2_SPEEDOPT_ENH          0x0100
> +#define MII_DP83867_CFG2_SPEEDOPT_CNT          0x0800
> +#define MII_DP83867_CFG2_SPEEDOPT_INTLOW       0x2000

Same for these.

> +#define MII_DP83867_CFG2_MASK                  0x003F
> +
>  #define MII_MMD_CTRL   0x0d /* MMD Access Control Register */
>  #define MII_MMD_DATA   0x0e /* MMD Access Data Register */
>
> @@ -141,7 +155,7 @@ static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
>
>  static int dp83867_config(struct phy_device *phydev)
>  {
> -       unsigned int val, delay;
> +       unsigned int val, delay, cfg2;
>         int ret;
>
>         /* Restart the PHY.  */
> @@ -155,6 +169,29 @@ static int dp83867_config(struct phy_device *phydev)
>                         (FIFO_DEPTH << DP83867_PHYCR_FIFO_DEPTH_SHIFT));
>                 if (ret)
>                         return ret;
> +       } else {
> +               phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR,
> +                         (BMCR_ANENABLE | BMCR_FULLDPLX | BMCR_SPEED1000));
> +
> +               cfg2 = phy_read(phydev, phydev->addr, MII_DP83867_CFG2);
> +               cfg2 &= MII_DP83867_CFG2_MASK;
> +               cfg2 |= (MII_DP83867_CFG2_SPEEDOPT_10EN |
> +                        MII_DP83867_CFG2_SGMII_AUTONEGEN |
> +                        MII_DP83867_CFG2_SPEEDOPT_ENH |
> +                        MII_DP83867_CFG2_SPEEDOPT_CNT |
> +                        MII_DP83867_CFG2_SPEEDOPT_INTLOW);
> +               phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_CFG2, cfg2);
> +
> +               phy_write_mmd_indirect(phydev, DP83867_RGMIICTL,
> +                                      DP83867_DEVADDR, phydev->addr, 0x0);
> +
> +               phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_PHYCTRL,
> +                         DP83867_PHYCTRL_SGMIIEN |
> +                         (DP83867_MDI_CROSSOVER_MDIX <<
> +                         DP83867_MDI_CROSSOVER) |
> +                         (FIFO_DEPTH << DP83867_PHYCTRL_RXFIFO_SHIFT) |
> +                         (FIFO_DEPTH  << DP83867_PHYCTRL_TXFIFO_SHIFT));
> +               phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_BISCR, 0x0);
>         }
>
>         if ((phydev->interface >= PHY_INTERFACE_MODE_RGMII_ID) &&
> --
> 1.9.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list