diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnxt/bnxt.c')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 32de4589d16a..1f1e54ba0ecb 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
| @@ -1983,20 +1983,25 @@ static void bnxt_free_rx_skbs(struct bnxt *bp) | |||
| 1983 | 1983 | ||
| 1984 | for (j = 0; j < max_idx; j++) { | 1984 | for (j = 0; j < max_idx; j++) { |
| 1985 | struct bnxt_sw_rx_bd *rx_buf = &rxr->rx_buf_ring[j]; | 1985 | struct bnxt_sw_rx_bd *rx_buf = &rxr->rx_buf_ring[j]; |
| 1986 | dma_addr_t mapping = rx_buf->mapping; | ||
| 1986 | void *data = rx_buf->data; | 1987 | void *data = rx_buf->data; |
| 1987 | 1988 | ||
| 1988 | if (!data) | 1989 | if (!data) |
| 1989 | continue; | 1990 | continue; |
| 1990 | 1991 | ||
| 1991 | dma_unmap_single(&pdev->dev, rx_buf->mapping, | ||
| 1992 | bp->rx_buf_use_size, bp->rx_dir); | ||
| 1993 | |||
| 1994 | rx_buf->data = NULL; | 1992 | rx_buf->data = NULL; |
| 1995 | 1993 | ||
| 1996 | if (BNXT_RX_PAGE_MODE(bp)) | 1994 | if (BNXT_RX_PAGE_MODE(bp)) { |
| 1995 | mapping -= bp->rx_dma_offset; | ||
| 1996 | dma_unmap_page(&pdev->dev, mapping, | ||
| 1997 | PAGE_SIZE, bp->rx_dir); | ||
| 1997 | __free_page(data); | 1998 | __free_page(data); |
| 1998 | else | 1999 | } else { |
| 2000 | dma_unmap_single(&pdev->dev, mapping, | ||
| 2001 | bp->rx_buf_use_size, | ||
| 2002 | bp->rx_dir); | ||
| 1999 | kfree(data); | 2003 | kfree(data); |
| 2004 | } | ||
| 2000 | } | 2005 | } |
| 2001 | 2006 | ||
| 2002 | for (j = 0; j < max_agg_idx; j++) { | 2007 | for (j = 0; j < max_agg_idx; j++) { |
| @@ -2455,6 +2460,18 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr) | |||
| 2455 | return 0; | 2460 | return 0; |
| 2456 | } | 2461 | } |
| 2457 | 2462 | ||
| 2463 | static void bnxt_init_cp_rings(struct bnxt *bp) | ||
| 2464 | { | ||
| 2465 | int i; | ||
| 2466 | |||
| 2467 | for (i = 0; i < bp->cp_nr_rings; i++) { | ||
| 2468 | struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring; | ||
| 2469 | struct bnxt_ring_struct *ring = &cpr->cp_ring_struct; | ||
| 2470 | |||
| 2471 | ring->fw_ring_id = INVALID_HW_RING_ID; | ||
| 2472 | } | ||
| 2473 | } | ||
| 2474 | |||
| 2458 | static int bnxt_init_rx_rings(struct bnxt *bp) | 2475 | static int bnxt_init_rx_rings(struct bnxt *bp) |
| 2459 | { | 2476 | { |
| 2460 | int i, rc = 0; | 2477 | int i, rc = 0; |
| @@ -4732,7 +4749,7 @@ static int bnxt_set_tpa(struct bnxt *bp, bool set_tpa) | |||
| 4732 | rc = bnxt_hwrm_vnic_set_tpa(bp, i, tpa_flags); | 4749 | rc = bnxt_hwrm_vnic_set_tpa(bp, i, tpa_flags); |
| 4733 | if (rc) { | 4750 | if (rc) { |
| 4734 | netdev_err(bp->dev, "hwrm vnic set tpa failure rc for vnic %d: %x\n", | 4751 | netdev_err(bp->dev, "hwrm vnic set tpa failure rc for vnic %d: %x\n", |
| 4735 | rc, i); | 4752 | i, rc); |
| 4736 | return rc; | 4753 | return rc; |
| 4737 | } | 4754 | } |
| 4738 | } | 4755 | } |
| @@ -5006,6 +5023,7 @@ static int bnxt_shutdown_nic(struct bnxt *bp, bool irq_re_init) | |||
| 5006 | 5023 | ||
| 5007 | static int bnxt_init_nic(struct bnxt *bp, bool irq_re_init) | 5024 | static int bnxt_init_nic(struct bnxt *bp, bool irq_re_init) |
| 5008 | { | 5025 | { |
| 5026 | bnxt_init_cp_rings(bp); | ||
| 5009 | bnxt_init_rx_rings(bp); | 5027 | bnxt_init_rx_rings(bp); |
| 5010 | bnxt_init_tx_rings(bp); | 5028 | bnxt_init_tx_rings(bp); |
| 5011 | bnxt_init_ring_grps(bp, irq_re_init); | 5029 | bnxt_init_ring_grps(bp, irq_re_init); |
