Skip to content

Commit

Permalink
mlx5: DR, Add definitions for new STE version 2
Browse files Browse the repository at this point in the history
ConnectX-7 steering supports a new SW format version.
Add the needed definitions for format version 2, and allow the existing
steering code to work on the new format version.

Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Signed-off-by: Alex Vesker <valex@nvidia.com>
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
  • Loading branch information
kliteyn authored and Yishai Hadas committed Feb 23, 2022
1 parent 8fccbdb commit 572bb1b
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 15 deletions.
2 changes: 1 addition & 1 deletion providers/mlx5/dr_action.c
Original file line number Diff line number Diff line change
Expand Up @@ -1168,7 +1168,7 @@ mlx5dv_dr_action_create_aso(struct mlx5dv_dr_domain *dmn,
struct mlx5dv_dr_action *action = NULL;

if (!dmn->info.supp_sw_steering ||
dmn->info.caps.sw_format_ver != MLX5_HW_CONNECTX_6DX) {
dmn->info.caps.sw_format_ver == MLX5_HW_CONNECTX_5) {
errno = EOPNOTSUPP;
return NULL;
}
Expand Down
26 changes: 17 additions & 9 deletions providers/mlx5/dr_domain.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,14 @@ static int dr_domain_query_fdb_caps(struct ibv_context *ctx,
return 0;
}

static bool dr_domain_caps_is_sw_owner_supported(bool sw_owner,
bool sw_owner_v2,
uint8_t sw_format_ver)
{
return sw_owner ||
(sw_owner_v2 && sw_format_ver <= MLX5_HW_CONNECTX_7);
}

static int dr_domain_caps_init(struct ibv_context *ctx,
struct mlx5dv_dr_domain *dmn)
{
Expand Down Expand Up @@ -279,9 +287,9 @@ static int dr_domain_caps_init(struct ibv_context *ctx,

switch (dmn->type) {
case MLX5DV_DR_DOMAIN_TYPE_NIC_RX:
if (!dmn->info.caps.rx_sw_owner &&
!(dmn->info.caps.rx_sw_owner_v2 &&
dmn->info.caps.sw_format_ver <= MLX5_HW_CONNECTX_6DX))
if (!dr_domain_caps_is_sw_owner_supported(dmn->info.caps.rx_sw_owner,
dmn->info.caps.rx_sw_owner_v2,
dmn->info.caps.sw_format_ver))
return 0;

dmn->info.supp_sw_steering = true;
Expand All @@ -290,9 +298,9 @@ static int dr_domain_caps_init(struct ibv_context *ctx,
dmn->info.rx.drop_icm_addr = dmn->info.caps.nic_rx_drop_address;
break;
case MLX5DV_DR_DOMAIN_TYPE_NIC_TX:
if (!dmn->info.caps.tx_sw_owner &&
!(dmn->info.caps.tx_sw_owner_v2 &&
dmn->info.caps.sw_format_ver <= MLX5_HW_CONNECTX_6DX))
if (!dr_domain_caps_is_sw_owner_supported(dmn->info.caps.tx_sw_owner,
dmn->info.caps.tx_sw_owner_v2,
dmn->info.caps.sw_format_ver))
return 0;

dmn->info.supp_sw_steering = true;
Expand All @@ -304,9 +312,9 @@ static int dr_domain_caps_init(struct ibv_context *ctx,
if (!dmn->info.caps.eswitch_manager)
return 0;

if (!dmn->info.caps.fdb_sw_owner &&
!(dmn->info.caps.fdb_sw_owner_v2 &&
dmn->info.caps.sw_format_ver <= MLX5_HW_CONNECTX_6DX))
if (!dr_domain_caps_is_sw_owner_supported(dmn->info.caps.fdb_sw_owner,
dmn->info.caps.fdb_sw_owner_v2,
dmn->info.caps.sw_format_ver))
return 0;

dmn->info.rx.type = DR_DOMAIN_NIC_TYPE_RX;
Expand Down
10 changes: 5 additions & 5 deletions providers/mlx5/dr_matcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ dr_mask_is_vxlan_gpe_set(struct dr_match_misc3 *misc3)
static bool
dr_matcher_supp_vxlan_gpe(struct dr_devx_caps *caps)
{
return (caps->sw_format_ver == MLX5_HW_CONNECTX_6DX) ||
return (caps->sw_format_ver >= MLX5_HW_CONNECTX_6DX) ||
(caps->flex_protocols & MLX5_FLEX_PARSER_VXLAN_GPE_ENABLED);
}

Expand Down Expand Up @@ -190,7 +190,7 @@ static bool dr_mask_is_tnl_geneve_tlv_opt(struct dr_match_param *mask,
static bool
dr_matcher_supp_tnl_geneve(struct dr_devx_caps *caps)
{
return (caps->sw_format_ver == MLX5_HW_CONNECTX_6DX) ||
return (caps->sw_format_ver >= MLX5_HW_CONNECTX_6DX) ||
(caps->flex_protocols & MLX5_FLEX_PARSER_GENEVE_ENABLED);
}

Expand Down Expand Up @@ -307,13 +307,13 @@ static bool dr_mask_is_tnl_gtpu_any(struct dr_match_param *mask,

static inline int dr_matcher_supp_icmp_v4(struct dr_devx_caps *caps)
{
return (caps->sw_format_ver == MLX5_HW_CONNECTX_6DX) ||
return (caps->sw_format_ver >= MLX5_HW_CONNECTX_6DX) ||
(caps->flex_protocols & MLX5_FLEX_PARSER_ICMP_V4_ENABLED);
}

static inline int dr_matcher_supp_icmp_v6(struct dr_devx_caps *caps)
{
return (caps->sw_format_ver == MLX5_HW_CONNECTX_6DX) ||
return (caps->sw_format_ver >= MLX5_HW_CONNECTX_6DX) ||
(caps->flex_protocols & MLX5_FLEX_PARSER_ICMP_V6_ENABLED);
}

Expand Down Expand Up @@ -704,7 +704,7 @@ static int dr_matcher_set_large_ste_builders(struct mlx5dv_dr_matcher *matcher,
struct mlx5dv_dr_domain *dmn = matcher->tbl->dmn;
int ret;

if (dmn->info.caps.sw_format_ver != MLX5_HW_CONNECTX_6DX ||
if (dmn->info.caps.sw_format_ver == MLX5_HW_CONNECTX_5 ||
!dmn->info.caps.definer_format_sup)
return ENOTSUP;

Expand Down
1 change: 1 addition & 0 deletions providers/mlx5/mlx5_ifc.h
Original file line number Diff line number Diff line change
Expand Up @@ -794,6 +794,7 @@ enum {
enum mlx5_ifc_steering_format_version {
MLX5_HW_CONNECTX_5 = 0x0,
MLX5_HW_CONNECTX_6DX = 0x1,
MLX5_HW_CONNECTX_7 = 0x2,
};

enum mlx5_ifc_ste_v1_modify_hdr_offset {
Expand Down

0 comments on commit 572bb1b

Please sign in to comment.