On 6/30/20 5:29 PM, Russell King wrote:
> Simplify the ksettings_set() implementation to look more like phylib's
> implementation; use a switch() for validating the autoneg setting, and
> use the linkmode_modify() helper to set the autoneg bit in the
> advertisement mask.
> 
> Signed-off-by: Russell King <rmk+ker...@armlinux.org.uk>

Reviewed-by: Ioana Ciornei <ioana.cior...@nxp.com>

> ---
>   drivers/net/phy/phylink.c | 25 ++++++++++++-------------
>   1 file changed, 12 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> index 424a927d7889..103d2a550415 100644
> --- a/drivers/net/phy/phylink.c
> +++ b/drivers/net/phy/phylink.c
> @@ -1314,25 +1314,24 @@ int phylink_ethtool_ksettings_set(struct phylink *pl,
>       __ETHTOOL_DECLARE_LINK_MODE_MASK(support);
>       struct ethtool_link_ksettings our_kset;
>       struct phylink_link_state config;
> +     const struct phy_setting *s;
>       int ret;
>   
>       ASSERT_RTNL();
>   
> -     if (kset->base.autoneg != AUTONEG_DISABLE &&
> -         kset->base.autoneg != AUTONEG_ENABLE)
> -             return -EINVAL;
> -
>       linkmode_copy(support, pl->supported);
>       config = pl->link_config;
> +     config.an_enabled = kset->base.autoneg == AUTONEG_ENABLE;
>   
> -     /* Mask out unsupported advertisements */
> +     /* Mask out unsupported advertisements, and force the autoneg bit */
>       linkmode_and(config.advertising, kset->link_modes.advertising,
>                    support);
> +     linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, config.advertising,
> +                      config.an_enabled);
>   
>       /* FIXME: should we reject autoneg if phy/mac does not support it? */
> -     if (kset->base.autoneg == AUTONEG_DISABLE) {
> -             const struct phy_setting *s;
> -
> +     switch (kset->base.autoneg) {
> +     case AUTONEG_DISABLE:
>               /* Autonegotiation disabled, select a suitable speed and
>                * duplex.
>                */
> @@ -1351,19 +1350,19 @@ int phylink_ethtool_ksettings_set(struct phylink *pl,
>   
>               config.speed = s->speed;
>               config.duplex = s->duplex;
> -             config.an_enabled = false;
> +             break;
>   
> -             __clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, config.advertising);
> -     } else {
> +     case AUTONEG_ENABLE:
>               /* If we have a fixed link, refuse to enable autonegotiation */
>               if (pl->cur_link_an_mode == MLO_AN_FIXED)
>                       return -EINVAL;
>   
>               config.speed = SPEED_UNKNOWN;
>               config.duplex = DUPLEX_UNKNOWN;
> -             config.an_enabled = true;
> +             break;
>   
> -             __set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, config.advertising);
> +     default:
> +             return -EINVAL;
>       }
>   
>       if (pl->phydev) {
> 

Reply via email to