Skip to content

Commit

Permalink
nfp: refresh port state before reporting autonegotiation
Browse files Browse the repository at this point in the history
State of autonegotiation may have changed but is not yet refreshed.
Make sure ethtool respects the NFP_PORT_CHANGED flag when looking
at autoneg.

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 May 22, 2017
1 parent 46b2503 commit 1876749
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 9 deletions.
10 changes: 1 addition & 9 deletions drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ nfp_net_get_link_ksettings(struct net_device *netdev,
cmd->base.duplex = DUPLEX_UNKNOWN;

port = nfp_port_from_netdev(netdev);
eth_port = __nfp_port_get_eth_port(port);
eth_port = nfp_port_get_eth_port(port);
if (eth_port)
cmd->base.autoneg = eth_port->aneg != NFP_ANEG_DISABLED ?
AUTONEG_ENABLE : AUTONEG_DISABLE;
Expand All @@ -219,14 +219,6 @@ nfp_net_get_link_ksettings(struct net_device *netdev,

/* Use link speed from ETH table if available, otherwise try the BAR */
if (eth_port) {
int err;

if (test_bit(NFP_PORT_CHANGED, &port->flags)) {
err = nfp_net_refresh_eth_port(port);
if (err)
return err;
}

cmd->base.port = eth_port->port_type;
cmd->base.speed = eth_port->speed;
cmd->base.duplex = DUPLEX_FULL;
Expand Down
12 changes: 12 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_port.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,18 @@ struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port)
return port->eth_port;
}

struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port)
{
if (!__nfp_port_get_eth_port(port))
return NULL;

if (test_bit(NFP_PORT_CHANGED, &port->flags))
if (nfp_net_refresh_eth_port(port))
return NULL;

return __nfp_port_get_eth_port(port);
}

int
nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len)
{
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_port.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ struct nfp_port {

struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port);

int
nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len);
Expand Down

0 comments on commit 1876749

Please sign in to comment.