@@ -4537,68 +4537,57 @@ static int bnxt_hwrm_check_tx_rings(struct bnxt *bp, int tx_rings)
4537
4537
return 0 ;
4538
4538
}
4539
4539
4540
- static void bnxt_hwrm_set_coal_params (struct bnxt * bp , u32 max_bufs ,
4541
- u32 buf_tmrs , u16 flags ,
4540
+ static void bnxt_hwrm_set_coal_params (struct bnxt_coal * hw_coal ,
4542
4541
struct hwrm_ring_cmpl_ring_cfg_aggint_params_input * req )
4543
4542
{
4543
+ u16 val , tmr , max , flags ;
4544
+
4545
+ max = hw_coal -> bufs_per_record * 128 ;
4546
+ if (hw_coal -> budget )
4547
+ max = hw_coal -> bufs_per_record * hw_coal -> budget ;
4548
+
4549
+ val = clamp_t (u16 , hw_coal -> coal_bufs , 1 , max );
4550
+ req -> num_cmpl_aggr_int = cpu_to_le16 (val );
4551
+ req -> num_cmpl_dma_aggr = cpu_to_le16 (val );
4552
+
4553
+ val = clamp_t (u16 , hw_coal -> coal_bufs_irq , 1 , max );
4554
+ req -> num_cmpl_dma_aggr_during_int = cpu_to_le16 (val );
4555
+
4556
+ tmr = BNXT_USEC_TO_COAL_TIMER (hw_coal -> coal_ticks );
4557
+ tmr = max_t (u16 , tmr , 1 );
4558
+ req -> int_lat_tmr_max = cpu_to_le16 (tmr );
4559
+
4560
+ /* min timer set to 1/2 of interrupt timer */
4561
+ val = tmr / 2 ;
4562
+ req -> int_lat_tmr_min = cpu_to_le16 (val );
4563
+
4564
+ /* buf timer set to 1/4 of interrupt timer */
4565
+ val = max_t (u16 , tmr / 4 , 1 );
4566
+ req -> cmpl_aggr_dma_tmr = cpu_to_le16 (val );
4567
+
4568
+ tmr = BNXT_USEC_TO_COAL_TIMER (hw_coal -> coal_ticks_irq );
4569
+ tmr = max_t (u16 , tmr , 1 );
4570
+ req -> cmpl_aggr_dma_tmr_during_int = cpu_to_le16 (tmr );
4571
+
4572
+ flags = RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET ;
4573
+ if (hw_coal -> idle_thresh && hw_coal -> coal_ticks < hw_coal -> idle_thresh )
4574
+ flags |= RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_RING_IDLE ;
4544
4575
req -> flags = cpu_to_le16 (flags );
4545
- req -> num_cmpl_dma_aggr = cpu_to_le16 ((u16 )max_bufs );
4546
- req -> num_cmpl_dma_aggr_during_int = cpu_to_le16 (max_bufs >> 16 );
4547
- req -> cmpl_aggr_dma_tmr = cpu_to_le16 ((u16 )buf_tmrs );
4548
- req -> cmpl_aggr_dma_tmr_during_int = cpu_to_le16 (buf_tmrs >> 16 );
4549
- /* Minimum time between 2 interrupts set to buf_tmr x 2 */
4550
- req -> int_lat_tmr_min = cpu_to_le16 ((u16 )buf_tmrs * 2 );
4551
- req -> int_lat_tmr_max = cpu_to_le16 ((u16 )buf_tmrs * 4 );
4552
- req -> num_cmpl_aggr_int = cpu_to_le16 ((u16 )max_bufs * 4 );
4553
4576
}
4554
4577
4555
4578
int bnxt_hwrm_set_coal (struct bnxt * bp )
4556
4579
{
4557
4580
int i , rc = 0 ;
4558
4581
struct hwrm_ring_cmpl_ring_cfg_aggint_params_input req_rx = {0 },
4559
4582
req_tx = {0 }, * req ;
4560
- u16 max_buf , max_buf_irq ;
4561
- u16 buf_tmr , buf_tmr_irq ;
4562
- u32 flags ;
4563
4583
4564
4584
bnxt_hwrm_cmd_hdr_init (bp , & req_rx ,
4565
4585
HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS , -1 , -1 );
4566
4586
bnxt_hwrm_cmd_hdr_init (bp , & req_tx ,
4567
4587
HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS , -1 , -1 );
4568
4588
4569
- /* Each rx completion (2 records) should be DMAed immediately.
4570
- * DMA 1/4 of the completion buffers at a time.
4571
- */
4572
- max_buf = min_t (u16 , bp -> rx_coal .coal_bufs / 4 , 2 );
4573
- /* max_buf must not be zero */
4574
- max_buf = clamp_t (u16 , max_buf , 1 , 63 );
4575
- max_buf_irq = clamp_t (u16 , bp -> rx_coal .coal_bufs_irq , 1 , 63 );
4576
- buf_tmr = BNXT_USEC_TO_COAL_TIMER (bp -> rx_coal .coal_ticks );
4577
- /* buf timer set to 1/4 of interrupt timer */
4578
- buf_tmr = max_t (u16 , buf_tmr / 4 , 1 );
4579
- buf_tmr_irq = BNXT_USEC_TO_COAL_TIMER (bp -> rx_coal .coal_ticks_irq );
4580
- buf_tmr_irq = max_t (u16 , buf_tmr_irq , 1 );
4581
-
4582
- flags = RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET ;
4583
-
4584
- if (bp -> rx_coal .coal_ticks < bp -> rx_coal .idle_thresh )
4585
- flags |= RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_RING_IDLE ;
4586
-
4587
- bnxt_hwrm_set_coal_params (bp , max_buf_irq << 16 | max_buf ,
4588
- buf_tmr_irq << 16 | buf_tmr , flags , & req_rx );
4589
-
4590
- /* max_buf must not be zero */
4591
- max_buf = clamp_t (u16 , bp -> tx_coal .coal_bufs , 1 , 63 );
4592
- max_buf_irq = clamp_t (u16 , bp -> tx_coal .coal_bufs_irq , 1 , 63 );
4593
- buf_tmr = BNXT_USEC_TO_COAL_TIMER (bp -> tx_coal .coal_ticks );
4594
- /* buf timer set to 1/4 of interrupt timer */
4595
- buf_tmr = max_t (u16 , buf_tmr / 4 , 1 );
4596
- buf_tmr_irq = BNXT_USEC_TO_COAL_TIMER (bp -> tx_coal .coal_ticks_irq );
4597
- buf_tmr_irq = max_t (u16 , buf_tmr_irq , 1 );
4598
-
4599
- flags = RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET ;
4600
- bnxt_hwrm_set_coal_params (bp , max_buf_irq << 16 | max_buf ,
4601
- buf_tmr_irq << 16 | buf_tmr , flags , & req_tx );
4589
+ bnxt_hwrm_set_coal_params (& bp -> rx_coal , & req_rx );
4590
+ bnxt_hwrm_set_coal_params (& bp -> tx_coal , & req_tx );
4602
4591
4603
4592
mutex_lock (& bp -> hwrm_cmd_lock );
4604
4593
for (i = 0 ; i < bp -> cp_nr_rings ; i ++ ) {
0 commit comments