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

nfp: calculate total port lanes for split

For port splitting we will need to know the total number of lanes
in a port.  Calculate that based on eth_table information.
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 53e7a08f
...@@ -96,6 +96,7 @@ enum nfp_eth_aneg { ...@@ -96,6 +96,7 @@ enum nfp_eth_aneg {
* @override_changed: is media reconfig pending? * @override_changed: is media reconfig pending?
* *
* @port_type: one of %PORT_* defines for ethtool * @port_type: one of %PORT_* defines for ethtool
* @port_lanes: total number of lanes on the port (sum of lanes of all subports)
* @is_split: is interface part of a split port * @is_split: is interface part of a split port
*/ */
struct nfp_eth_table { struct nfp_eth_table {
...@@ -127,6 +128,8 @@ struct nfp_eth_table { ...@@ -127,6 +128,8 @@ struct nfp_eth_table {
/* Computed fields */ /* Computed fields */
u8 port_type; u8 port_type;
unsigned int port_lanes;
bool is_split; bool is_split;
} ports[0]; } ports[0];
}; };
......
...@@ -186,17 +186,19 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const union eth_table_entry *src, ...@@ -186,17 +186,19 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const union eth_table_entry *src,
} }
static void static void
nfp_eth_mark_split_ports(struct nfp_cpp *cpp, struct nfp_eth_table *table) nfp_eth_calc_port_geometry(struct nfp_cpp *cpp, struct nfp_eth_table *table)
{ {
unsigned int i, j; unsigned int i, j;
for (i = 0; i < table->count; i++) for (i = 0; i < table->count; i++)
for (j = 0; j < table->count; j++) { for (j = 0; j < table->count; j++) {
if (i == j)
continue;
if (table->ports[i].label_port != if (table->ports[i].label_port !=
table->ports[j].label_port) table->ports[j].label_port)
continue; continue;
table->ports[i].port_lanes += table->ports[j].lanes;
if (i == j)
continue;
if (table->ports[i].label_subport == if (table->ports[i].label_subport ==
table->ports[j].label_subport) table->ports[j].label_subport)
nfp_warn(cpp, nfp_warn(cpp,
...@@ -205,7 +207,6 @@ nfp_eth_mark_split_ports(struct nfp_cpp *cpp, struct nfp_eth_table *table) ...@@ -205,7 +207,6 @@ nfp_eth_mark_split_ports(struct nfp_cpp *cpp, struct nfp_eth_table *table)
table->ports[i].label_subport); table->ports[i].label_subport);
table->ports[i].is_split = true; table->ports[i].is_split = true;
break;
} }
} }
...@@ -289,7 +290,7 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp) ...@@ -289,7 +290,7 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp)
nfp_eth_port_translate(nsp, &entries[i], i, nfp_eth_port_translate(nsp, &entries[i], i,
&table->ports[j++]); &table->ports[j++]);
nfp_eth_mark_split_ports(cpp, table); nfp_eth_calc_port_geometry(cpp, table);
for (i = 0; i < table->count; i++) for (i = 0; i < table->count; i++)
nfp_eth_calc_port_type(cpp, &table->ports[i]); nfp_eth_calc_port_type(cpp, &table->ports[i]);
......
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