diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_switch.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_switch.c | 24 | 
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c index d4baae8c3b72..b4ea935e8300 100644 --- a/drivers/net/ethernet/intel/ice/ice_switch.c +++ b/drivers/net/ethernet/intel/ice/ice_switch.c @@ -2025,12 +2025,12 @@ error_out:   * ice_aq_map_recipe_to_profile - Map recipe to packet profile   * @hw: pointer to the HW struct   * @profile_id: package profile ID to associate the recipe with - * @r_bitmap: Recipe bitmap filled in and need to be returned as response + * @r_assoc: Recipe bitmap filled in and need to be returned as response   * @cd: pointer to command details structure or NULL   * Recipe to profile association (0x0291)   */  int -ice_aq_map_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u8 *r_bitmap, +ice_aq_map_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u64 r_assoc,  			     struct ice_sq_cd *cd)  {  	struct ice_aqc_recipe_to_profile *cmd; @@ -2042,7 +2042,7 @@ ice_aq_map_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u8 *r_bitmap,  	/* Set the recipe ID bit in the bitmask to let the device know which  	 * profile we are associating the recipe to  	 */ -	memcpy(cmd->recipe_assoc, r_bitmap, sizeof(cmd->recipe_assoc)); +	cmd->recipe_assoc = cpu_to_le64(r_assoc);  	return ice_aq_send_cmd(hw, &desc, NULL, 0, cd);  } @@ -2051,12 +2051,12 @@ ice_aq_map_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u8 *r_bitmap,   * ice_aq_get_recipe_to_profile - Map recipe to packet profile   * @hw: pointer to the HW struct   * @profile_id: package profile ID to associate the recipe with - * @r_bitmap: Recipe bitmap filled in and need to be returned as response + * @r_assoc: Recipe bitmap filled in and need to be returned as response   * @cd: pointer to command details structure or NULL   * Associate profile ID with given recipe (0x0293)   */  int -ice_aq_get_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u8 *r_bitmap, +ice_aq_get_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u64 *r_assoc,  			     struct ice_sq_cd *cd)  {  	struct ice_aqc_recipe_to_profile *cmd; @@ -2069,7 +2069,7 @@ ice_aq_get_recipe_to_profile(struct ice_hw *hw, u32 profile_id, u8 *r_bitmap,  	status = ice_aq_send_cmd(hw, &desc, NULL, 0, cd);  	if (!status) -		memcpy(r_bitmap, cmd->recipe_assoc, sizeof(cmd->recipe_assoc)); +		*r_assoc = le64_to_cpu(cmd->recipe_assoc);  	return status;  } @@ -2108,6 +2108,7 @@ int ice_alloc_recipe(struct ice_hw *hw, u16 *rid)  static void ice_get_recp_to_prof_map(struct ice_hw *hw)  {  	DECLARE_BITMAP(r_bitmap, ICE_MAX_NUM_RECIPES); +	u64 recp_assoc;  	u16 i;  	for (i = 0; i < hw->switch_info->max_used_prof_index + 1; i++) { @@ -2115,8 +2116,9 @@ static void ice_get_recp_to_prof_map(struct ice_hw *hw)  		bitmap_zero(profile_to_recipe[i], ICE_MAX_NUM_RECIPES);  		bitmap_zero(r_bitmap, ICE_MAX_NUM_RECIPES); -		if (ice_aq_get_recipe_to_profile(hw, i, (u8 *)r_bitmap, NULL)) +		if (ice_aq_get_recipe_to_profile(hw, i, &recp_assoc, NULL))  			continue; +		bitmap_from_arr64(r_bitmap, &recp_assoc, ICE_MAX_NUM_RECIPES);  		bitmap_copy(profile_to_recipe[i], r_bitmap,  			    ICE_MAX_NUM_RECIPES);  		for_each_set_bit(j, r_bitmap, ICE_MAX_NUM_RECIPES) @@ -5390,22 +5392,24 @@ ice_add_adv_recipe(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,  	 */  	list_for_each_entry(fvit, &rm->fv_list, list_entry) {  		DECLARE_BITMAP(r_bitmap, ICE_MAX_NUM_RECIPES); +		u64 recp_assoc;  		u16 j;  		status = ice_aq_get_recipe_to_profile(hw, fvit->profile_id, -						      (u8 *)r_bitmap, NULL); +						      &recp_assoc, NULL);  		if (status)  			goto err_unroll; +		bitmap_from_arr64(r_bitmap, &recp_assoc, ICE_MAX_NUM_RECIPES);  		bitmap_or(r_bitmap, r_bitmap, rm->r_bitmap,  			  ICE_MAX_NUM_RECIPES);  		status = ice_acquire_change_lock(hw, ICE_RES_WRITE);  		if (status)  			goto err_unroll; +		bitmap_to_arr64(&recp_assoc, r_bitmap, ICE_MAX_NUM_RECIPES);  		status = ice_aq_map_recipe_to_profile(hw, fvit->profile_id, -						      (u8 *)r_bitmap, -						      NULL); +						      recp_assoc, NULL);  		ice_release_change_lock(hw);  		if (status)  |