sfc: Fix reading non-legacy supported link modes
authorErik Ekman <erik@kryo.se>
Sun, 17 Oct 2021 17:16:57 +0000 (19:16 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 18 Oct 2021 13:28:02 +0000 (14:28 +0100)
Everything except the first 32 bits was lost when the pause flags were
added. This makes the 50000baseCR2 mode flag (bit 34) not appear.

I have tested this with a 10G card (SFN5122F-R7) by modifying it to
return a non-legacy link mode (10000baseCR).

Signed-off-by: Erik Ekman <erik@kryo.se>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ethtool_common.c

index bf14435..bd552c7 100644 (file)
@@ -563,20 +563,14 @@ int efx_ethtool_get_link_ksettings(struct net_device *net_dev,
 {
        struct efx_nic *efx = netdev_priv(net_dev);
        struct efx_link_state *link_state = &efx->link_state;
-       u32 supported;
 
        mutex_lock(&efx->mac_lock);
        efx_mcdi_phy_get_link_ksettings(efx, cmd);
        mutex_unlock(&efx->mac_lock);
 
        /* Both MACs support pause frames (bidirectional and respond-only) */
-       ethtool_convert_link_mode_to_legacy_u32(&supported,
-                                               cmd->link_modes.supported);
-
-       supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
-
-       ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
-                                               supported);
+       ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
+       ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause);
 
        if (LOOPBACK_INTERNAL(efx)) {
                cmd->base.speed = link_state->speed;