*/
 void bnxt_set_ring_params(struct bnxt *bp)
 {
-       u32 ring_size, rx_size, rx_space;
+       u32 ring_size, rx_size, rx_space, max_rx_cmpl;
        u32 agg_factor = 0, agg_ring_size = 0;
 
        /* 8 for CRC and VLAN */
        bp->tx_nr_pages = bnxt_calc_nr_ring_pages(ring_size, TX_DESC_CNT);
        bp->tx_ring_mask = (bp->tx_nr_pages * TX_DESC_CNT) - 1;
 
-       ring_size = bp->rx_ring_size * (2 + agg_factor) + bp->tx_ring_size;
+       max_rx_cmpl = bp->rx_ring_size;
+       /* MAX TPA needs to be added because TPA_START completions are
+        * immediately recycled, so the TPA completions are not bound by
+        * the RX ring size.
+        */
+       if (bp->flags & BNXT_FLAG_TPA)
+               max_rx_cmpl += bp->max_tpa;
+       /* RX and TPA completions are 32-byte, all others are 16-byte */
+       ring_size = max_rx_cmpl * 2 + agg_ring_size + bp->tx_ring_size;
        bp->cp_ring_size = ring_size;
 
        bp->cp_nr_pages = bnxt_calc_nr_ring_pages(ring_size, CP_DESC_CNT);