aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/netronome/nfp/nfp_port.c
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2017-07-04 02:27:19 -0700
committerDavid S. Miller <davem@davemloft.net>2017-07-05 09:13:07 +0100
commit2eb333c4b442c4bcab79ada53019d4a47f252e46 (patch)
treea66168f7c31fca85731c4969186f5eb45097dff3 /drivers/net/ethernet/netronome/nfp/nfp_port.c
parentnet: macb: remove extraneous return when MACB_EXT_DESC is defined (diff)
downloadlinux-dev-2eb333c4b442c4bcab79ada53019d4a47f252e46.tar.xz
linux-dev-2eb333c4b442c4bcab79ada53019d4a47f252e46.zip
nfp: improve order of interfaces in breakout mode
For historical reasons we enumerate the vNICs in order. This means that if user configures breakout on a multiport card, the first interface of the second port will have its MAC address changed. What's worse, when moved from static information (HWInfo) to using management FW (NSP), more features started depending on the port ids. Right now in case of breakout first subport of the second port and second subport of the first port will have their link info swapped. Revise the ordering scheme so that first subport maintains its address. Side effect of this change is that we will use base lane ids in devlink (i.e. 40G ports will be 4 ids apart), e.g.: pci/0000:04:00.0/0: type eth netdev p6p1 pci/0000:04:00.0/4: type eth netdev p6p2 Note that behaviour of phys_port_id is not changed since there is a separate id number for the subport there. Fixes: ec8b1fbe682d ("nfp: support port splitting via devlink") Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to '')
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_port.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.c b/drivers/net/ethernet/netronome/nfp/nfp_port.c
index 776e54dd5dd0..e42644dbb865 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_port.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_port.c
@@ -184,24 +184,24 @@ nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len)
int nfp_port_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
struct nfp_port *port, unsigned int id)
{
- port->eth_id = id;
- port->eth_port = nfp_net_find_port(pf->eth_tbl, id);
-
/* Check if vNIC has external port associated and cfg is OK */
- if (!port->eth_port) {
+ if (!pf->eth_tbl || id >= pf->eth_tbl->count) {
nfp_err(app->cpp,
- "NSP port entries don't match vNICs (no entry for port #%d)\n",
+ "NSP port entries don't match vNICs (no entry %d)\n",
id);
return -EINVAL;
}
- if (port->eth_port->override_changed) {
+ if (pf->eth_tbl->ports[id].override_changed) {
nfp_warn(app->cpp,
"Config changed for port #%d, reboot required before port will be operational\n",
- id);
+ pf->eth_tbl->ports[id].index);
port->type = NFP_PORT_INVALID;
return 0;
}
+ port->eth_port = &pf->eth_tbl->ports[id];
+ port->eth_id = pf->eth_tbl->ports[id].index;
+
return 0;
}