@@ -769,10 +769,10 @@ nfp_net_start(struct rte_eth_dev *dev)
if (hw->is_phyport) {
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
/* Configure the physical port up */
- nfp_eth_set_configured(hw->cpp, hw->idx, 1);
+ nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 1);
else
nfp_eth_set_configured(dev->process_private,
- hw->idx, 1);
+ hw->nfp_idx, 1);
}
hw->ctrl = new_ctrl;
@@ -825,10 +825,10 @@ nfp_net_stop(struct rte_eth_dev *dev)
if (hw->is_phyport) {
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
/* Configure the physical port down */
- nfp_eth_set_configured(hw->cpp, hw->idx, 0);
+ nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 0);
else
nfp_eth_set_configured(dev->process_private,
- hw->idx, 0);
+ hw->nfp_idx, 0);
}
return 0;
@@ -849,10 +849,10 @@ nfp_net_set_link_up(struct rte_eth_dev *dev)
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
/* Configure the physical port down */
- return nfp_eth_set_configured(hw->cpp, hw->idx, 1);
+ return nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 1);
else
return nfp_eth_set_configured(dev->process_private,
- hw->idx, 1);
+ hw->nfp_idx, 1);
}
/* Set the link down. */
@@ -870,10 +870,10 @@ nfp_net_set_link_down(struct rte_eth_dev *dev)
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
/* Configure the physical port down */
- return nfp_eth_set_configured(hw->cpp, hw->idx, 0);
+ return nfp_eth_set_configured(hw->cpp, hw->nfp_idx, 0);
else
return nfp_eth_set_configured(dev->process_private,
- hw->idx, 0);
+ hw->nfp_idx, 0);
}
/* Reset and stop device. The device can not be restarted. */
@@ -2806,15 +2806,15 @@ nfp_net_init(struct rte_eth_dev *eth_dev)
return -ENODEV;
}
- /* This points to the specific port private data */
- PMD_INIT_LOG(DEBUG, "Working with physical port number %d",
- port);
-
/* Use PF array of physical ports to get pointer to
* this specific port
*/
hw = pf_dev->ports[port];
+ PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, "
+ "NFP internal port number: %d",
+ port, hw->nfp_idx);
+
} else {
hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
}
@@ -3493,9 +3493,17 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev)
{
struct nfp_net_hw *hw;
struct rte_eth_dev *eth_dev;
+ struct nfp_eth_table *nfp_eth_table = NULL;
int ret = 0;
int i;
+ nfp_eth_table = nfp_eth_read_ports(pf_dev->cpp);
+ if (!nfp_eth_table) {
+ PMD_INIT_LOG(ERR, "Error reading NFP ethernet table");
+ ret = -EIO;
+ goto error;
+ }
+
/* Loop through all physical ports on PF */
for (i = 0; i < pf_dev->total_phyports; i++) {
const unsigned int numa_node = rte_socket_id();
@@ -3551,6 +3559,7 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev)
hw->cpp = pf_dev->cpp;
hw->eth_dev = eth_dev;
hw->idx = i;
+ hw->nfp_idx = nfp_eth_table->ports[i].index;
hw->is_phyport = true;
nfp_net_init:
@@ -3569,7 +3578,8 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev)
rte_eth_dev_probing_finish(eth_dev);
} /* End loop, all ports on this PF */
- return 0;
+ ret = 0;
+ goto eth_table_cleanup;
port_cleanup:
for (i = 0; i < pf_dev->total_phyports; i++) {
@@ -3580,6 +3590,8 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev)
pf_dev->ports[i] = NULL;
}
}
+eth_table_cleanup:
+ free(nfp_eth_table);
error:
return ret;
}
@@ -483,7 +483,10 @@ struct nfp_net_hw {
struct nfp_cpp_area *msix_area;
uint8_t *hw_queues;
+ /* Sequential physical port number */
uint8_t idx;
+ /* Internal port number as seen from NFP */
+ uint8_t nfp_idx;
bool is_phyport;
union eth_table_entry *eth_table;