Commit 62e40c85 authored by Yevgeny Kliteynik's avatar Yevgeny Kliteynik Committed by Saeed Mahameed
Browse files

net/mlx5: DR, Apply new accelerated modify action and decapl3



If there is support for pattern/args, use the new accelerated modify
header action for modify header and decap L3 actions.
Otherwise fall back to the old modify-header implementation.

Signed-off-by: default avatarYevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: default avatarAlex Vesker <valex@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 0caebadd
Loading
Loading
Loading
Loading
+46 −5
Original line number Diff line number Diff line
@@ -495,21 +495,59 @@ static void dr_ste_v1_set_rx_decap(u8 *hw_ste_p, u8 *s_action)
	dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_rewrite_actions(u8 *hw_ste_p,
static void dr_ste_v1_set_accelerated_rewrite_actions(u8 *hw_ste_p,
						      u8 *d_action,
						      u16 num_of_actions,
						      u32 rewrite_pattern,
						      u32 rewrite_args)
{
	MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
		 action_id, DR_STE_V1_ACTION_ID_ACCELERATED_LIST);
	MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
		 modify_actions_pattern_pointer, rewrite_pattern);
	MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
		 number_of_modify_actions, num_of_actions);
	MLX5_SET(ste_double_action_accelerated_modify_action_list_v1, d_action,
		 modify_actions_argument_pointer, rewrite_args);

	dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_basic_rewrite_actions(u8 *hw_ste_p,
						u8 *s_action,
						u16 num_of_actions,
					  u32 re_write_index)
						u32 rewrite_index)
{
	MLX5_SET(ste_single_action_modify_list_v1, s_action, action_id,
		 DR_STE_V1_ACTION_ID_MODIFY_LIST);
	MLX5_SET(ste_single_action_modify_list_v1, s_action, num_of_modify_actions,
		 num_of_actions);
	MLX5_SET(ste_single_action_modify_list_v1, s_action, modify_actions_ptr,
		 re_write_index);
		 rewrite_index);

	dr_ste_v1_set_reparse(hw_ste_p);
}

static void dr_ste_v1_set_rewrite_actions(u8 *hw_ste_p,
					  u8 *action,
					  u16 num_of_actions,
					  u32 rewrite_pattern,
					  u32 rewrite_args)
{
	if (rewrite_pattern != MLX5DR_INVALID_PATTERN_INDEX)
		return dr_ste_v1_set_accelerated_rewrite_actions(hw_ste_p,
								 action,
								 num_of_actions,
								 rewrite_pattern,
								 rewrite_args);

	/* fall back to the code that doesn't support accelerated modify header */
	return dr_ste_v1_set_basic_rewrite_actions(hw_ste_p,
						   action,
						   num_of_actions,
						   rewrite_args);
}

static void dr_ste_v1_set_aso_flow_meter(u8 *d_action,
					 u32 object_id,
					 u32 offset,
@@ -614,6 +652,7 @@ void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn,
		}
		dr_ste_v1_set_rewrite_actions(last_ste, action,
					      attr->modify_actions,
					      attr->modify_pat_idx,
					      attr->modify_index);
		action_sz -= DR_STE_ACTION_DOUBLE_SZ;
		action += DR_STE_ACTION_DOUBLE_SZ;
@@ -744,6 +783,7 @@ void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
	if (action_type_set[DR_ACTION_TYP_TNL_L3_TO_L2]) {
		dr_ste_v1_set_rewrite_actions(last_ste, action,
					      attr->decap_actions,
					      attr->decap_pat_idx,
					      attr->decap_index);
		action_sz -= DR_STE_ACTION_DOUBLE_SZ;
		action += DR_STE_ACTION_DOUBLE_SZ;
@@ -799,6 +839,7 @@ void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
		}
		dr_ste_v1_set_rewrite_actions(last_ste, action,
					      attr->modify_actions,
					      attr->modify_pat_idx,
					      attr->modify_index);
		action_sz -= DR_STE_ACTION_DOUBLE_SZ;
		action += DR_STE_ACTION_DOUBLE_SZ;
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ struct mlx5_ifc_ste_double_action_insert_with_ptr_v1_bits {
	u8         pointer[0x20];
};

struct mlx5_ifc_ste_double_action_modify_action_list_v1_bits {
struct mlx5_ifc_ste_double_action_accelerated_modify_action_list_v1_bits {
	u8         action_id[0x8];
	u8         modify_actions_pattern_pointer[0x18];