> @@ -2078,6 +2089,11 @@ EXPORT_SYMBOL(phy_set_sym_pause);
>  void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx)
>  {
>       __ETHTOOL_DECLARE_LINK_MODE_MASK(oldadv);
> +     bool asym_pause_supported;
> +
> +     asym_pause_supported =
> +             linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
> +                               phydev->supported);
>  
>       linkmode_copy(oldadv, phydev->advertising);
>  
> @@ -2086,14 +2102,14 @@ void phy_set_asym_pause(struct phy_device *phydev, 
> bool rx, bool tx)
>       linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
>                          phydev->advertising);
>  
> -     if (rx) {
> +     if (rx && asym_pause_supported) {
>               linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
>                                phydev->advertising);
>               linkmode_set_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
>                                phydev->advertising);
>       }
>  
> -     if (tx)
> +     if (tx && asym_pause_supported)
>               linkmode_change_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
>                                   phydev->advertising);

Hi Heiner

If the PHY only supports Pause, not Asym Pause, i wounder if we should
fall back to Pause here?

     Andrew

Reply via email to