diff options
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 54 |
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 | ||
10042 | setup_rx: | 10059 | setup_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 | ||