Commit 42b1e6aa authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

nfp: report auto-negotiation in ethtool

NSP ABI version 0.17 is exposing the autonegotiation settings.
Report whether autoneg is on via ethtool.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 21d529d5
...@@ -203,6 +203,10 @@ nfp_net_get_link_ksettings(struct net_device *netdev, ...@@ -203,6 +203,10 @@ nfp_net_get_link_ksettings(struct net_device *netdev,
cmd->base.speed = SPEED_UNKNOWN; cmd->base.speed = SPEED_UNKNOWN;
cmd->base.duplex = DUPLEX_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)) if (!netif_carrier_ok(netdev))
return 0; return 0;
......
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
#define NSP_ETH_STATE_RX_ENABLED BIT_ULL(3) #define NSP_ETH_STATE_RX_ENABLED BIT_ULL(3)
#define NSP_ETH_STATE_RATE GENMASK_ULL(11, 8) #define NSP_ETH_STATE_RATE GENMASK_ULL(11, 8)
#define NSP_ETH_STATE_OVRD_CHNG BIT_ULL(22) #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_ENABLED BIT_ULL(1)
#define NSP_ETH_CTRL_TX_ENABLED BIT_ULL(2) #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, ...@@ -142,6 +143,7 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const struct eth_table_entry *src,
return; return;
dst->override_changed = FIELD_GET(NSP_ETH_STATE_OVRD_CHNG, state); dst->override_changed = FIELD_GET(NSP_ETH_STATE_OVRD_CHNG, state);
dst->aneg = FIELD_GET(NSP_ETH_STATE_ANEG, state);
} }
static void static void
......
...@@ -37,6 +37,14 @@ ...@@ -37,6 +37,14 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/if_ether.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 * struct nfp_eth_table - ETH table information
* @count: number of table entries * @count: number of table entries
...@@ -48,6 +56,7 @@ ...@@ -48,6 +56,7 @@
* @base: first channel index (within NBI) * @base: first channel index (within NBI)
* @lanes: number of channels * @lanes: number of channels
* @speed: interface speed (in Mbps) * @speed: interface speed (in Mbps)
* @aneg: auto negotiation mode
* @mac_addr: interface MAC address * @mac_addr: interface MAC address
* @label_port: port id * @label_port: port id
* @label_subport: id of interface within port (for split ports) * @label_subport: id of interface within port (for split ports)
...@@ -68,6 +77,8 @@ struct nfp_eth_table { ...@@ -68,6 +77,8 @@ struct nfp_eth_table {
unsigned int lanes; unsigned int lanes;
unsigned int speed; unsigned int speed;
enum nfp_eth_aneg aneg;
u8 mac_addr[ETH_ALEN]; u8 mac_addr[ETH_ALEN];
u8 label_port; u8 label_port;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment