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

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
...@@ -495,21 +495,59 @@ static void dr_ste_v1_set_rx_decap(u8 *hw_ste_p, u8 *s_action) ...@@ -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); 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, u8 *s_action,
u16 num_of_actions, u16 num_of_actions,
u32 re_write_index) u32 rewrite_index)
{ {
MLX5_SET(ste_single_action_modify_list_v1, s_action, action_id, MLX5_SET(ste_single_action_modify_list_v1, s_action, action_id,
DR_STE_V1_ACTION_ID_MODIFY_LIST); DR_STE_V1_ACTION_ID_MODIFY_LIST);
MLX5_SET(ste_single_action_modify_list_v1, s_action, num_of_modify_actions, MLX5_SET(ste_single_action_modify_list_v1, s_action, num_of_modify_actions,
num_of_actions); num_of_actions);
MLX5_SET(ste_single_action_modify_list_v1, s_action, modify_actions_ptr, 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); 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, static void dr_ste_v1_set_aso_flow_meter(u8 *d_action,
u32 object_id, u32 object_id,
u32 offset, u32 offset,
...@@ -614,6 +652,7 @@ void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn, ...@@ -614,6 +652,7 @@ void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn,
} }
dr_ste_v1_set_rewrite_actions(last_ste, action, dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->modify_actions, attr->modify_actions,
attr->modify_pat_idx,
attr->modify_index); attr->modify_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ; action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += 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, ...@@ -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]) { if (action_type_set[DR_ACTION_TYP_TNL_L3_TO_L2]) {
dr_ste_v1_set_rewrite_actions(last_ste, action, dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->decap_actions, attr->decap_actions,
attr->decap_pat_idx,
attr->decap_index); attr->decap_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ; action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += 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, ...@@ -799,6 +839,7 @@ void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn,
} }
dr_ste_v1_set_rewrite_actions(last_ste, action, dr_ste_v1_set_rewrite_actions(last_ste, action,
attr->modify_actions, attr->modify_actions,
attr->modify_pat_idx,
attr->modify_index); attr->modify_index);
action_sz -= DR_STE_ACTION_DOUBLE_SZ; action_sz -= DR_STE_ACTION_DOUBLE_SZ;
action += DR_STE_ACTION_DOUBLE_SZ; action += DR_STE_ACTION_DOUBLE_SZ;
......
...@@ -100,7 +100,7 @@ struct mlx5_ifc_ste_double_action_insert_with_ptr_v1_bits { ...@@ -100,7 +100,7 @@ struct mlx5_ifc_ste_double_action_insert_with_ptr_v1_bits {
u8 pointer[0x20]; 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 action_id[0x8];
u8 modify_actions_pattern_pointer[0x18]; u8 modify_actions_pattern_pointer[0x18];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment