From: Kishore Padmanabha Date: Fri, 17 Jul 2020 14:14:48 +0000 (+0530) Subject: net/bnxt: modify default egress rule for VF representor X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=6eb4ccff3841b8f87ee82170c9cc601a655f246e;p=dpdk.git net/bnxt: modify default egress rule for VF representor The default egress rule should include buffer descriptor action record only if the VF representor is enabled. Signed-off-by: Kishore Padmanabha Signed-off-by: Somnath Kotur Reviewed-by: Mike Baucom Reviewed-by: Ajit Khaparde --- diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index c4ce003296..8e44027d48 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -361,6 +361,7 @@ ulp_ctx_init(struct bnxt *bp, bp->ulp_ctx->cfg_data = ulp_data; session->cfg_data = ulp_data; ulp_data->ref_cnt++; + ulp_data->ulp_flags |= BNXT_ULP_VF_REP_ENABLED; /* Open the ulp session. */ rc = ulp_ctx_session_open(bp, session); @@ -1009,3 +1010,15 @@ bnxt_ulp_cntxt_ptr2_fc_info_get(struct bnxt_ulp_context *ulp_ctx) return ulp_ctx->cfg_data->fc_info; } + +/* Function to get the ulp flags from the ulp context. */ +int32_t +bnxt_ulp_cntxt_ptr2_ulp_flags_get(struct bnxt_ulp_context *ulp_ctx, + uint32_t *flags) +{ + if (!ulp_ctx || !ulp_ctx->cfg_data) + return -1; + + *flags = ulp_ctx->cfg_data->ulp_flags; + return 0; +} diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h index a133284263..f9e5e2ba68 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h @@ -14,6 +14,10 @@ #include "ulp_template_db_enum.h" +/* defines for the ulp_flags */ +#define BNXT_ULP_VF_REP_ENABLED 0x1 +#define ULP_VF_REP_IS_ENABLED(flag) ((flag) & BNXT_ULP_VF_REP_ENABLED) + struct bnxt_ulp_data { uint32_t tbl_scope_id; struct bnxt_ulp_mark_tbl *mark_tbl; @@ -23,6 +27,7 @@ struct bnxt_ulp_data { void *mapper_data; struct bnxt_ulp_port_db *port_db; struct bnxt_ulp_fc_info *fc_info; + uint32_t ulp_flags; uint32_t port_to_app_flow_id; uint32_t app_to_port_flow_id; uint32_t tx_cfa_action; @@ -162,4 +167,8 @@ bnxt_ulp_cntxt_ptr2_fc_info_set(struct bnxt_ulp_context *ulp_ctx, struct bnxt_ulp_fc_info * bnxt_ulp_cntxt_ptr2_fc_info_get(struct bnxt_ulp_context *ulp_ctx); +int32_t +bnxt_ulp_cntxt_ptr2_ulp_flags_get(struct bnxt_ulp_context *ulp_ctx, + uint32_t *flags); + #endif /* _BNXT_ULP_H_ */ diff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c index b01ad0b68c..4d4f7c4eaf 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c +++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c @@ -309,7 +309,7 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev, struct ulp_rte_act_prop act_prop; struct ulp_rte_act_bitmap act = { 0 }; struct bnxt_ulp_context *ulp_ctx; - uint32_t type; + uint32_t type, ulp_flags = 0; int rc; memset(&mapper_params, 0, sizeof(mapper_params)); @@ -329,6 +329,15 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev, return -EINVAL; } + /* update the vf rep flag */ + if (bnxt_ulp_cntxt_ptr2_ulp_flags_get(ulp_ctx, &ulp_flags)) { + BNXT_TF_DBG(ERR, "Error in getting ULP context flags\n"); + return -EINVAL; + } + if (ULP_VF_REP_IS_ENABLED(ulp_flags)) + ULP_COMP_FLD_IDX_WR(&mapper_params, + BNXT_ULP_CF_IDX_VFR_MODE, 1); + type = param_list->type; while (type != BNXT_ULP_DF_PARAM_TYPE_LAST) { if (ulp_def_handler_tbl[type].vfr_func) { diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h index a9295e0066..fbeb314657 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h +++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h @@ -134,7 +134,8 @@ enum bnxt_ulp_cf_idx { BNXT_ULP_CF_IDX_VF_TO_VF = 38, BNXT_ULP_CF_IDX_L3_HDR_CNT = 39, BNXT_ULP_CF_IDX_L4_HDR_CNT = 40, - BNXT_ULP_CF_IDX_LAST = 41 + BNXT_ULP_CF_IDX_VFR_MODE = 41, + BNXT_ULP_CF_IDX_LAST = 42 }; enum bnxt_ulp_cond_opcode {