aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 8692587904c5..7cd20fcd631a 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -347,12 +347,18 @@ static irqreturn_t nfp_net_irq_exn(int irq, void *data)
347/** 347/**
348 * nfp_net_tx_ring_init() - Fill in the boilerplate for a TX ring 348 * nfp_net_tx_ring_init() - Fill in the boilerplate for a TX ring
349 * @tx_ring: TX ring structure 349 * @tx_ring: TX ring structure
350 * @r_vec: IRQ vector servicing this ring
351 * @idx: Ring index
350 */ 352 */
351static void nfp_net_tx_ring_init(struct nfp_net_tx_ring *tx_ring) 353static void
354nfp_net_tx_ring_init(struct nfp_net_tx_ring *tx_ring,
355 struct nfp_net_r_vector *r_vec, unsigned int idx)
352{ 356{
353 struct nfp_net_r_vector *r_vec = tx_ring->r_vec;
354 struct nfp_net *nn = r_vec->nfp_net; 357 struct nfp_net *nn = r_vec->nfp_net;
355 358
359 tx_ring->idx = idx;
360 tx_ring->r_vec = r_vec;
361
356 tx_ring->qcidx = tx_ring->idx * nn->stride_tx; 362 tx_ring->qcidx = tx_ring->idx * nn->stride_tx;
357 tx_ring->qcp_q = nn->tx_bar + NFP_QCP_QUEUE_OFF(tx_ring->qcidx); 363 tx_ring->qcp_q = nn->tx_bar + NFP_QCP_QUEUE_OFF(tx_ring->qcidx);
358} 364}
@@ -360,12 +366,18 @@ static void nfp_net_tx_ring_init(struct nfp_net_tx_ring *tx_ring)
360/** 366/**
361 * nfp_net_rx_ring_init() - Fill in the boilerplate for a RX ring 367 * nfp_net_rx_ring_init() - Fill in the boilerplate for a RX ring
362 * @rx_ring: RX ring structure 368 * @rx_ring: RX ring structure
369 * @r_vec: IRQ vector servicing this ring
370 * @idx: Ring index
363 */ 371 */
364static void nfp_net_rx_ring_init(struct nfp_net_rx_ring *rx_ring) 372static void
373nfp_net_rx_ring_init(struct nfp_net_rx_ring *rx_ring,
374 struct nfp_net_r_vector *r_vec, unsigned int idx)
365{ 375{
366 struct nfp_net_r_vector *r_vec = rx_ring->r_vec;
367 struct nfp_net *nn = r_vec->nfp_net; 376 struct nfp_net *nn = r_vec->nfp_net;
368 377
378 rx_ring->idx = idx;
379 rx_ring->r_vec = r_vec;
380
369 rx_ring->fl_qcidx = rx_ring->idx * nn->stride_rx; 381 rx_ring->fl_qcidx = rx_ring->idx * nn->stride_rx;
370 rx_ring->rx_qcidx = rx_ring->fl_qcidx + (nn->stride_rx - 1); 382 rx_ring->rx_qcidx = rx_ring->fl_qcidx + (nn->stride_rx - 1);
371 383
@@ -403,14 +415,10 @@ static void nfp_net_irqs_assign(struct net_device *netdev)
403 cpumask_set_cpu(r, &r_vec->affinity_mask); 415 cpumask_set_cpu(r, &r_vec->affinity_mask);
404 416
405 r_vec->tx_ring = &nn->tx_rings[r]; 417 r_vec->tx_ring = &nn->tx_rings[r];
406 nn->tx_rings[r].idx = r; 418 nfp_net_tx_ring_init(r_vec->tx_ring, r_vec, r);
407 nn->tx_rings[r].r_vec = r_vec;
408 nfp_net_tx_ring_init(r_vec->tx_ring);
409 419
410 r_vec->rx_ring = &nn->rx_rings[r]; 420 r_vec->rx_ring = &nn->rx_rings[r];
411 nn->rx_rings[r].idx = r; 421 nfp_net_rx_ring_init(r_vec->rx_ring, r_vec, r);
412 nn->rx_rings[r].r_vec = r_vec;
413 nfp_net_rx_ring_init(r_vec->rx_ring);
414 } 422 }
415} 423}
416 424