Skip to content

Commit 93433c1

Browse files
jahay1anguy11
authored andcommitted
idpf: add support for SW triggered interrupts
SW triggered interrupts are guaranteed to fire after their timer expires, unlike Tx and Rx interrupts which will only fire after the timer expires _and_ a descriptor write back is available to be processed by the driver. Add the necessary fields, defines, and initializations to enable a SW triggered interrupt in the vector's dyn_ctl register. Reviewed-by: Madhu Chittim <[email protected]> Signed-off-by: Joshua Hay <[email protected]> Tested-by: Krishneil Singh <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 7ed2d91 commit 93433c1

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

drivers/net/ethernet/intel/idpf/idpf_dev.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ static int idpf_intr_reg_init(struct idpf_vport *vport)
101101
intr->dyn_ctl_itridx_s = PF_GLINT_DYN_CTL_ITR_INDX_S;
102102
intr->dyn_ctl_intrvl_s = PF_GLINT_DYN_CTL_INTERVAL_S;
103103
intr->dyn_ctl_wb_on_itr_m = PF_GLINT_DYN_CTL_WB_ON_ITR_M;
104+
intr->dyn_ctl_swint_trig_m = PF_GLINT_DYN_CTL_SWINT_TRIG_M;
105+
intr->dyn_ctl_sw_itridx_ena_m =
106+
PF_GLINT_DYN_CTL_SW_ITR_INDX_ENA_M;
104107

105108
spacing = IDPF_ITR_IDX_SPACING(reg_vals[vec_id].itrn_index_spacing,
106109
IDPF_PF_ITR_IDX_SPACING);

drivers/net/ethernet/intel/idpf/idpf_txrx.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,8 @@ struct idpf_vec_regs {
354354
* @dyn_ctl_itridx_m: Mask for ITR index
355355
* @dyn_ctl_intrvl_s: Register bit offset for ITR interval
356356
* @dyn_ctl_wb_on_itr_m: Mask for WB on ITR feature
357+
* @dyn_ctl_sw_itridx_ena_m: Mask for SW ITR index
358+
* @dyn_ctl_swint_trig_m: Mask for dyn_ctl SW triggered interrupt enable
357359
* @rx_itr: RX ITR register
358360
* @tx_itr: TX ITR register
359361
* @icr_ena: Interrupt cause register offset
@@ -367,6 +369,8 @@ struct idpf_intr_reg {
367369
u32 dyn_ctl_itridx_m;
368370
u32 dyn_ctl_intrvl_s;
369371
u32 dyn_ctl_wb_on_itr_m;
372+
u32 dyn_ctl_sw_itridx_ena_m;
373+
u32 dyn_ctl_swint_trig_m;
370374
void __iomem *rx_itr;
371375
void __iomem *tx_itr;
372376
void __iomem *icr_ena;
@@ -437,7 +441,7 @@ struct idpf_q_vector {
437441
cpumask_var_t affinity_mask;
438442
__cacheline_group_end_aligned(cold);
439443
};
440-
libeth_cacheline_set_assert(struct idpf_q_vector, 112,
444+
libeth_cacheline_set_assert(struct idpf_q_vector, 120,
441445
24 + sizeof(struct napi_struct) +
442446
2 * sizeof(struct dim),
443447
8 + sizeof(cpumask_var_t));
@@ -471,6 +475,8 @@ struct idpf_tx_queue_stats {
471475
#define IDPF_ITR_IS_DYNAMIC(itr_mode) (itr_mode)
472476
#define IDPF_ITR_TX_DEF IDPF_ITR_20K
473477
#define IDPF_ITR_RX_DEF IDPF_ITR_20K
478+
/* Index used for 'SW ITR' update in DYN_CTL register */
479+
#define IDPF_SW_ITR_UPDATE_IDX 2
474480
/* Index used for 'No ITR' update in DYN_CTL register */
475481
#define IDPF_NO_ITR_UPDATE_IDX 3
476482
#define IDPF_ITR_IDX_SPACING(spacing, dflt) (spacing ? spacing : dflt)

drivers/net/ethernet/intel/idpf/idpf_vf_dev.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ static int idpf_vf_intr_reg_init(struct idpf_vport *vport)
101101
intr->dyn_ctl_itridx_s = VF_INT_DYN_CTLN_ITR_INDX_S;
102102
intr->dyn_ctl_intrvl_s = VF_INT_DYN_CTLN_INTERVAL_S;
103103
intr->dyn_ctl_wb_on_itr_m = VF_INT_DYN_CTLN_WB_ON_ITR_M;
104+
intr->dyn_ctl_swint_trig_m = VF_INT_DYN_CTLN_SWINT_TRIG_M;
105+
intr->dyn_ctl_sw_itridx_ena_m =
106+
VF_INT_DYN_CTLN_SW_ITR_INDX_ENA_M;
104107

105108
spacing = IDPF_ITR_IDX_SPACING(reg_vals[vec_id].itrn_index_spacing,
106109
IDPF_VF_ITR_IDX_SPACING);

0 commit comments

Comments
 (0)