Skip to content

Commit

Permalink
nfp: report auto-negotiation in ethtool
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jakub Kicinski authored and David S. Miller committed Apr 5, 2017
1 parent 21d529d commit 42b1e6a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
2 changes: 2 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
11 changes: 11 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@
#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
Expand All @@ -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)
Expand All @@ -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;
Expand Down

0 comments on commit 42b1e6a

Please sign in to comment.