Parse priority attribute during flow creation.
This information will be used to give a hint to the FW to
place the flow rule accordingly in the CFA tables.

Reviewed-by: Rahul Gupta <rahul.gu...@broadcom.com>
Reviewed-by: Lance Richardson <lance.richard...@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khapa...@broadcom.com>
---
 drivers/net/bnxt/bnxt_filter.h |  1 +
 drivers/net/bnxt/bnxt_flow.c   | 25 +++++++++++--------------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h
index 52d3582ba..bcb9d6031 100644
--- a/drivers/net/bnxt/bnxt_filter.h
+++ b/drivers/net/bnxt/bnxt_filter.h
@@ -66,6 +66,7 @@ struct bnxt_filter_info {
        uint16_t                ip_protocol;
        uint16_t                ip_addr_type;
        uint16_t                ethertype;
+       uint32_t                priority;
 };
 
 struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp);
diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c
index 1328f25bc..2d107a892 100644
--- a/drivers/net/bnxt/bnxt_flow.c
+++ b/drivers/net/bnxt/bnxt_flow.c
@@ -225,6 +225,9 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp,
                                valid_flags |= inner ?
                                        BNXT_FLOW_L2_INNER_DST_VALID_FLAG :
                                        BNXT_FLOW_L2_DST_VALID_FLAG;
+                               filter->priority = attr->priority;
+                               PMD_DRV_LOG(DEBUG,
+                                           "Creating a priority flow\n");
                        }
 
                        if (rte_is_broadcast_ether_addr(&eth_mask->src)) {
@@ -710,15 +713,6 @@ bnxt_flow_parse_attr(const struct rte_flow_attr *attr,
                return -rte_errno;
        }
 
-       /* Not supported */
-       if (attr->priority) {
-               rte_flow_error_set(error,
-                                  EINVAL,
-                                  RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
-                                  attr,
-                                  "No support for priority.");
-               return -rte_errno;
-       }
        return 0;
 }
 
@@ -764,13 +758,16 @@ bnxt_get_l2_filter(struct bnxt *bp, struct 
bnxt_filter_info *nf,
                memcpy(filter1->l2_addr, nf->dst_macaddr, RTE_ETHER_ADDR_LEN);
        }
 
-       if (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG ||
-           nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG) {
+       if (nf->priority &&
+           (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG ||
+            nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG)) {
                /* Tell the FW where to place the filter in the table. */
-               filter1->pri_hint =
+               if (nf->priority > 65535) {
+                       filter1->pri_hint =
                        HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER;
-               /* This will place the filter in TCAM */
-               filter1->l2_filter_id_hint = (uint64_t)-1;
+                       /* This will place the filter in TCAM */
+                       filter1->l2_filter_id_hint = (uint64_t)-1;
+               }
        }
 
        filter1->enables = HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR |
-- 
2.20.1 (Apple Git-117)

Reply via email to