mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
ice: Add support for dynamic interrupt moderation
Currently there is no support for dynamic interrupt moderation. This patch adds some initial code to support this. The following changes were made: 1. Currently we are using multiple members to store the interrupt granularity (itr_gran_25/50/100/200). This is not necessary because we can query the device to determine what the interrupt granularity should be set to, done by a new function ice_get_itr_intrl_gran. 2. Added intrl to ice_q_vector structure to support interrupt rate limiting. 3. Added the function ice_intrl_usecs_to_reg for converting to a value in usecs that the device understands. 4. Added call to write to the GLINT_RATE register. Disable intrl by default for now. 5. Changed rx/tx_itr_setting to itr_setting because having both seems redundant because a ring is either Tx or Rx. 6. Initialize itr_setting for both Tx/Rx rings in ice_vsi_alloc_rings() Signed-off-by: Brett Creeley <brett.creeley@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
ca4929b6df
commit
9e4ab4c29a
7 changed files with 102 additions and 24 deletions
|
@ -104,10 +104,16 @@ enum ice_rx_dtype {
|
|||
#define ICE_RX_ITR ICE_IDX_ITR0
|
||||
#define ICE_TX_ITR ICE_IDX_ITR1
|
||||
#define ICE_ITR_DYNAMIC 0x8000 /* use top bit as a flag */
|
||||
#define ICE_ITR_8K 0x003E
|
||||
#define ICE_ITR_8K 125
|
||||
#define ICE_DFLT_TX_ITR ICE_ITR_8K
|
||||
#define ICE_DFLT_RX_ITR ICE_ITR_8K
|
||||
/* apply ITR granularity translation to program the register. itr_gran is either
|
||||
* 2 or 4 usecs so we need to divide by 2 first then shift by that value
|
||||
*/
|
||||
#define ITR_TO_REG(val, itr_gran) (((val) & ~ICE_ITR_DYNAMIC) >> \
|
||||
((itr_gran) / 2))
|
||||
|
||||
/* apply ITR HW granularity translation to program the HW registers */
|
||||
#define ITR_TO_REG(val, itr_gran) (((val) & ~ICE_ITR_DYNAMIC) >> (itr_gran))
|
||||
#define ICE_DFLT_INTRL 0
|
||||
|
||||
/* Legacy or Advanced Mode Queue */
|
||||
#define ICE_TX_ADVANCED 0
|
||||
|
@ -130,12 +136,11 @@ struct ice_ring {
|
|||
u32 txq_teid; /* Added Tx queue TEID */
|
||||
|
||||
/* high bit set means dynamic, use accessor routines to read/write.
|
||||
* hardware supports 2us/1us resolution for the ITR registers.
|
||||
* hardware supports 4us/2us resolution for the ITR registers.
|
||||
* these values always store the USER setting, and must be converted
|
||||
* before programming to a register.
|
||||
*/
|
||||
u16 rx_itr_setting;
|
||||
u16 tx_itr_setting;
|
||||
u16 itr_setting;
|
||||
|
||||
u16 count; /* Number of descriptors */
|
||||
u16 reg_idx; /* HW register index of the ring */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue