aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/i40e/i40e_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_main.c')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index e31adbc75f9c..70ecd9c3a163 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -3449,15 +3449,20 @@ static void i40e_vsi_configure_msix(struct i40e_vsi *vsi)
3449 for (i = 0; i < vsi->num_q_vectors; i++, vector++) { 3449 for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
3450 struct i40e_q_vector *q_vector = vsi->q_vectors[i]; 3450 struct i40e_q_vector *q_vector = vsi->q_vectors[i];
3451 3451
3452 q_vector->itr_countdown = ITR_COUNTDOWN_START; 3452 q_vector->rx.next_update = jiffies + 1;
3453 q_vector->rx.itr = ITR_TO_REG(vsi->rx_rings[i]->rx_itr_setting); 3453 q_vector->rx.target_itr =
3454 q_vector->rx.latency_range = I40E_LOW_LATENCY; 3454 ITR_TO_REG(vsi->rx_rings[i]->itr_setting);
3455 wr32(hw, I40E_PFINT_ITRN(I40E_RX_ITR, vector - 1), 3455 wr32(hw, I40E_PFINT_ITRN(I40E_RX_ITR, vector - 1),
3456 q_vector->rx.itr); 3456 q_vector->rx.target_itr);
3457 q_vector->tx.itr = ITR_TO_REG(vsi->tx_rings[i]->tx_itr_setting); 3457 q_vector->rx.current_itr = q_vector->rx.target_itr;
3458 q_vector->tx.latency_range = I40E_LOW_LATENCY; 3458
3459 q_vector->tx.next_update = jiffies + 1;
3460 q_vector->tx.target_itr =
3461 ITR_TO_REG(vsi->tx_rings[i]->itr_setting);
3459 wr32(hw, I40E_PFINT_ITRN(I40E_TX_ITR, vector - 1), 3462 wr32(hw, I40E_PFINT_ITRN(I40E_TX_ITR, vector - 1),
3460 q_vector->tx.itr); 3463 q_vector->tx.target_itr);
3464 q_vector->tx.current_itr = q_vector->tx.target_itr;
3465
3461 wr32(hw, I40E_PFINT_RATEN(vector - 1), 3466 wr32(hw, I40E_PFINT_RATEN(vector - 1),
3462 i40e_intrl_usec_to_reg(vsi->int_rate_limit)); 3467 i40e_intrl_usec_to_reg(vsi->int_rate_limit));
3463 3468
@@ -3558,13 +3563,14 @@ static void i40e_configure_msi_and_legacy(struct i40e_vsi *vsi)
3558 u32 val; 3563 u32 val;
3559 3564
3560 /* set the ITR configuration */ 3565 /* set the ITR configuration */
3561 q_vector->itr_countdown = ITR_COUNTDOWN_START; 3566 q_vector->rx.next_update = jiffies + 1;
3562 q_vector->rx.itr = ITR_TO_REG(vsi->rx_rings[0]->rx_itr_setting); 3567 q_vector->rx.target_itr = ITR_TO_REG(vsi->rx_rings[0]->itr_setting);
3563 q_vector->rx.latency_range = I40E_LOW_LATENCY; 3568 wr32(hw, I40E_PFINT_ITR0(I40E_RX_ITR), q_vector->rx.target_itr);
3564 wr32(hw, I40E_PFINT_ITR0(I40E_RX_ITR), q_vector->rx.itr); 3569 q_vector->rx.current_itr = q_vector->rx.target_itr;
3565 q_vector->tx.itr = ITR_TO_REG(vsi->tx_rings[0]->tx_itr_setting); 3570 q_vector->tx.next_update = jiffies + 1;
3566 q_vector->tx.latency_range = I40E_LOW_LATENCY; 3571 q_vector->tx.target_itr = ITR_TO_REG(vsi->tx_rings[0]->itr_setting);
3567 wr32(hw, I40E_PFINT_ITR0(I40E_TX_ITR), q_vector->tx.itr); 3572 wr32(hw, I40E_PFINT_ITR0(I40E_TX_ITR), q_vector->tx.target_itr);
3573 q_vector->tx.current_itr = q_vector->tx.target_itr;
3568 3574
3569 i40e_enable_misc_int_causes(pf); 3575 i40e_enable_misc_int_causes(pf);
3570 3576
@@ -9215,6 +9221,17 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
9215 } 9221 }
9216 i40e_get_oem_version(&pf->hw); 9222 i40e_get_oem_version(&pf->hw);
9217 9223
9224 if (test_bit(__I40E_EMP_RESET_INTR_RECEIVED, pf->state) &&
9225 ((hw->aq.fw_maj_ver == 4 && hw->aq.fw_min_ver <= 33) ||
9226 hw->aq.fw_maj_ver < 4) && hw->mac.type == I40E_MAC_XL710) {
9227 /* The following delay is necessary for 4.33 firmware and older
9228 * to recover after EMP reset. 200 ms should suffice but we
9229 * put here 300 ms to be sure that FW is ready to operate
9230 * after reset.
9231 */
9232 mdelay(300);
9233 }
9234
9218 /* re-verify the eeprom if we just had an EMP reset */ 9235 /* re-verify the eeprom if we just had an EMP reset */
9219 if (test_and_clear_bit(__I40E_EMP_RESET_INTR_RECEIVED, pf->state)) 9236 if (test_and_clear_bit(__I40E_EMP_RESET_INTR_RECEIVED, pf->state))
9220 i40e_verify_eeprom(pf); 9237 i40e_verify_eeprom(pf);
@@ -10018,7 +10035,7 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)
10018 ring->dcb_tc = 0; 10035 ring->dcb_tc = 0;
10019 if (vsi->back->hw_features & I40E_HW_WB_ON_ITR_CAPABLE) 10036 if (vsi->back->hw_features & I40E_HW_WB_ON_ITR_CAPABLE)
10020 ring->flags = I40E_TXR_FLAGS_WB_ON_ITR; 10037 ring->flags = I40E_TXR_FLAGS_WB_ON_ITR;
10021 ring->tx_itr_setting = pf->tx_itr_default; 10038 ring->itr_setting = pf->tx_itr_default;
10022 vsi->tx_rings[i] = ring++; 10039 vsi->tx_rings[i] = ring++;
10023 10040
10024 if (!i40e_enabled_xdp_vsi(vsi)) 10041 if (!i40e_enabled_xdp_vsi(vsi))
@@ -10036,7 +10053,7 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)
10036 if (vsi->back->hw_features & I40E_HW_WB_ON_ITR_CAPABLE) 10053 if (vsi->back->hw_features & I40E_HW_WB_ON_ITR_CAPABLE)
10037 ring->flags = I40E_TXR_FLAGS_WB_ON_ITR; 10054 ring->flags = I40E_TXR_FLAGS_WB_ON_ITR;
10038 set_ring_xdp(ring); 10055 set_ring_xdp(ring);
10039 ring->tx_itr_setting = pf->tx_itr_default; 10056 ring->itr_setting = pf->tx_itr_default;
10040 vsi->xdp_rings[i] = ring++; 10057 vsi->xdp_rings[i] = ring++;
10041 10058
10042setup_rx: 10059setup_rx:
@@ -10049,7 +10066,7 @@ setup_rx:
10049 ring->count = vsi->num_desc; 10066 ring->count = vsi->num_desc;
10050 ring->size = 0; 10067 ring->size = 0;
10051 ring->dcb_tc = 0; 10068 ring->dcb_tc = 0;
10052 ring->rx_itr_setting = pf->rx_itr_default; 10069 ring->itr_setting = pf->rx_itr_default;
10053 vsi->rx_rings[i] = ring; 10070 vsi->rx_rings[i] = ring;
10054 } 10071 }
10055 10072
@@ -10328,9 +10345,6 @@ static int i40e_vsi_alloc_q_vector(struct i40e_vsi *vsi, int v_idx, int cpu)
10328 netif_napi_add(vsi->netdev, &q_vector->napi, 10345 netif_napi_add(vsi->netdev, &q_vector->napi,
10329 i40e_napi_poll, NAPI_POLL_WEIGHT); 10346 i40e_napi_poll, NAPI_POLL_WEIGHT);
10330 10347
10331 q_vector->rx.latency_range = I40E_LOW_LATENCY;
10332 q_vector->tx.latency_range = I40E_LOW_LATENCY;
10333
10334 /* tie q_vector and vsi together */ 10348 /* tie q_vector and vsi together */
10335 vsi->q_vectors[v_idx] = q_vector; 10349 vsi->q_vectors[v_idx] = q_vector;
10336 10350