On Friday 12 January 2018 01:21 PM, Antoine Tenart wrote:
> This patch allow the CP100 comphy to configure some lanes in the
> 2.5G SGMII mode. This mode is quite close to SGMII and uses nearly the
> same code path.
> 
> Signed-off-by: Antoine Tenart <antoine.ten...@free-electrons.com>

Acked-by: Kishon Vijay Abraham I <kis...@ti.com>
> ---
>  drivers/phy/marvell/phy-mvebu-cp110-comphy.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/phy/marvell/phy-mvebu-cp110-comphy.c 
> b/drivers/phy/marvell/phy-mvebu-cp110-comphy.c
> index a0d522154cdf..4ef429250d7b 100644
> --- a/drivers/phy/marvell/phy-mvebu-cp110-comphy.c
> +++ b/drivers/phy/marvell/phy-mvebu-cp110-comphy.c
> @@ -135,19 +135,25 @@ struct mvebu_comhy_conf {
>  static const struct mvebu_comhy_conf mvebu_comphy_cp110_modes[] = {
>       /* lane 0 */
>       MVEBU_COMPHY_CONF(0, 1, PHY_MODE_SGMII, 0x1),
> +     MVEBU_COMPHY_CONF(0, 1, PHY_MODE_2500SGMII, 0x1),
>       /* lane 1 */
>       MVEBU_COMPHY_CONF(1, 2, PHY_MODE_SGMII, 0x1),
> +     MVEBU_COMPHY_CONF(1, 2, PHY_MODE_2500SGMII, 0x1),
>       /* lane 2 */
>       MVEBU_COMPHY_CONF(2, 0, PHY_MODE_SGMII, 0x1),
> +     MVEBU_COMPHY_CONF(2, 0, PHY_MODE_2500SGMII, 0x1),
>       MVEBU_COMPHY_CONF(2, 0, PHY_MODE_10GKR, 0x1),
>       /* lane 3 */
>       MVEBU_COMPHY_CONF(3, 1, PHY_MODE_SGMII, 0x2),
> +     MVEBU_COMPHY_CONF(3, 1, PHY_MODE_2500SGMII, 0x2),
>       /* lane 4 */
>       MVEBU_COMPHY_CONF(4, 0, PHY_MODE_SGMII, 0x2),
> +     MVEBU_COMPHY_CONF(4, 0, PHY_MODE_2500SGMII, 0x2),
>       MVEBU_COMPHY_CONF(4, 0, PHY_MODE_10GKR, 0x2),
>       MVEBU_COMPHY_CONF(4, 1, PHY_MODE_SGMII, 0x1),
>       /* lane 5 */
>       MVEBU_COMPHY_CONF(5, 2, PHY_MODE_SGMII, 0x1),
> +     MVEBU_COMPHY_CONF(5, 2, PHY_MODE_2500SGMII, 0x1),
>  };
>  
>  struct mvebu_comphy_priv {
> @@ -206,6 +212,10 @@ static void mvebu_comphy_ethernet_init_reset(struct 
> mvebu_comphy_lane *lane,
>       if (mode == PHY_MODE_10GKR)
>               val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0xe) |
>                      MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0xe);
> +     else if (mode == PHY_MODE_2500SGMII)
> +             val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0x8) |
> +                    MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0x8) |
> +                    MVEBU_COMPHY_SERDES_CFG0_HALF_BUS;
>       else if (mode == PHY_MODE_SGMII)
>               val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0x6) |
>                      MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0x6) |
> @@ -296,13 +306,13 @@ static int mvebu_comphy_init_plls(struct 
> mvebu_comphy_lane *lane,
>       return 0;
>  }
>  
> -static int mvebu_comphy_set_mode_sgmii(struct phy *phy)
> +static int mvebu_comphy_set_mode_sgmii(struct phy *phy, enum phy_mode mode)
>  {
>       struct mvebu_comphy_lane *lane = phy_get_drvdata(phy);
>       struct mvebu_comphy_priv *priv = lane->priv;
>       u32 val;
>  
> -     mvebu_comphy_ethernet_init_reset(lane, PHY_MODE_SGMII);
> +     mvebu_comphy_ethernet_init_reset(lane, mode);
>  
>       val = readl(priv->base + MVEBU_COMPHY_RX_CTRL1(lane->id));
>       val &= ~MVEBU_COMPHY_RX_CTRL1_CLK8T_EN;
> @@ -487,7 +497,8 @@ static int mvebu_comphy_power_on(struct phy *phy)
>  
>       switch (lane->mode) {
>       case PHY_MODE_SGMII:
> -             ret = mvebu_comphy_set_mode_sgmii(phy);
> +     case PHY_MODE_2500SGMII:
> +             ret = mvebu_comphy_set_mode_sgmii(phy, lane->mode);
>               break;
>       case PHY_MODE_10GKR:
>               ret = mvebu_comphy_set_mode_10gkr(phy);
> 

Reply via email to