aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ice/ice_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_common.c')
-rw-r--r--drivers/net/ethernet/intel/ice/ice_common.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 9ff291375869..68fbbb92d504 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -598,6 +598,39 @@ void ice_output_fw_log(struct ice_hw *hw, struct ice_aq_desc *desc, void *buf)
598} 598}
599 599
600/** 600/**
601 * ice_get_itr_intrl_gran - determine int/intrl granularity
602 * @hw: pointer to the hw struct
603 *
604 * Determines the itr/intrl granularities based on the maximum aggregate
605 * bandwidth according to the device's configuration during power-on.
606 */
607static enum ice_status ice_get_itr_intrl_gran(struct ice_hw *hw)
608{
609 u8 max_agg_bw = (rd32(hw, GL_PWR_MODE_CTL) &
610 GL_PWR_MODE_CTL_CAR_MAX_BW_M) >>
611 GL_PWR_MODE_CTL_CAR_MAX_BW_S;
612
613 switch (max_agg_bw) {
614 case ICE_MAX_AGG_BW_200G:
615 case ICE_MAX_AGG_BW_100G:
616 case ICE_MAX_AGG_BW_50G:
617 hw->itr_gran = ICE_ITR_GRAN_ABOVE_25;
618 hw->intrl_gran = ICE_INTRL_GRAN_ABOVE_25;
619 break;
620 case ICE_MAX_AGG_BW_25G:
621 hw->itr_gran = ICE_ITR_GRAN_MAX_25;
622 hw->intrl_gran = ICE_INTRL_GRAN_MAX_25;
623 break;
624 default:
625 ice_debug(hw, ICE_DBG_INIT,
626 "Failed to determine itr/intrl granularity\n");
627 return ICE_ERR_CFG;
628 }
629
630 return 0;
631}
632
633/**
601 * ice_init_hw - main hardware initialization routine 634 * ice_init_hw - main hardware initialization routine
602 * @hw: pointer to the hardware structure 635 * @hw: pointer to the hardware structure
603 */ 636 */
@@ -621,11 +654,9 @@ enum ice_status ice_init_hw(struct ice_hw *hw)
621 if (status) 654 if (status)
622 return status; 655 return status;
623 656
624 /* set these values to minimum allowed */ 657 status = ice_get_itr_intrl_gran(hw);
625 hw->itr_gran_200 = ICE_ITR_GRAN_MIN_200; 658 if (status)
626 hw->itr_gran_100 = ICE_ITR_GRAN_MIN_100; 659 return status;
627 hw->itr_gran_50 = ICE_ITR_GRAN_MIN_50;
628 hw->itr_gran_25 = ICE_ITR_GRAN_MIN_25;
629 660
630 status = ice_init_all_ctrlq(hw); 661 status = ice_init_all_ctrlq(hw);
631 if (status) 662 if (status)