From: Kishore Padmanabha <kishore.padmana...@broadcom.com>

The default egress rule should include buffer descriptor  action
record only if the VF representor is enabled.

Signed-off-by: Kishore Padmanabha <kishore.padmana...@broadcom.com>
Reviewed-by: Michael Baucom <michael.bau...@broadcom.com>
Signed-off-by: Somnath Kotur <somnath.ko...@broadcom.com>
---
 drivers/net/bnxt/tf_ulp/bnxt_ulp.c             | 13 +++++++++++++
 drivers/net/bnxt/tf_ulp/bnxt_ulp.h             |  9 +++++++++
 drivers/net/bnxt/tf_ulp/ulp_def_rules.c        | 11 ++++++++++-
 drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h |  3 ++-
 4 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c 
b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c
index c4ce003..8e44027 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 a133284..f9e5e2b 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 b01ad0b..4d4f7c4 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 a9295e0..fbeb314 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 {
-- 
2.7.4

Reply via email to