diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_common.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_common.c | 99 | 
1 files changed, 99 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c index 298e654583bd..e9eb48bd4b1e 100644 --- a/drivers/net/ethernet/intel/ice/ice_common.c +++ b/drivers/net/ethernet/intel/ice/ice_common.c @@ -2093,6 +2093,48 @@ ice_parse_vsi_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_p,  }  /** + * ice_parse_1588_func_caps - Parse ICE_AQC_CAPS_1588 function caps + * @hw: pointer to the HW struct + * @func_p: pointer to function capabilities structure + * @cap: pointer to the capability element to parse + * + * Extract function capabilities for ICE_AQC_CAPS_1588. + */ +static void +ice_parse_1588_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_p, +			 struct ice_aqc_list_caps_elem *cap) +{ +	struct ice_ts_func_info *info = &func_p->ts_func_info; +	u32 number = le32_to_cpu(cap->number); + +	info->ena = ((number & ICE_TS_FUNC_ENA_M) != 0); +	func_p->common_cap.ieee_1588 = info->ena; + +	info->src_tmr_owned = ((number & ICE_TS_SRC_TMR_OWND_M) != 0); +	info->tmr_ena = ((number & ICE_TS_TMR_ENA_M) != 0); +	info->tmr_index_owned = ((number & ICE_TS_TMR_IDX_OWND_M) != 0); +	info->tmr_index_assoc = ((number & ICE_TS_TMR_IDX_ASSOC_M) != 0); + +	info->clk_freq = (number & ICE_TS_CLK_FREQ_M) >> ICE_TS_CLK_FREQ_S; +	info->clk_src = ((number & ICE_TS_CLK_SRC_M) != 0); + +	ice_debug(hw, ICE_DBG_INIT, "func caps: ieee_1588 = %u\n", +		  func_p->common_cap.ieee_1588); +	ice_debug(hw, ICE_DBG_INIT, "func caps: src_tmr_owned = %u\n", +		  info->src_tmr_owned); +	ice_debug(hw, ICE_DBG_INIT, "func caps: tmr_ena = %u\n", +		  info->tmr_ena); +	ice_debug(hw, ICE_DBG_INIT, "func caps: tmr_index_owned = %u\n", +		  info->tmr_index_owned); +	ice_debug(hw, ICE_DBG_INIT, "func caps: tmr_index_assoc = %u\n", +		  info->tmr_index_assoc); +	ice_debug(hw, ICE_DBG_INIT, "func caps: clk_freq = %u\n", +		  info->clk_freq); +	ice_debug(hw, ICE_DBG_INIT, "func caps: clk_src = %u\n", +		  info->clk_src); +} + +/**   * ice_parse_fdir_func_caps - Parse ICE_AQC_CAPS_FD function caps   * @hw: pointer to the HW struct   * @func_p: pointer to function capabilities structure @@ -2158,6 +2200,9 @@ ice_parse_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_p,  		case ICE_AQC_CAPS_VSI:  			ice_parse_vsi_func_caps(hw, func_p, &cap_resp[i]);  			break; +		case ICE_AQC_CAPS_1588: +			ice_parse_1588_func_caps(hw, func_p, &cap_resp[i]); +			break;  		case ICE_AQC_CAPS_FD:  			ice_parse_fdir_func_caps(hw, func_p);  			break; @@ -2231,6 +2276,57 @@ ice_parse_vsi_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,  }  /** + * ice_parse_1588_dev_caps - Parse ICE_AQC_CAPS_1588 device caps + * @hw: pointer to the HW struct + * @dev_p: pointer to device capabilities structure + * @cap: capability element to parse + * + * Parse ICE_AQC_CAPS_1588 for device capabilities. + */ +static void +ice_parse_1588_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p, +			struct ice_aqc_list_caps_elem *cap) +{ +	struct ice_ts_dev_info *info = &dev_p->ts_dev_info; +	u32 logical_id = le32_to_cpu(cap->logical_id); +	u32 phys_id = le32_to_cpu(cap->phys_id); +	u32 number = le32_to_cpu(cap->number); + +	info->ena = ((number & ICE_TS_DEV_ENA_M) != 0); +	dev_p->common_cap.ieee_1588 = info->ena; + +	info->tmr0_owner = number & ICE_TS_TMR0_OWNR_M; +	info->tmr0_owned = ((number & ICE_TS_TMR0_OWND_M) != 0); +	info->tmr0_ena = ((number & ICE_TS_TMR0_ENA_M) != 0); + +	info->tmr1_owner = (number & ICE_TS_TMR1_OWNR_M) >> ICE_TS_TMR1_OWNR_S; +	info->tmr1_owned = ((number & ICE_TS_TMR1_OWND_M) != 0); +	info->tmr1_ena = ((number & ICE_TS_TMR1_ENA_M) != 0); + +	info->ena_ports = logical_id; +	info->tmr_own_map = phys_id; + +	ice_debug(hw, ICE_DBG_INIT, "dev caps: ieee_1588 = %u\n", +		  dev_p->common_cap.ieee_1588); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr0_owner = %u\n", +		  info->tmr0_owner); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr0_owned = %u\n", +		  info->tmr0_owned); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr0_ena = %u\n", +		  info->tmr0_ena); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr1_owner = %u\n", +		  info->tmr1_owner); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr1_owned = %u\n", +		  info->tmr1_owned); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr1_ena = %u\n", +		  info->tmr1_ena); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: ieee_1588 ena_ports = %u\n", +		  info->ena_ports); +	ice_debug(hw, ICE_DBG_INIT, "dev caps: tmr_own_map = %u\n", +		  info->tmr_own_map); +} + +/**   * ice_parse_fdir_dev_caps - Parse ICE_AQC_CAPS_FD device caps   * @hw: pointer to the HW struct   * @dev_p: pointer to device capabilities structure @@ -2291,6 +2387,9 @@ ice_parse_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,  		case ICE_AQC_CAPS_VSI:  			ice_parse_vsi_dev_caps(hw, dev_p, &cap_resp[i]);  			break; +		case ICE_AQC_CAPS_1588: +			ice_parse_1588_dev_caps(hw, dev_p, &cap_resp[i]); +			break;  		case  ICE_AQC_CAPS_FD:  			ice_parse_fdir_dev_caps(hw, dev_p, &cap_resp[i]);  			break;  | 
