liquidio: fix wrong information about link modes reported to ethtool
authorManish Awasthi <manish.awasthi@cavium.com>
Thu, 16 Mar 2017 23:16:17 +0000 (16:16 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Mar 2017 04:40:29 +0000 (21:40 -0700)
Information reported to ethtool about link modes is wrong for 25G NIC.  Fix
it by checking for presence of 25G NIC, checking the link speed reported by
NIC firmware, and then assigning proper values to the
ethtool_link_ksettings struct.

Signed-off-by: Manish Awasthi <manish.awasthi@cavium.com>
Signed-off-by: Felix Manlunas <felix.manlunas@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cavium/liquidio/lio_ethtool.c

index 50384cede8be9b84431690074022bbff4bbc9199..6eef3b999130d7f115b57b808374e97828163b43 100644 (file)
@@ -213,17 +213,23 @@ static int lio_get_link_ksettings(struct net_device *netdev,
        struct lio *lio = GET_LIO(netdev);
        struct octeon_device *oct = lio->oct_dev;
        struct oct_link_info *linfo;
-       u32 supported, advertising;
+       u32 supported = 0, advertising = 0;
 
        linfo = &lio->linfo;
 
        if (linfo->link.s.if_mode == INTERFACE_MODE_XAUI ||
            linfo->link.s.if_mode == INTERFACE_MODE_RXAUI ||
+           linfo->link.s.if_mode == INTERFACE_MODE_XLAUI ||
            linfo->link.s.if_mode == INTERFACE_MODE_XFI) {
                ecmd->base.port = PORT_FIBRE;
-               supported = (SUPPORTED_10000baseT_Full | SUPPORTED_FIBRE |
-                            SUPPORTED_Pause);
-               advertising = (ADVERTISED_10000baseT_Full | ADVERTISED_Pause);
+
+               if (linfo->link.s.speed == SPEED_10000) {
+                       supported = SUPPORTED_10000baseT_Full;
+                       advertising = ADVERTISED_10000baseT_Full;
+               }
+
+               supported |= SUPPORTED_FIBRE | SUPPORTED_Pause;
+               advertising |= ADVERTISED_Pause;
                ethtool_convert_legacy_u32_to_link_mode(
                        ecmd->link_modes.supported, supported);
                ethtool_convert_legacy_u32_to_link_mode(