diff options
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 28 |
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 | */ |
351 | static void nfp_net_tx_ring_init(struct nfp_net_tx_ring *tx_ring) | 353 | static void |
354 | nfp_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 | */ |
364 | static void nfp_net_rx_ring_init(struct nfp_net_rx_ring *rx_ring) | 372 | static void |
373 | nfp_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 | ||