nfp: report auto-negotiation in ethtool
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 4 Apr 2017 23:12:28 +0000 (16:12 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Apr 2017 17:49:12 +0000 (10:49 -0700)
NSP ABI version 0.17 is exposing the autonegotiation settings.
Report whether autoneg is on via ethtool.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.h

index 0fdc14e7b5768c55327ca9487369ec2128bf8d93..563ced3c99e1bba6e6ede92b858492c5e2abf83f 100644 (file)
@@ -203,6 +203,10 @@ nfp_net_get_link_ksettings(struct net_device *netdev,
        cmd->base.speed = SPEED_UNKNOWN;
        cmd->base.duplex = DUPLEX_UNKNOWN;
 
+       if (nn->eth_port)
+               cmd->base.autoneg = nn->eth_port->aneg != NFP_ANEG_DISABLED ?
+                       AUTONEG_ENABLE : AUTONEG_DISABLE;
+
        if (!netif_carrier_ok(netdev))
                return 0;
 
index 932772fbd27e67ac8b093a1e278591f06924f8e3..dcb1bc81e5541e0a8f67f481894e1ce0a740dd68 100644 (file)
@@ -63,6 +63,7 @@
 #define NSP_ETH_STATE_RX_ENABLED       BIT_ULL(3)
 #define NSP_ETH_STATE_RATE             GENMASK_ULL(11, 8)
 #define NSP_ETH_STATE_OVRD_CHNG                BIT_ULL(22)
+#define NSP_ETH_STATE_ANEG             GENMASK_ULL(25, 23)
 
 #define NSP_ETH_CTRL_ENABLED           BIT_ULL(1)
 #define NSP_ETH_CTRL_TX_ENABLED                BIT_ULL(2)
@@ -142,6 +143,7 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const struct eth_table_entry *src,
                return;
 
        dst->override_changed = FIELD_GET(NSP_ETH_STATE_OVRD_CHNG, state);
+       dst->aneg = FIELD_GET(NSP_ETH_STATE_ANEG, state);
 }
 
 static void
index 6838741fadd72e524c2c7896d6ede7f8ae0a423a..6b3e954e70b3422db05ade88745d688da8fe9dbf 100644 (file)
 #include <linux/types.h>
 #include <linux/if_ether.h>
 
+enum nfp_eth_aneg {
+       NFP_ANEG_AUTO = 0,
+       NFP_ANEG_SEARCH,
+       NFP_ANEG_25G_CONSORTIUM,
+       NFP_ANEG_25G_IEEE,
+       NFP_ANEG_DISABLED,
+};
+
 /**
  * struct nfp_eth_table - ETH table information
  * @count:     number of table entries
@@ -48,6 +56,7 @@
  * @base:      first channel index (within NBI)
  * @lanes:     number of channels
  * @speed:     interface speed (in Mbps)
+ * @aneg:      auto negotiation mode
  * @mac_addr:  interface MAC address
  * @label_port:        port id
  * @label_subport:  id of interface within port (for split ports)
@@ -68,6 +77,8 @@ struct nfp_eth_table {
                unsigned int lanes;
                unsigned int speed;
 
+               enum nfp_eth_aneg aneg;
+
                u8 mac_addr[ETH_ALEN];
 
                u8 label_port;