coal->rx_max_coalesced_frames = hw_coal->coal_bufs / mult;
        coal->rx_coalesce_usecs_irq = hw_coal->coal_ticks_irq;
        coal->rx_max_coalesced_frames_irq = hw_coal->coal_bufs_irq / mult;
+       if (hw_coal->flags &
+           RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET)
+               kernel_coal->use_cqe_mode_rx = true;
 
        hw_coal = &bp->tx_coal;
        mult = hw_coal->bufs_per_record;
        coal->tx_max_coalesced_frames = hw_coal->coal_bufs / mult;
        coal->tx_coalesce_usecs_irq = hw_coal->coal_ticks_irq;
        coal->tx_max_coalesced_frames_irq = hw_coal->coal_bufs_irq / mult;
+       if (hw_coal->flags &
+           RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET)
+               kernel_coal->use_cqe_mode_tx = true;
 
        coal->stats_block_coalesce_usecs = bp->stats_coal_ticks;
 
                }
        }
 
+       if ((kernel_coal->use_cqe_mode_rx || kernel_coal->use_cqe_mode_tx) &&
+           !(bp->coal_cap.cmpl_params &
+             RING_AGGINT_QCAPS_RESP_CMPL_PARAMS_TIMER_RESET))
+               return -EOPNOTSUPP;
+
        hw_coal = &bp->rx_coal;
        mult = hw_coal->bufs_per_record;
        hw_coal->coal_ticks = coal->rx_coalesce_usecs;
        hw_coal->coal_bufs = coal->rx_max_coalesced_frames * mult;
        hw_coal->coal_ticks_irq = coal->rx_coalesce_usecs_irq;
        hw_coal->coal_bufs_irq = coal->rx_max_coalesced_frames_irq * mult;
+       hw_coal->flags &=
+               ~RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET;
+       if (kernel_coal->use_cqe_mode_rx)
+               hw_coal->flags |=
+                       RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET;
 
        hw_coal = &bp->tx_coal;
        mult = hw_coal->bufs_per_record;
        hw_coal->coal_bufs = coal->tx_max_coalesced_frames * mult;
        hw_coal->coal_ticks_irq = coal->tx_coalesce_usecs_irq;
        hw_coal->coal_bufs_irq = coal->tx_max_coalesced_frames_irq * mult;
+       hw_coal->flags &=
+               ~RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET;
+       if (kernel_coal->use_cqe_mode_tx)
+               hw_coal->flags |=
+                       RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET;
 
        if (bp->stats_coal_ticks != coal->stats_block_coalesce_usecs) {
                u32 stats_ticks = coal->stats_block_coalesce_usecs;
                                     ETHTOOL_COALESCE_USECS_IRQ |
                                     ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
                                     ETHTOOL_COALESCE_STATS_BLOCK_USECS |
-                                    ETHTOOL_COALESCE_USE_ADAPTIVE_RX,
+                                    ETHTOOL_COALESCE_USE_ADAPTIVE_RX |
+                                    ETHTOOL_COALESCE_USE_CQE,
        .get_link_ksettings     = bnxt_get_link_ksettings,
        .set_link_ksettings     = bnxt_set_link_ksettings,
        .get_fec_stats          = bnxt_get_fec_stats,