diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
index 777a6badd9..ddf38ed931 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
@@ -93,6 +93,7 @@ bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
 	mapper_cparms->flow_id		= params->fid;
 	mapper_cparms->parent_flow	= params->parent_flow;
 	mapper_cparms->parent_fid	= params->parent_fid;
+	mapper_cparms->fld_bitmap	= &params->fld_bitmap;
 }
 
 /* Function to create the rte flow. */
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
index 4e9211a7ab..d84614fcd1 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
@@ -17,6 +17,7 @@
 #include "ulp_mapper.h"
 #include "ulp_flow_db.h"
 #include "tf_util.h"
+#include "ulp_template_db_tbl.h"
 
 static struct bnxt_ulp_glb_resource_info *
 ulp_mapper_glb_resource_info_list_get(uint32_t *num_entries)
@@ -190,6 +191,12 @@ ulp_mapper_glb_template_table_get(uint32_t *num_entries)
 	return ulp_glb_template_tbl;
 }
 
+static uint8_t *
+ulp_mapper_glb_field_tbl_get(uint32_t idx)
+{
+	return &ulp_glb_field_tbl[idx];
+}
+
 /*
  * Get the size of the action property for a given index.
  *
@@ -205,6 +212,40 @@ ulp_mapper_act_prop_size_get(uint32_t idx)
 	return ulp_act_prop_map_table[idx];
 }
 
+static struct bnxt_ulp_mapper_cond_info *
+ulp_mapper_tmpl_reject_list_get(struct bnxt_ulp_mapper_parms *mparms,
+				uint32_t tid,
+				uint32_t *num_tbls,
+				enum bnxt_ulp_cond_list_opc *opc)
+{
+	uint32_t idx;
+	const struct ulp_template_device_tbls *dev_tbls;
+
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	*num_tbls = dev_tbls->tmpl_list[tid].reject_info.cond_nums;
+	*opc = dev_tbls->tmpl_list[tid].reject_info.cond_list_opcode;
+	idx = dev_tbls->tmpl_list[tid].reject_info.cond_start_idx;
+
+	return &dev_tbls->cond_list[idx];
+}
+
+static struct bnxt_ulp_mapper_cond_info *
+ulp_mapper_tbl_execute_list_get(struct bnxt_ulp_mapper_parms *mparms,
+				struct bnxt_ulp_mapper_tbl_info *tbl,
+				uint32_t *num_tbls,
+				enum bnxt_ulp_cond_list_opc *opc)
+{
+	uint32_t idx;
+	const struct ulp_template_device_tbls *dev_tbls;
+
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	*num_tbls = tbl->execute_info.cond_nums;
+	*opc = tbl->execute_info.cond_list_opcode;
+	idx = tbl->execute_info.cond_start_idx;
+
+	return &dev_tbls->cond_list[idx];
+}
+
 /*
  * Get a list of classifier tables that implement the flow
  * Gets a device dependent list of tables that implement the class template id
@@ -2376,61 +2417,6 @@ ulp_mapper_glb_resource_info_init(struct bnxt_ulp_context *ulp_ctx,
 	return rc;
 }
 
-/*
- * Function to process the conditional opcode of the mapper table.
- * returns 1 to skip the table.
- * return 0 to continue processing the table.
- *
- * defaults to skip
- */
-static int32_t
-ulp_mapper_tbl_cond_opcode_process(struct bnxt_ulp_mapper_parms *parms,
-				   struct bnxt_ulp_mapper_tbl_info *tbl)
-{
-	int32_t rc = 1;
-
-	switch (tbl->cond_opcode) {
-	case BNXT_ULP_COND_OPCODE_NOP:
-		rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET:
-		if (tbl->cond_operand < BNXT_ULP_CF_IDX_LAST &&
-		    ULP_COMP_FLD_IDX_RD(parms, tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET:
-		if (ULP_BITMAP_ISSET(parms->act_bitmap->bits,
-				     tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_HDR_BIT_IS_SET:
-		if (ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
-				     tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET:
-		if (tbl->cond_operand < BNXT_ULP_CF_IDX_LAST &&
-		    !ULP_COMP_FLD_IDX_RD(parms, tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET:
-		if (!ULP_BITMAP_ISSET(parms->act_bitmap->bits,
-				      tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_HDR_BIT_NOT_SET:
-		if (!ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
-				      tbl->cond_operand))
-			rc = 0;
-		break;
-	default:
-		BNXT_TF_DBG(ERR,
-			    "Invalid arg in mapper tbl for cond opcode\n");
-		break;
-	}
-	return rc;
-}
-
 /*
  * Function to process the memtype opcode of the mapper table.
  * returns 1 to skip the table.
@@ -2467,27 +2453,251 @@ ulp_mapper_tbl_memtype_opcode_process(struct bnxt_ulp_mapper_parms *parms,
 	return rc;
 }
 
+/*
+ * Common conditional opcode process routine that is used for both the template
+ * rejection and table conditional execution.
+ */
+static int32_t
+ulp_mapper_cond_opc_process(struct bnxt_ulp_mapper_parms *parms,
+			    enum bnxt_ulp_cond_opc opc,
+			    uint32_t operand,
+			    int32_t *res)
+{
+	int32_t rc = 0;
+	uint8_t *bit;
+	uint32_t idx;
+	uint64_t regval;
+
+	switch (opc) {
+	case BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET:
+		if (operand < BNXT_ULP_CF_IDX_LAST) {
+			*res = ULP_COMP_FLD_IDX_RD(parms, operand);
+		} else {
+			BNXT_TF_DBG(ERR, "comp field out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET:
+		if (operand < BNXT_ULP_CF_IDX_LAST) {
+			*res = !ULP_COMP_FLD_IDX_RD(parms, operand);
+		} else {
+			BNXT_TF_DBG(ERR, "comp field out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET:
+		if (operand < BNXT_ULP_ACTION_BIT_LAST) {
+			*res = ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+						operand);
+		} else {
+			BNXT_TF_DBG(ERR, "action bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET:
+		if (operand < BNXT_ULP_ACTION_BIT_LAST) {
+			*res = !ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+					       operand);
+		} else {
+			BNXT_TF_DBG(ERR, "action bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_HDR_BIT_IS_SET:
+		if (operand < BNXT_ULP_HDR_BIT_LAST) {
+			*res = ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
+						operand);
+		} else {
+			BNXT_TF_DBG(ERR, "header bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_HDR_BIT_NOT_SET:
+		if (operand < BNXT_ULP_HDR_BIT_LAST) {
+			*res = !ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
+					       operand);
+		} else {
+			BNXT_TF_DBG(ERR, "header bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_FIELD_BIT_IS_SET:
+		idx = (parms->class_tid << BNXT_ULP_GLB_FIELD_TBL_SHIFT) |
+			operand;
+		bit = ulp_mapper_glb_field_tbl_get(idx);
+		if (!bit) {
+			BNXT_TF_DBG(ERR, "invalid ulp_glb_field_tbl idx %d\n",
+				    idx);
+			return -EINVAL;
+		}
+		*res = ULP_BITMAP_ISSET(parms->fld_bitmap->bits, (1 << *bit));
+		break;
+	case BNXT_ULP_COND_OPC_FIELD_BIT_NOT_SET:
+		idx = (parms->class_tid << BNXT_ULP_GLB_FIELD_TBL_SHIFT) |
+			operand;
+		bit = ulp_mapper_glb_field_tbl_get(idx);
+		if (!bit) {
+			BNXT_TF_DBG(ERR, "invalid ulp_glb_field_tbl idx %d\n",
+				    idx);
+			return -EINVAL;
+		}
+		*res = !ULP_BITMAP_ISSET(parms->fld_bitmap->bits, (1 << *bit));
+		break;
+	case BNXT_ULP_COND_OPC_REGFILE_IS_SET:
+		if (!ulp_regfile_read(parms->regfile, operand, &regval)) {
+			BNXT_TF_DBG(ERR, "regfile[%d] read oob\n", operand);
+			return -EINVAL;
+		}
+		*res = regval != 0;
+		break;
+	case BNXT_ULP_COND_OPC_REGFILE_NOT_SET:
+		if (!ulp_regfile_read(parms->regfile, operand, &regval)) {
+			BNXT_TF_DBG(ERR, "regfile[%d] read oob\n", operand);
+			return -EINVAL;
+		}
+		*res = regval == 0;
+		break;
+	default:
+		BNXT_TF_DBG(ERR, "Invalid conditional opcode %d\n", opc);
+		rc = -EINVAL;
+		break;
+	}
+	return (rc);
+}
+
+/*
+ * Processes a list of conditions and returns both a status and result of the
+ * list.  The status must be checked prior to verifying the result.
+ *
+ * returns 0 for success, negative on failure
+ * returns res = 1 for true, res = 0 for false.
+ */
+static int32_t
+ulp_mapper_cond_opc_list_process(struct bnxt_ulp_mapper_parms *parms,
+				 enum bnxt_ulp_cond_list_opc list_opc,
+				 struct bnxt_ulp_mapper_cond_info *list,
+				 uint32_t num,
+				 int32_t *res)
+{
+	uint32_t i;
+	int32_t rc = 0, trc;
+
+	switch (list_opc) {
+	case BNXT_ULP_COND_LIST_OPC_AND:
+		/* AND Defaults to true. */
+		*res = 1;
+		break;
+	case BNXT_ULP_COND_LIST_OPC_OR:
+		/* OR Defaults to false. */
+		*res = 0;
+		break;
+	case BNXT_ULP_COND_LIST_OPC_TRUE:
+		*res = 1;
+		return rc;
+	case BNXT_ULP_COND_LIST_OPC_FALSE:
+		*res = 0;
+		return rc;
+	default:
+		BNXT_TF_DBG(ERR, "Invalid conditional list opcode %d\n",
+			    list_opc);
+		return -EINVAL;
+	}
+
+	for (i = 0; i < num; i++) {
+		rc = ulp_mapper_cond_opc_process(parms,
+						 list[i].cond_opcode,
+						 list[i].cond_operand,
+						 &trc);
+		if (rc)
+			return rc;
+
+		if (list_opc == BNXT_ULP_COND_LIST_OPC_AND) {
+			/* early return if result is ever zero */
+			if (!trc) {
+				*res = trc;
+				return rc;
+			}
+		} else {
+			/* early return if result is ever non-zero */
+			if (trc) {
+				*res = trc;
+				return rc;
+			}
+		}
+	}
+
+	return rc;
+}
+
 static int32_t
 ulp_mapper_tbls_process(struct bnxt_ulp_mapper_parms *parms, uint32_t tid)
 {
+	struct bnxt_ulp_mapper_cond_info *cond_tbls = NULL;
+	enum bnxt_ulp_cond_list_opc cond_opc;
 	struct bnxt_ulp_mapper_tbl_info *tbls;
-	uint32_t num_tbls, i;
-	int32_t rc = -EINVAL;
+	struct bnxt_ulp_mapper_tbl_info *tbl;
+	uint32_t num_tbls, i, num_cond_tbls;
+	int32_t rc = -EINVAL, cond_rc = 0;
+
+	cond_tbls = ulp_mapper_tmpl_reject_list_get(parms, tid,
+						    &num_cond_tbls,
+						    &cond_opc);
+	/*
+	 * Process the reject list if exists, otherwise assume that the
+	 * template is allowed.
+	 */
+	if (cond_tbls && num_cond_tbls) {
+		rc = ulp_mapper_cond_opc_list_process(parms,
+						      cond_opc,
+						      cond_tbls,
+						      num_cond_tbls,
+						      &cond_rc);
+		if (rc)
+			return rc;
+
+		/* Reject the template if True */
+		if (cond_rc) {
+			BNXT_TF_DBG(ERR, "%s Template %d rejected.\n",
+				    (parms->tmpl_type ==
+				     BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
+				    "class" : "action", tid);
+			return -EINVAL;
+		}
+	}
 
 	tbls = ulp_mapper_tbl_list_get(parms, tid, &num_tbls);
 	if (!tbls || !num_tbls) {
 		BNXT_TF_DBG(ERR, "No %s tables for %d:%d\n",
-			    (parms->tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
+			    (parms->tmpl_type == BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
 			    "class" : "action", parms->dev_id, tid);
 		return -EINVAL;
 	}
 
 	for (i = 0; i < num_tbls; i++) {
-		struct bnxt_ulp_mapper_tbl_info *tbl = &tbls[i];
+		tbl = &tbls[i];
 
+		/* Handle the table level opcodes to determine if required. */
 		if (ulp_mapper_tbl_memtype_opcode_process(parms, tbl))
 			continue;
-		if (ulp_mapper_tbl_cond_opcode_process(parms, tbl))
+		cond_tbls = ulp_mapper_tbl_execute_list_get(parms, tbl,
+							    &num_cond_tbls,
+							    &cond_opc);
+		rc = ulp_mapper_cond_opc_list_process(parms, cond_opc,
+						      cond_tbls, num_cond_tbls,
+						      &cond_rc);
+		if (rc) {
+			BNXT_TF_DBG(ERR, "Failed to process cond opc list "
+				   "(%d)\n", rc);
+			return rc;
+		}
+		/* Skip the table if False */
+		if (!cond_rc)
 			continue;
 
 		switch (tbl->resource_func) {
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
index 8422f44026..8bc6cdbdd5 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
@@ -58,6 +58,7 @@ struct bnxt_ulp_mapper_parms {
 	struct ulp_rte_act_bitmap		*act_bitmap;
 	struct ulp_rte_hdr_bitmap		*hdr_bitmap;
 	struct ulp_rte_hdr_field		*hdr_field;
+	struct ulp_rte_field_bitmap		*fld_bitmap;
 	uint32_t				*comp_fld;
 	struct ulp_regfile			*regfile;
 	struct tf				*tfp;
@@ -79,6 +80,7 @@ struct bnxt_ulp_mapper_create_parms {
 	uint32_t			*comp_fld;
 	struct ulp_rte_act_bitmap	*act;
 	struct ulp_rte_act_prop		*act_prop;
+	struct ulp_rte_field_bitmap	*fld_bitmap;
 	uint32_t			class_tid;
 	uint32_t			act_tid;
 	uint16_t			func_id;
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 f16651a821..e4b8c56472 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
@@ -27,6 +27,7 @@
 #define BNXT_ULP_CACHE_TBL_IDENT_MAX_NUM 2
 #define BNXT_ULP_GLB_RESOURCE_TBL_MAX_SZ 8
 #define BNXT_ULP_GLB_TEMPLATE_TBL_MAX_SZ 1
+#define BNXT_ULP_GLB_FIELD_TBL_SHIFT 7
 
 enum bnxt_ulp_action_bit {
 	BNXT_ULP_ACTION_BIT_MARK             = 0x0000000000000001,
@@ -143,15 +144,26 @@ enum bnxt_ulp_cf_idx {
 	BNXT_ULP_CF_IDX_LAST = 46
 };
 
-enum bnxt_ulp_cond_opcode {
-	BNXT_ULP_COND_OPCODE_NOP = 0,
-	BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET = 1,
-	BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET = 2,
-	BNXT_ULP_COND_OPCODE_HDR_BIT_IS_SET = 3,
-	BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET = 4,
-	BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET = 5,
-	BNXT_ULP_COND_OPCODE_HDR_BIT_NOT_SET = 6,
-	BNXT_ULP_COND_OPCODE_LAST = 7
+enum bnxt_ulp_cond_list_opc {
+	BNXT_ULP_COND_LIST_OPC_TRUE = 0,
+	BNXT_ULP_COND_LIST_OPC_FALSE = 1,
+	BNXT_ULP_COND_LIST_OPC_OR = 2,
+	BNXT_ULP_COND_LIST_OPC_AND = 3,
+	BNXT_ULP_COND_LIST_OPC_LAST = 4
+};
+
+enum bnxt_ulp_cond_opc {
+	BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET = 0,
+	BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET = 1,
+	BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET = 2,
+	BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET = 3,
+	BNXT_ULP_COND_OPC_HDR_BIT_IS_SET = 4,
+	BNXT_ULP_COND_OPC_HDR_BIT_NOT_SET = 5,
+	BNXT_ULP_COND_OPC_FIELD_BIT_IS_SET = 6,
+	BNXT_ULP_COND_OPC_FIELD_BIT_NOT_SET = 7,
+	BNXT_ULP_COND_OPC_REGFILE_IS_SET = 8,
+	BNXT_ULP_COND_OPC_REGFILE_NOT_SET = 9,
+	BNXT_ULP_COND_OPC_LAST = 10
 };
 
 enum bnxt_ulp_critical_resource {
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
index b370da22f7..6ad6263183 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
@@ -47,7 +47,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -64,7 +64,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -81,7 +81,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -146,7 +146,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -195,7 +195,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -244,7 +244,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -261,7 +261,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV4_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -278,7 +278,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV6,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV6_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -342,7 +342,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -359,7 +359,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -376,7 +376,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -441,7 +441,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -459,7 +459,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_INT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -493,7 +493,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -511,7 +511,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
index a8f26e8c51..c11d1ad96d 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
@@ -292,7 +292,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	{ /* class_tid: 2, stingray, table: l2_cntxt_tcam_vfr_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -315,7 +315,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.key_start_idx = 27,
@@ -332,7 +332,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	{ /* class_tid: 2, stingray, table: l2_cntxt_tcam_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -1785,7 +1785,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
index 3a66d59b5d..4fe90d8bb9 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
@@ -98,6 +98,249 @@ uint32_t ulp_act_prop_map_table[] = {
 		BNXT_ULP_ACT_PROP_SZ_LAST
 };
 
+uint8_t ulp_glb_field_tbl[211] = {
+	[0] = 0,
+	[1] = 0,
+	[2] = 0,
+	[3] = 0,
+	[4] = 0,
+	[5] = 0,
+	[6] = 0,
+	[7] = 0,
+	[8] = 0,
+	[9] = 0,
+	[10] = 0,
+	[11] = 0,
+	[12] = 0,
+	[13] = 0,
+	[14] = 0,
+	[15] = 0,
+	[16] = 0,
+	[17] = 0,
+	[18] = 0,
+	[19] = 0,
+	[20] = 0,
+	[21] = 0,
+	[22] = 0,
+	[23] = 0,
+	[24] = 0,
+	[25] = 0,
+	[26] = 0,
+	[27] = 0,
+	[28] = 0,
+	[29] = 0,
+	[30] = 0,
+	[31] = 0,
+	[32] = 0,
+	[33] = 0,
+	[34] = 0,
+	[35] = 0,
+	[36] = 0,
+	[37] = 0,
+	[38] = 0,
+	[39] = 0,
+	[40] = 0,
+	[41] = 0,
+	[42] = 0,
+	[43] = 0,
+	[44] = 0,
+	[45] = 0,
+	[46] = 0,
+	[47] = 0,
+	[48] = 0,
+	[49] = 0,
+	[50] = 0,
+	[51] = 0,
+	[52] = 0,
+	[53] = 0,
+	[54] = 0,
+	[55] = 0,
+	[56] = 0,
+	[57] = 0,
+	[58] = 0,
+	[59] = 0,
+	[60] = 0,
+	[61] = 0,
+	[62] = 0,
+	[63] = 0,
+	[64] = 0,
+	[65] = 0,
+	[66] = 0,
+	[67] = 0,
+	[68] = 0,
+	[69] = 0,
+	[70] = 0,
+	[71] = 0,
+	[72] = 0,
+	[73] = 0,
+	[74] = 0,
+	[75] = 0,
+	[76] = 0,
+	[77] = 0,
+	[78] = 0,
+	[79] = 0,
+	[80] = 0,
+	[81] = 0,
+	[82] = 0,
+	[83] = 0,
+	[84] = 0,
+	[85] = 0,
+	[86] = 0,
+	[87] = 0,
+	[88] = 0,
+	[89] = 0,
+	[90] = 0,
+	[91] = 0,
+	[92] = 0,
+	[93] = 0,
+	[94] = 0,
+	[95] = 0,
+	[96] = 0,
+	[97] = 0,
+	[98] = 0,
+	[99] = 0,
+	[100] = 0,
+	[101] = 0,
+	[102] = 0,
+	[103] = 0,
+	[104] = 0,
+	[105] = 0,
+	[106] = 0,
+	[107] = 0,
+	[108] = 0,
+	[109] = 0,
+	[110] = 0,
+	[111] = 0,
+	[112] = 0,
+	[113] = 0,
+	[114] = 0,
+	[115] = 0,
+	[116] = 0,
+	[117] = 0,
+	[118] = 0,
+	[119] = 0,
+	[120] = 0,
+	[121] = 0,
+	[122] = 0,
+	[123] = 0,
+	[124] = 0,
+	[125] = 0,
+	[126] = 0,
+	[127] = 0,
+	/* svif.index */
+	[128] = 1,
+	/* o_eth.dmac */
+	[129] = 2,
+	[130] = 0,
+	/* o_eth.smac */
+	[131] = 3,
+	[132] = 0,
+	/* o_eth.type */
+	[133] = 4,
+	[134] = 0,
+	/* o_ipv4.ver */
+	[135] = 11,
+	[136] = 0,
+	/* o_ipv4.tos */
+	[137] = 12,
+	[138] = 0,
+	/* o_ipv4.len */
+	[139] = 13,
+	[140] = 0,
+	/* o_ipv4.frag_id */
+	[141] = 14,
+	[142] = 0,
+	/* o_ipv4.frag_off */
+	[143] = 15,
+	[144] = 0,
+	/* o_ipv4.ttl */
+	[145] = 16,
+	[146] = 0,
+	/* o_ipv4.proto_id */
+	[147] = 17,
+	[148] = 0,
+	/* o_ipv4.csum */
+	[149] = 18,
+	[150] = 0,
+	/* o_ipv4.src_addr */
+	[151] = 19,
+	[152] = 0,
+	/* o_ipv4.dst_addr */
+	[153] = 20,
+	[154] = 0,
+	[155] = 0,
+	[156] = 0,
+	[157] = 0,
+	[158] = 0,
+	[159] = 0,
+	[160] = 0,
+	[161] = 0,
+	[162] = 0,
+	[163] = 0,
+	[164] = 0,
+	[165] = 0,
+	[166] = 0,
+	[167] = 0,
+	[168] = 0,
+	[169] = 0,
+	[170] = 0,
+	[171] = 0,
+	[172] = 0,
+	[173] = 0,
+	[174] = 0,
+	/* o_tcp.src_port */
+	[175] = 21,
+	[176] = 0,
+	/* o_tcp.dst_port */
+	[177] = 22,
+	[178] = 0,
+	/* o_tcp.sent_seq */
+	[179] = 23,
+	[180] = 0,
+	/* o_tcp.recv_ack */
+	[181] = 24,
+	[182] = 0,
+	/* o_tcp.data_off */
+	[183] = 25,
+	[184] = 0,
+	/* o_tcp.tcp_flags */
+	[185] = 26,
+	[186] = 0,
+	/* o_tcp.rx_win */
+	[187] = 27,
+	[188] = 0,
+	/* o_tcp.csum */
+	[189] = 28,
+	[190] = 0,
+	/* o_tcp.urp */
+	[191] = 29,
+	[192] = 0,
+	[193] = 0,
+	[194] = 0,
+	[195] = 0,
+	[196] = 0,
+	[197] = 0,
+	[198] = 0,
+	[199] = 0,
+	[200] = 0,
+	/* oo_vlan.cfi_pri */
+	[201] = 5,
+	/* oi_vlan.cfi_pri */
+	[202] = 8,
+	[203] = 0,
+	[204] = 0,
+	/* oo_vlan.vid */
+	[205] = 6,
+	/* oi_vlan.vid */
+	[206] = 9,
+	[207] = 0,
+	[208] = 0,
+	/* oo_vlan.type */
+	[209] = 7,
+	/* oi_vlan.type */
+	[210] = 10
+};
+
 /*
  * This structure has to be indexed based on the rte_flow_action_type that is
  * part of DPDK. The below array is list of parsing functions for each of the
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
index 684e93f557..a656f3da52 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
@@ -45,4 +45,6 @@ extern struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[];
 
 extern struct
 bnxt_ulp_mapper_result_field_info ulp_stingray_act_result_field_list[];
+
+extern uint8_t ulp_glb_field_tbl[];
 #endif
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
index 26eba56516..be6149b9ce 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
@@ -47,7 +47,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -64,7 +64,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -81,7 +81,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -145,7 +145,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -194,7 +194,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -243,7 +243,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -260,7 +260,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV4_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -277,7 +277,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV6,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV6_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -341,7 +341,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -358,7 +358,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -375,7 +375,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -440,7 +440,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -458,7 +458,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_INT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -492,7 +492,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -510,7 +510,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
index 89f1bef75f..f248d33203 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
@@ -292,7 +292,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	{ /* class_tid: 2, wh_plus, table: l2_cntxt_tcam_vfr_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -315,7 +315,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.key_start_idx = 27,
@@ -332,7 +332,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	{ /* class_tid: 2, wh_plus, table: l2_cntxt_tcam_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -1785,7 +1785,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
index 167116a2f4..9a15968ea8 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
@@ -149,12 +149,24 @@ extern	uint16_t ulp_act_sig_tbl[];
 extern struct bnxt_ulp_act_match_info ulp_act_match_list[];
 
 /* Device Specific Tables for mapper */
+struct bnxt_ulp_mapper_cond_info {
+	enum bnxt_ulp_cond_opc cond_opcode;
+	uint32_t cond_operand;
+};
+
+struct bnxt_ulp_mapper_cond_list_info {
+	enum bnxt_ulp_cond_list_opc cond_list_opcode;
+	uint32_t cond_start_idx;
+	uint32_t cond_nums;
+};
+
 struct ulp_template_device_tbls {
 	struct bnxt_ulp_mapper_tbl_list_info *tmpl_list;
 	struct bnxt_ulp_mapper_tbl_info *tbl_list;
 	struct bnxt_ulp_mapper_key_field_info *key_field_list;
 	struct bnxt_ulp_mapper_result_field_info *result_field_list;
 	struct bnxt_ulp_mapper_ident_info *ident_list;
+	struct bnxt_ulp_mapper_cond_info *cond_list;
 };
 
 /* Device specific parameters */
@@ -183,14 +195,16 @@ struct bnxt_ulp_mapper_tbl_list_info {
 	uint32_t		device_name;
 	uint32_t		start_tbl_idx;
 	uint32_t		num_tbls;
+	struct bnxt_ulp_mapper_cond_list_info reject_info;
 };
 
 struct bnxt_ulp_mapper_tbl_info {
 	enum bnxt_ulp_resource_func	resource_func;
 	uint32_t			resource_type; /* TF_ enum type */
 	enum bnxt_ulp_resource_sub_type	resource_sub_type;
-	enum bnxt_ulp_cond_opcode	cond_opcode;
-	uint32_t			cond_operand;
+	struct bnxt_ulp_mapper_cond_list_info execute_info;
+	enum bnxt_ulp_cond_opc cond_opcode;
+	uint32_t cond_operand;
 	enum bnxt_ulp_mem_type_opcode	mem_type_opcode;
 	uint8_t				direction;
 	uint32_t			priority;
