>       switch (state->interface) {
> +     case PHY_INTERFACE_MODE_NA:

I would not list PHY_INTERFACE_MODE_NA here.

> +     case PHY_INTERFACE_MODE_USXGMII:
> +     case PHY_INTERFACE_MODE_10GKR:
> +             if (bp->caps & MACB_CAPS_GIGABIT_MODE_AVAILABLE) {
> +                     phylink_set(mask, 10000baseCR_Full);
> +                     phylink_set(mask, 10000baseER_Full);
> +                     phylink_set(mask, 10000baseKR_Full);
> +                     phylink_set(mask, 10000baseLR_Full);
> +                     phylink_set(mask, 10000baseLRM_Full);
> +                     phylink_set(mask, 10000baseSR_Full);
> +                     phylink_set(mask, 10000baseT_Full);
> +                     phylink_set(mask, 5000baseT_Full);
> +                     phylink_set(mask, 2500baseX_Full);
> +                     phylink_set(mask, 1000baseX_Full);
> +             }
> +             /* Fall-through */
>       case PHY_INTERFACE_MODE_SGMII:
>               if (bp->caps & MACB_CAPS_GIGABIT_MODE_AVAILABLE)
>                       phylink_set(mask, 2500baseT_Full);
> @@ -594,17 +639,55 @@ static void gem_mac_config(struct phylink_config 
> *pl_config, unsigned int mode,
>                       reg |= MACB_BIT(FD);
>               macb_or_gem_writel(bp, NCFGR, reg);
>  
> -             if (state->speed == SPEED_2500) {
> -                     gem_writel(bp, NCFGR, GEM_BIT(GBE) |
> -                                gem_readl(bp, NCFGR));
> -                     gem_writel(bp, NCR, GEM_BIT(TWO_PT_FIVE_GIG) |
> -                                gem_readl(bp, NCR));
> -             } else if (state->speed == SPEED_1000) {
> -                     gem_writel(bp, NCFGR, GEM_BIT(GBE) |
> -                                gem_readl(bp, NCFGR));
> -             } else if (state->speed == SPEED_100) {
> -                     macb_writel(bp, NCFGR, MACB_BIT(SPD) |
> -                                 macb_readl(bp, NCFGR));
> +             if (bp->phy_interface == PHY_INTERFACE_MODE_USXGMII) {
> +                     u32 speed;
> +
> +                     switch (state->speed) {
> +                     case SPEED_10000:
> +                             if (bp->serdes_rate ==
> +                                 MACB_SERDES_RATE_10_PT_3125Gbps) {
> +                                     speed = HS_MAC_SPEED_10000M;
> +                             } else {
> +                                     netdev_warn(netdev,
> +                                                 "10G not supported by HW");
> +                                     netdev_warn(netdev, "Setting speed to 
> 1G");
> +                                     speed = HS_MAC_SPEED_1000M;
> +                             }
> +                             break;
> +                     case SPEED_5000:
> +                             speed = HS_MAC_SPEED_5000M;
> +                             break;
> +                     case SPEED_2500:
> +                             speed = HS_MAC_SPEED_2500M;
> +                             break;
> +                     case SPEED_1000:
> +                             speed = HS_MAC_SPEED_1000M;
> +                             break;
> +                     default:
> +                     case SPEED_100:
> +                             speed = HS_MAC_SPEED_100M;
> +                             break;
> +                     }
> +
> +                     gem_writel(bp, HS_MAC_CONFIG,
> +                                GEM_BFINS(HS_MAC_SPEED, speed,
> +                                          gem_readl(bp, HS_MAC_CONFIG)));
> +                     gem_writel(bp, USX_CONTROL,
> +                                GEM_BFINS(USX_CTRL_SPEED, speed,
> +                                          gem_readl(bp, USX_CONTROL)));
> +             } else {
> +                     if (state->speed == SPEED_2500) {
> +                             gem_writel(bp, NCFGR, GEM_BIT(GBE) |
> +                                        gem_readl(bp, NCFGR));
> +                             gem_writel(bp, NCR, GEM_BIT(TWO_PT_FIVE_GIG) |
> +                                        gem_readl(bp, NCR));
> +                     } else if (state->speed == SPEED_1000) {
> +                             gem_writel(bp, NCFGR, GEM_BIT(GBE) |
> +                                        gem_readl(bp, NCFGR));
> +                     } else if (state->speed == SPEED_100) {
> +                             macb_writel(bp, NCFGR, MACB_BIT(SPD) |
> +                                         macb_readl(bp, NCFGR));
> +                     }

Maybe split this up into two helper functions?

      Andrew

Reply via email to