nfp: devlink port split support for 1x100G CXP NIC
This commit makes it possible to use devlink to split the 100G CXP Netronome into two 40G interfaces. Currently when you ask for 2 interfaces, the math in src/nfp_devlink.c:nfp_devlink_port_split calculates that you want 5 lanes per port because for some reason eth_port.port_lanes=10 (shouldn't this be 12 for CXP?). What we really want when asking for 2 breakout interfaces is 4 lanes per port. This commit makes that happen by calculating based on 8 lanes if 10 are present. Signed-off-by: Ryan C Goodfellow <rgoodfel@isi.edu> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Greg Weeks <greg.weeks@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ca0f32d5d9
commit
5948185b97
|
@ -66,6 +66,7 @@ nfp_devlink_port_split(struct devlink *devlink, unsigned int port_index,
|
||||||
{
|
{
|
||||||
struct nfp_pf *pf = devlink_priv(devlink);
|
struct nfp_pf *pf = devlink_priv(devlink);
|
||||||
struct nfp_eth_table_port eth_port;
|
struct nfp_eth_table_port eth_port;
|
||||||
|
unsigned int lanes;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (count < 2)
|
if (count < 2)
|
||||||
|
@ -84,8 +85,12 @@ nfp_devlink_port_split(struct devlink *devlink, unsigned int port_index,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = nfp_devlink_set_lanes(pf, eth_port.index,
|
/* Special case the 100G CXP -> 2x40G split */
|
||||||
eth_port.port_lanes / count);
|
lanes = eth_port.port_lanes / count;
|
||||||
|
if (eth_port.lanes == 10 && count == 2)
|
||||||
|
lanes = 8 / count;
|
||||||
|
|
||||||
|
ret = nfp_devlink_set_lanes(pf, eth_port.index, lanes);
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&pf->lock);
|
mutex_unlock(&pf->lock);
|
||||||
|
|
||||||
|
@ -98,6 +103,7 @@ nfp_devlink_port_unsplit(struct devlink *devlink, unsigned int port_index,
|
||||||
{
|
{
|
||||||
struct nfp_pf *pf = devlink_priv(devlink);
|
struct nfp_pf *pf = devlink_priv(devlink);
|
||||||
struct nfp_eth_table_port eth_port;
|
struct nfp_eth_table_port eth_port;
|
||||||
|
unsigned int lanes;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&pf->lock);
|
mutex_lock(&pf->lock);
|
||||||
|
@ -113,7 +119,12 @@ nfp_devlink_port_unsplit(struct devlink *devlink, unsigned int port_index,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = nfp_devlink_set_lanes(pf, eth_port.index, eth_port.port_lanes);
|
/* Special case the 100G CXP -> 2x40G unsplit */
|
||||||
|
lanes = eth_port.port_lanes;
|
||||||
|
if (eth_port.port_lanes == 8)
|
||||||
|
lanes = 10;
|
||||||
|
|
||||||
|
ret = nfp_devlink_set_lanes(pf, eth_port.index, lanes);
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&pf->lock);
|
mutex_unlock(&pf->lock);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue