get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/94699/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 94699,
    "url": "https://patches.dpdk.org/api/patches/94699/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210623044702.4240-4-ndabilpuram@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210623044702.4240-4-ndabilpuram@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210623044702.4240-4-ndabilpuram@marvell.com",
    "date": "2021-06-23T04:46:03",
    "name": "[v4,03/62] common/cnxk: add support to dump flow entries",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "ff225ad01ad33a3c0028803a755247ab258c9952",
    "submitter": {
        "id": 1202,
        "url": "https://patches.dpdk.org/api/people/1202/?format=api",
        "name": "Nithin Dabilpuram",
        "email": "ndabilpuram@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "https://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210623044702.4240-4-ndabilpuram@marvell.com/mbox/",
    "series": [
        {
            "id": 17449,
            "url": "https://patches.dpdk.org/api/series/17449/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17449",
            "date": "2021-06-23T04:46:00",
            "name": "Marvell CNXK Ethdev Driver",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/17449/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/94699/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/94699/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A2D81A0C41;\n\tWed, 23 Jun 2021 06:47:44 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 7FB7140E25;\n\tWed, 23 Jun 2021 06:47:31 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 11F8940E5A\n for <dev@dpdk.org>; Wed, 23 Jun 2021 06:47:29 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id\n 15N4k6fJ025518 for <dev@dpdk.org>; Tue, 22 Jun 2021 21:47:29 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com with ESMTP id 39bptj1gh2-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n for <dev@dpdk.org>; Tue, 22 Jun 2021 21:47:28 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Tue, 22 Jun 2021 21:47:26 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Tue, 22 Jun 2021 21:47:26 -0700",
            "from hyd1588t430.marvell.com (unknown [10.29.52.204])\n by maili.marvell.com (Postfix) with ESMTP id 4225D5B6936;\n Tue, 22 Jun 2021 21:47:24 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-type; s=pfpt0220; bh=65976ICBGmOzr9F+ACUr2I72GI6OG8VPORAbQlO8mYM=;\n b=Qm47Jb0Vni2pWc6iBENXFmdnqSelQw5TwZZq9v7qaI6LZT9de7QfABk3vp5qTJMQ9JU3\n +Up6toMFSNBUiWEd0zGZiEKu51O6y+07C2vP8xaFVElCxafa4H91KFh7feI36VV101kZ\n pVOiYwPsUevx2DvKlYijAycLKE3IzhrhsFUTlHcEyyfkNB7WnODYM14BjUzoPQe/xrIe\n UKDPvSemYDddq4OinS+W5D9biWSQQkauDbRXnqSnuIe1vAlS/PnoLjD2tDAxGiuS4BFz\n 6o+7u9WbWJmJ6gQAxivm04OoT/oBW/4zZ7ekmQ7GN8OwXNpoMlL00CPgX2Q3IwjM7ked kw==",
        "From": "Nithin Dabilpuram <ndabilpuram@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<jerinj@marvell.com>, <skori@marvell.com>, <skoteshwar@marvell.com>,\n <pbhagavatula@marvell.com>, <kirankumark@marvell.com>,\n <psatheesh@marvell.com>, <asekhar@marvell.com>, <hkalra@marvell.com>",
        "Date": "Wed, 23 Jun 2021 10:16:03 +0530",
        "Message-ID": "<20210623044702.4240-4-ndabilpuram@marvell.com>",
        "X-Mailer": "git-send-email 2.8.4",
        "In-Reply-To": "<20210623044702.4240-1-ndabilpuram@marvell.com>",
        "References": "<20210306153404.10781-1-ndabilpuram@marvell.com>\n <20210623044702.4240-1-ndabilpuram@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "fUs2cd7QXM82iLVs3pcSc5n6kgvzcUpn",
        "X-Proofpoint-GUID": "fUs2cd7QXM82iLVs3pcSc5n6kgvzcUpn",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790\n definitions=2021-06-23_01:2021-06-22,\n 2021-06-23 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v4 03/62] common/cnxk: add support to dump flow\n entries",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Satheesh Paul <psatheesh@marvell.com>\n\nAdd NPC support API to dump created flow entries.\n\nSigned-off-by: Satheesh Paul <psatheesh@marvell.com>\n---\n drivers/common/cnxk/hw/npc.h            |   2 +\n drivers/common/cnxk/meson.build         |   1 +\n drivers/common/cnxk/roc_npc.c           |  20 ++\n drivers/common/cnxk/roc_npc.h           |  12 +-\n drivers/common/cnxk/roc_npc_mcam_dump.c | 611 ++++++++++++++++++++++++++++++++\n drivers/common/cnxk/roc_npc_priv.h      |   2 +-\n drivers/common/cnxk/roc_npc_utils.c     |   4 +\n drivers/common/cnxk/version.map         |   2 +\n 8 files changed, 652 insertions(+), 2 deletions(-)\n create mode 100644 drivers/common/cnxk/roc_npc_mcam_dump.c",
    "diff": "diff --git a/drivers/common/cnxk/hw/npc.h b/drivers/common/cnxk/hw/npc.h\nindex e0f06bf..68c5037 100644\n--- a/drivers/common/cnxk/hw/npc.h\n+++ b/drivers/common/cnxk/hw/npc.h\n@@ -193,6 +193,7 @@ enum npc_kpu_lb_ltype {\n \tNPC_LT_LB_EXDSA,\n \tNPC_LT_LB_EXDSA_VLAN,\n \tNPC_LT_LB_FDSA,\n+\tNPC_LT_LB_VLAN_EXDSA,\n \tNPC_LT_LB_CUSTOM0 = 0xE,\n \tNPC_LT_LB_CUSTOM1 = 0xF,\n };\n@@ -208,6 +209,7 @@ enum npc_kpu_lc_ltype {\n \tNPC_LT_LC_MPLS,\n \tNPC_LT_LC_NSH,\n \tNPC_LT_LC_FCOE,\n+\tNPC_LT_LC_NGIO,\n \tNPC_LT_LC_CUSTOM0 = 0xE,\n \tNPC_LT_LC_CUSTOM1 = 0xF,\n };\ndiff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build\nindex 178bce7..e7ab79f 100644\n--- a/drivers/common/cnxk/meson.build\n+++ b/drivers/common/cnxk/meson.build\n@@ -37,6 +37,7 @@ sources = files(\n         'roc_npa_irq.c',\n         'roc_npc.c',\n         'roc_npc_mcam.c',\n+        'roc_npc_mcam_dump.c',\n         'roc_npc_parse.c',\n         'roc_npc_utils.c',\n         'roc_platform.c',\ndiff --git a/drivers/common/cnxk/roc_npc.c b/drivers/common/cnxk/roc_npc.c\nindex abaef77..81c7fd9 100644\n--- a/drivers/common/cnxk/roc_npc.c\n+++ b/drivers/common/cnxk/roc_npc.c\n@@ -870,3 +870,23 @@ roc_npc_flow_destroy(struct roc_npc *roc_npc, struct roc_npc_flow *flow)\n \tplt_free(flow);\n \treturn 0;\n }\n+\n+void\n+roc_npc_flow_dump(FILE *file, struct roc_npc *roc_npc)\n+{\n+\tstruct npc *npc = roc_npc_to_npc_priv(roc_npc);\n+\tstruct roc_npc_flow *flow_iter;\n+\tstruct npc_flow_list *list;\n+\tuint32_t max_prio, i;\n+\n+\tmax_prio = npc->flow_max_priority;\n+\n+\tfor (i = 0; i < max_prio; i++) {\n+\t\tlist = &npc->flow_list[i];\n+\n+\t\t/* List in ascending order of mcam entries */\n+\t\tTAILQ_FOREACH(flow_iter, list, next) {\n+\t\t\troc_npc_flow_mcam_dump(file, roc_npc, flow_iter);\n+\t\t}\n+\t}\n+}\ndiff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.h\nindex 223c4ba..115bcd5 100644\n--- a/drivers/common/cnxk/roc_npc.h\n+++ b/drivers/common/cnxk/roc_npc.h\n@@ -90,6 +90,11 @@ struct roc_npc_attr {\n \tuint32_t reserved : 30; /**< Reserved, must be zero. */\n };\n \n+struct roc_npc_flow_dump_data {\n+\tuint8_t lid;\n+\tuint16_t ltype;\n+};\n+\n struct roc_npc_flow {\n \tuint8_t nix_intf;\n \tuint8_t enable;\n@@ -102,6 +107,9 @@ struct roc_npc_flow {\n \tuint64_t mcam_mask[ROC_NPC_MAX_MCAM_WIDTH_DWORDS];\n \tuint64_t npc_action;\n \tuint64_t vtag_action;\n+#define ROC_NPC_MAX_FLOW_PATTERNS 32\n+\tstruct roc_npc_flow_dump_data dump_data[ROC_NPC_MAX_FLOW_PATTERNS];\n+\tuint16_t num_patterns;\n \n \tTAILQ_ENTRY(roc_npc_flow) next;\n };\n@@ -185,5 +193,7 @@ int __roc_api roc_npc_mcam_clear_counter(struct roc_npc *roc_npc,\n \t\t\t\t\t uint32_t ctr_id);\n \n int __roc_api roc_npc_mcam_free_all_resources(struct roc_npc *roc_npc);\n-\n+void __roc_api roc_npc_flow_dump(FILE *file, struct roc_npc *roc_npc);\n+void __roc_api roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,\n+\t\t\t\t      struct roc_npc_flow *mcam);\n #endif /* _ROC_NPC_H_ */\ndiff --git a/drivers/common/cnxk/roc_npc_mcam_dump.c b/drivers/common/cnxk/roc_npc_mcam_dump.c\nnew file mode 100644\nindex 0000000..19b4901\n--- /dev/null\n+++ b/drivers/common/cnxk/roc_npc_mcam_dump.c\n@@ -0,0 +1,611 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(C) 2021 Marvell.\n+ */\n+\n+#include \"roc_api.h\"\n+#include \"roc_priv.h\"\n+\n+#define NPC_MAX_FIELD_NAME_SIZE\t   80\n+#define NPC_RX_ACTIONOP_MASK\t   GENMASK(3, 0)\n+#define NPC_RX_ACTION_PFFUNC_MASK  GENMASK(19, 4)\n+#define NPC_RX_ACTION_INDEX_MASK   GENMASK(39, 20)\n+#define NPC_RX_ACTION_MATCH_MASK   GENMASK(55, 40)\n+#define NPC_RX_ACTION_FLOWKEY_MASK GENMASK(60, 56)\n+\n+#define NPC_TX_ACTION_INDEX_MASK GENMASK(31, 12)\n+#define NPC_TX_ACTION_MATCH_MASK GENMASK(47, 32)\n+\n+#define NIX_RX_VTAGACT_VTAG0_RELPTR_MASK GENMASK(7, 0)\n+#define NIX_RX_VTAGACT_VTAG0_LID_MASK\t GENMASK(10, 8)\n+#define NIX_RX_VTAGACT_VTAG0_TYPE_MASK\t GENMASK(14, 12)\n+#define NIX_RX_VTAGACT_VTAG0_VALID_MASK\t BIT_ULL(15)\n+\n+#define NIX_RX_VTAGACT_VTAG1_RELPTR_MASK GENMASK(39, 32)\n+#define NIX_RX_VTAGACT_VTAG1_LID_MASK\t GENMASK(42, 40)\n+#define NIX_RX_VTAGACT_VTAG1_TYPE_MASK\t GENMASK(46, 44)\n+#define NIX_RX_VTAGACT_VTAG1_VALID_MASK\t BIT_ULL(47)\n+\n+#define NIX_TX_VTAGACT_VTAG0_RELPTR_MASK GENMASK(7, 0)\n+#define NIX_TX_VTAGACT_VTAG0_LID_MASK\t GENMASK(10, 8)\n+#define NIX_TX_VTAGACT_VTAG0_OP_MASK\t GENMASK(13, 12)\n+#define NIX_TX_VTAGACT_VTAG0_DEF_MASK\t GENMASK(25, 16)\n+\n+#define NIX_TX_VTAGACT_VTAG1_RELPTR_MASK GENMASK(39, 32)\n+#define NIX_TX_VTAGACT_VTAG1_LID_MASK\t GENMASK(42, 40)\n+#define NIX_TX_VTAGACT_VTAG1_OP_MASK\t GENMASK(45, 44)\n+#define NIX_TX_VTAGACT_VTAG1_DEF_MASK\t GENMASK(57, 48)\n+\n+struct npc_rx_parse_nibble_s {\n+\tuint16_t chan : 3;\n+\tuint16_t errlev : 1;\n+\tuint16_t errcode : 2;\n+\tuint16_t l2l3bm : 1;\n+\tuint16_t laflags : 2;\n+\tuint16_t latype : 1;\n+\tuint16_t lbflags : 2;\n+\tuint16_t lbtype : 1;\n+\tuint16_t lcflags : 2;\n+\tuint16_t lctype : 1;\n+\tuint16_t ldflags : 2;\n+\tuint16_t ldtype : 1;\n+\tuint16_t leflags : 2;\n+\tuint16_t letype : 1;\n+\tuint16_t lfflags : 2;\n+\tuint16_t lftype : 1;\n+\tuint16_t lgflags : 2;\n+\tuint16_t lgtype : 1;\n+\tuint16_t lhflags : 2;\n+\tuint16_t lhtype : 1;\n+} __plt_packed;\n+\n+static const char *const intf_str[] = {\n+\t\"NIX-RX\",\n+\t\"NIX-TX\",\n+};\n+\n+static const char *const ltype_str[NPC_MAX_LID][NPC_MAX_LT] = {\n+\t[NPC_LID_LA][0] = \"NONE\",\n+\t[NPC_LID_LA][NPC_LT_LA_ETHER] = \"LA_ETHER\",\n+\t[NPC_LID_LA][NPC_LT_LA_IH_NIX_ETHER] = \"LA_IH_NIX_ETHER\",\n+\t[NPC_LID_LA][NPC_LT_LA_HIGIG2_ETHER] = \"LA_HIGIG2_ETHER\",\n+\t[NPC_LID_LA][NPC_LT_LA_IH_NIX_HIGIG2_ETHER] = \"LA_IH_NIX_HIGIG2_ETHER\",\n+\t[NPC_LID_LB][0] = \"NONE\",\n+\t[NPC_LID_LB][NPC_LT_LB_CTAG] = \"LB_CTAG\",\n+\t[NPC_LID_LB][NPC_LT_LB_STAG_QINQ] = \"LB_STAG_QINQ\",\n+\t[NPC_LID_LB][NPC_LT_LB_ETAG] = \"LB_ETAG\",\n+\t[NPC_LID_LB][NPC_LT_LB_EXDSA] = \"LB_EXDSA\",\n+\t[NPC_LID_LB][NPC_LT_LB_VLAN_EXDSA] = \"LB_VLAN_EXDSA\",\n+\t[NPC_LID_LC][0] = \"NONE\",\n+\t[NPC_LID_LC][NPC_LT_LC_IP] = \"LC_IP\",\n+\t[NPC_LID_LC][NPC_LT_LC_IP6] = \"LC_IP6\",\n+\t[NPC_LID_LC][NPC_LT_LC_ARP] = \"LC_ARP\",\n+\t[NPC_LID_LC][NPC_LT_LC_IP6_EXT] = \"LC_IP6_EXT\",\n+\t[NPC_LID_LC][NPC_LT_LC_NGIO] = \"LC_NGIO\",\n+\t[NPC_LID_LD][0] = \"NONE\",\n+\t[NPC_LID_LD][NPC_LT_LD_ICMP] = \"LD_ICMP\",\n+\t[NPC_LID_LD][NPC_LT_LD_ICMP6] = \"LD_ICMP6\",\n+\t[NPC_LID_LD][NPC_LT_LD_UDP] = \"LD_UDP\",\n+\t[NPC_LID_LD][NPC_LT_LD_TCP] = \"LD_TCP\",\n+\t[NPC_LID_LD][NPC_LT_LD_SCTP] = \"LD_SCTP\",\n+\t[NPC_LID_LD][NPC_LT_LD_GRE] = \"LD_GRE\",\n+\t[NPC_LID_LD][NPC_LT_LD_NVGRE] = \"LD_NVGRE\",\n+\t[NPC_LID_LE][0] = \"NONE\",\n+\t[NPC_LID_LE][NPC_LT_LE_VXLAN] = \"LE_VXLAN\",\n+\t[NPC_LID_LE][NPC_LT_LE_ESP] = \"LE_ESP\",\n+\t[NPC_LID_LE][NPC_LT_LE_GTPC] = \"LE_GTPC\",\n+\t[NPC_LID_LE][NPC_LT_LE_GTPU] = \"LE_GTPU\",\n+\t[NPC_LID_LE][NPC_LT_LE_GENEVE] = \"LE_GENEVE\",\n+\t[NPC_LID_LE][NPC_LT_LE_VXLANGPE] = \"LE_VXLANGPE\",\n+\t[NPC_LID_LF][0] = \"NONE\",\n+\t[NPC_LID_LF][NPC_LT_LF_TU_ETHER] = \"LF_TU_ETHER\",\n+\t[NPC_LID_LG][0] = \"NONE\",\n+\t[NPC_LID_LG][NPC_LT_LG_TU_IP] = \"LG_TU_IP\",\n+\t[NPC_LID_LG][NPC_LT_LG_TU_IP6] = \"LG_TU_IP6\",\n+\t[NPC_LID_LH][0] = \"NONE\",\n+\t[NPC_LID_LH][NPC_LT_LH_TU_UDP] = \"LH_TU_UDP\",\n+\t[NPC_LID_LH][NPC_LT_LH_TU_TCP] = \"LH_TU_TCP\",\n+\t[NPC_LID_LH][NPC_LT_LH_TU_SCTP] = \"LH_TU_SCTP\",\n+\t[NPC_LID_LH][NPC_LT_LH_TU_ESP] = \"LH_TU_ESP\",\n+};\n+\n+static uint16_t\n+npc_get_nibbles(struct roc_npc_flow *flow, uint16_t size, uint32_t bit_offset)\n+{\n+\tuint32_t byte_index, noffset;\n+\tuint16_t data, mask;\n+\tuint8_t *bytes;\n+\n+\tbytes = (uint8_t *)flow->mcam_data;\n+\tmask = (1ULL << (size * 4)) - 1;\n+\tbyte_index = bit_offset / 8;\n+\tnoffset = bit_offset % 8;\n+\tdata = *(unaligned_uint16_t *)&bytes[byte_index];\n+\tdata >>= noffset;\n+\tdata &= mask;\n+\n+\treturn data;\n+}\n+\n+static void\n+npc_flow_print_parse_nibbles(FILE *file, struct roc_npc_flow *flow,\n+\t\t\t     uint64_t parse_nibbles)\n+{\n+\tstruct npc_rx_parse_nibble_s *rx_parse;\n+\tuint32_t data, offset = 0;\n+\n+\trx_parse = (struct npc_rx_parse_nibble_s *)&parse_nibbles;\n+\n+\tif (rx_parse->chan) {\n+\t\tdata = npc_get_nibbles(flow, 3, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_CHAN:%#03X\\n\", data);\n+\t\toffset += 12;\n+\t}\n+\n+\tif (rx_parse->errlev) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_ERRLEV:%#X\\n\", data);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->errcode) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_ERRCODE:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->l2l3bm) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_L2L3_BCAST:%#X\\n\", data);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->latype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LA_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LA][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->laflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LA_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->lbtype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LB_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LB][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->lbflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LB_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->lctype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LC_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LC][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->lcflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LC_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->ldtype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LD_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LD][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->ldflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LD_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->letype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LE_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LE][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->leflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LE_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->lftype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LF_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LF][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->lfflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LF_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->lgtype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LG_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LG][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->lgflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LG_FLAGS:%#02X\\n\", data);\n+\t\toffset += 8;\n+\t}\n+\n+\tif (rx_parse->lhtype) {\n+\t\tdata = npc_get_nibbles(flow, 1, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LH_LTYPE:%s\\n\",\n+\t\t\tltype_str[NPC_LID_LH][data]);\n+\t\toffset += 4;\n+\t}\n+\n+\tif (rx_parse->lhflags) {\n+\t\tdata = npc_get_nibbles(flow, 2, offset);\n+\t\tfprintf(file, \"\\tNPC_PARSE_NIBBLE_LH_FLAGS:%#02X\\n\", data);\n+\t}\n+}\n+\n+static void\n+npc_flow_print_xtractinfo(FILE *file, struct npc_xtract_info *lfinfo,\n+\t\t\t  struct roc_npc_flow *flow, int lid, int lt)\n+{\n+\tuint8_t *datastart, *maskstart;\n+\tint i;\n+\n+\tdatastart = (uint8_t *)&flow->mcam_data + lfinfo->key_off;\n+\tmaskstart = (uint8_t *)&flow->mcam_mask + lfinfo->key_off;\n+\n+\tfprintf(file, \"\\t%s, hdr offset:%#X, len:%#X, key offset:%#X, \",\n+\t\tltype_str[lid][lt], lfinfo->hdr_off, lfinfo->len,\n+\t\tlfinfo->key_off);\n+\n+\tfprintf(file, \"Data:0X\");\n+\tfor (i = lfinfo->len - 1; i >= 0; i--)\n+\t\tfprintf(file, \"%02X\", datastart[i]);\n+\n+\tfprintf(file, \", Mask:0X\");\n+\n+\tfor (i = lfinfo->len - 1; i >= 0; i--)\n+\t\tfprintf(file, \"%02X\", maskstart[i]);\n+\n+\tfprintf(file, \"\\n\");\n+}\n+\n+static void\n+npc_flow_print_item(FILE *file, struct npc *npc, struct npc_xtract_info *xinfo,\n+\t\t    struct roc_npc_flow *flow, int intf, int lid, int lt,\n+\t\t    int ld)\n+{\n+\tstruct npc_xtract_info *lflags_info;\n+\tint i, lf_cfg = 0;\n+\n+\tnpc_flow_print_xtractinfo(file, xinfo, flow, lid, lt);\n+\n+\tif (xinfo->flags_enable) {\n+\t\tlf_cfg = npc->prx_lfcfg[ld].i;\n+\n+\t\tif (lf_cfg != lid)\n+\t\t\treturn;\n+\n+\t\tfor (i = 0; i < NPC_MAX_LFL; i++) {\n+\t\t\tlflags_info = npc->prx_fxcfg[intf][ld][i].xtract;\n+\n+\t\t\tnpc_flow_print_xtractinfo(file, lflags_info, flow, lid,\n+\t\t\t\t\t\t  lt);\n+\t\t}\n+\t}\n+}\n+\n+static void\n+npc_flow_dump_patterns(FILE *file, struct npc *npc, struct roc_npc_flow *flow)\n+{\n+\tstruct npc_lid_lt_xtract_info *lt_xinfo;\n+\tstruct npc_xtract_info *xinfo;\n+\tuint32_t intf, lid, ld, i;\n+\tuint64_t parse_nibbles;\n+\tuint16_t ltype;\n+\n+\tintf = flow->nix_intf;\n+\tparse_nibbles = npc->keyx_supp_nmask[intf];\n+\tnpc_flow_print_parse_nibbles(file, flow, parse_nibbles);\n+\n+\tfor (i = 0; i < flow->num_patterns; i++) {\n+\t\tlid = flow->dump_data[i].lid;\n+\t\tltype = flow->dump_data[i].ltype;\n+\t\tlt_xinfo = &npc->prx_dxcfg[intf][lid][ltype];\n+\n+\t\tfor (ld = 0; ld < NPC_MAX_LD; ld++) {\n+\t\t\txinfo = &lt_xinfo->xtract[ld];\n+\t\t\tif (!xinfo->enable)\n+\t\t\t\tcontinue;\n+\t\t\tnpc_flow_print_item(file, npc, xinfo, flow, intf, lid,\n+\t\t\t\t\t    ltype, ld);\n+\t\t}\n+\t}\n+}\n+\n+static void\n+npc_flow_dump_tx_action(FILE *file, uint64_t npc_action)\n+{\n+\tchar index_name[NPC_MAX_FIELD_NAME_SIZE] = \"Index:\";\n+\tuint32_t tx_op, index, match_id;\n+\n+\ttx_op = npc_action & NPC_RX_ACTIONOP_MASK;\n+\n+\tfprintf(file, \"\\tActionOp:\");\n+\n+\tswitch (tx_op) {\n+\tcase NIX_TX_ACTIONOP_DROP:\n+\t\tfprintf(file, \"NIX_TX_ACTIONOP_DROP (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_DROP);\n+\t\tbreak;\n+\tcase NIX_TX_ACTIONOP_UCAST_DEFAULT:\n+\t\tfprintf(file, \"NIX_TX_ACTIONOP_UCAST_DEFAULT (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_TX_ACTIONOP_UCAST_DEFAULT);\n+\t\tbreak;\n+\tcase NIX_TX_ACTIONOP_UCAST_CHAN:\n+\t\tfprintf(file, \"NIX_TX_ACTIONOP_UCAST_DEFAULT (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_TX_ACTIONOP_UCAST_CHAN);\n+\t\tplt_strlcpy(index_name,\n+\t\t\t    \"Transmit Channel:\", NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_TX_ACTIONOP_MCAST:\n+\t\tfprintf(file, \"NIX_TX_ACTIONOP_MCAST (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_TX_ACTIONOP_MCAST);\n+\t\tplt_strlcpy(index_name,\n+\t\t\t    \"Multicast Table Index:\", NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_TX_ACTIONOP_DROP_VIOL:\n+\t\tfprintf(file, \"NIX_TX_ACTIONOP_DROP_VIOL (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_TX_ACTIONOP_DROP_VIOL);\n+\t\tbreak;\n+\tdefault:\n+\t\tplt_err(\"Unknown NIX_TX_ACTIONOP found\");\n+\t\treturn;\n+\t}\n+\n+\tindex = ((npc_action & NPC_TX_ACTION_INDEX_MASK) >> 12) &\n+\t\tGENMASK(19, 0);\n+\n+\tfprintf(file, \"\\t%s:%#05X\\n\", index_name, index);\n+\n+\tmatch_id = ((npc_action & NPC_TX_ACTION_MATCH_MASK) >> 32) &\n+\t\t   GENMASK(15, 0);\n+\n+\tfprintf(file, \"\\tMatch Id:%#04X\\n\", match_id);\n+}\n+\n+static void\n+npc_flow_dump_rx_action(FILE *file, uint64_t npc_action)\n+{\n+\tuint32_t rx_op, pf_func, index, match_id, flowkey_alg;\n+\tchar index_name[NPC_MAX_FIELD_NAME_SIZE] = \"Index:\";\n+\n+\trx_op = npc_action & NPC_RX_ACTIONOP_MASK;\n+\n+\tfprintf(file, \"\\tActionOp:\");\n+\n+\tswitch (rx_op) {\n+\tcase NIX_RX_ACTIONOP_DROP:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_DROP (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_DROP);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_UCAST:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_UCAST (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_UCAST);\n+\t\tplt_strlcpy(index_name, \"RQ Index\", NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_UCAST_IPSEC:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_UCAST_IPSEC (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_UCAST_IPSEC);\n+\t\tplt_strlcpy(index_name, \"RQ Index:\", NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_MCAST:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_MCAST (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_MCAST);\n+\t\tplt_strlcpy(index_name, \"Multicast/mirror table index\",\n+\t\t\t    NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_RSS:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_RSS (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_RSS);\n+\t\tplt_strlcpy(index_name, \"RSS Group Index\",\n+\t\t\t    NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_PF_FUNC_DROP:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_PF_FUNC_DROP (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_PF_FUNC_DROP);\n+\t\tbreak;\n+\tcase NIX_RX_ACTIONOP_MIRROR:\n+\t\tfprintf(file, \"NIX_RX_ACTIONOP_MIRROR (%\" PRIu64 \")\\n\",\n+\t\t\t(uint64_t)NIX_RX_ACTIONOP_MIRROR);\n+\t\tplt_strlcpy(index_name, \"Multicast/mirror table index\",\n+\t\t\t    NPC_MAX_FIELD_NAME_SIZE);\n+\t\tbreak;\n+\tdefault:\n+\t\tplt_err(\"Unknown NIX_RX_ACTIONOP found\");\n+\t\treturn;\n+\t}\n+\n+\tpf_func = ((npc_action & NPC_RX_ACTION_PFFUNC_MASK) >> 4) &\n+\t\t  GENMASK(15, 0);\n+\n+\tfprintf(file, \"\\tPF_FUNC: %#04X\\n\", pf_func);\n+\n+\tindex = ((npc_action & NPC_RX_ACTION_INDEX_MASK) >> 20) &\n+\t\tGENMASK(19, 0);\n+\n+\tfprintf(file, \"\\t%s:%#05X\\n\", index_name, index);\n+\n+\tmatch_id = ((npc_action & NPC_RX_ACTION_MATCH_MASK) >> 40) &\n+\t\t   GENMASK(15, 0);\n+\n+\tfprintf(file, \"\\tMatch Id:%#04X\\n\", match_id);\n+\n+\tflowkey_alg = ((npc_action & NPC_RX_ACTION_FLOWKEY_MASK) >> 56) &\n+\t\t      GENMASK(4, 0);\n+\n+\tfprintf(file, \"\\tFlow Key Alg:%#X\\n\", flowkey_alg);\n+}\n+\n+static void\n+npc_flow_dump_parsed_action(FILE *file, uint64_t npc_action, bool is_rx)\n+{\n+\tif (is_rx) {\n+\t\tfprintf(file, \"NPC RX Action:%#016lX\\n\", npc_action);\n+\t\tnpc_flow_dump_rx_action(file, npc_action);\n+\t} else {\n+\t\tfprintf(file, \"NPC TX Action:%#016lX\\n\", npc_action);\n+\t\tnpc_flow_dump_tx_action(file, npc_action);\n+\t}\n+}\n+\n+static void\n+npc_flow_dump_rx_vtag_action(FILE *file, uint64_t vtag_action)\n+{\n+\tuint32_t type, lid, relptr;\n+\n+\tif (vtag_action & NIX_RX_VTAGACT_VTAG0_VALID_MASK) {\n+\t\trelptr = vtag_action & NIX_RX_VTAGACT_VTAG0_RELPTR_MASK;\n+\t\tlid = ((vtag_action & NIX_RX_VTAGACT_VTAG0_LID_MASK) >> 8) &\n+\t\t      GENMASK(2, 0);\n+\t\ttype = ((vtag_action & NIX_RX_VTAGACT_VTAG0_TYPE_MASK) >> 12) &\n+\t\t       GENMASK(2, 0);\n+\n+\t\tfprintf(file, \"\\tVTAG0:relptr:%#X\\n\", relptr);\n+\t\tfprintf(file, \"\\tlid:%#X\\n\", lid);\n+\t\tfprintf(file, \"\\ttype:%#X\\n\", type);\n+\t}\n+\n+\tif (vtag_action & NIX_RX_VTAGACT_VTAG1_VALID_MASK) {\n+\t\trelptr = ((vtag_action & NIX_RX_VTAGACT_VTAG1_RELPTR_MASK) >>\n+\t\t\t  32) &\n+\t\t\t GENMASK(7, 0);\n+\t\tlid = ((vtag_action & NIX_RX_VTAGACT_VTAG1_LID_MASK) >> 40) &\n+\t\t      GENMASK(2, 0);\n+\t\ttype = ((vtag_action & NIX_RX_VTAGACT_VTAG1_TYPE_MASK) >> 44) &\n+\t\t       GENMASK(2, 0);\n+\n+\t\tfprintf(file, \"\\tVTAG1:relptr:%#X\\n\", relptr);\n+\t\tfprintf(file, \"\\tlid:%#X\\n\", lid);\n+\t\tfprintf(file, \"\\ttype:%#X\\n\", type);\n+\t}\n+}\n+\n+static void\n+npc_get_vtag_opname(uint32_t op, char *opname, int len)\n+{\n+\tswitch (op) {\n+\tcase 0x0:\n+\t\tplt_strlcpy(opname, \"NOP\", len - 1);\n+\t\tbreak;\n+\tcase 0x1:\n+\t\tplt_strlcpy(opname, \"INSERT\", len - 1);\n+\t\tbreak;\n+\tcase 0x2:\n+\t\tplt_strlcpy(opname, \"REPLACE\", len - 1);\n+\t\tbreak;\n+\tdefault:\n+\t\tplt_err(\"Unknown vtag op found\");\n+\t\tbreak;\n+\t}\n+}\n+\n+static void\n+npc_flow_dump_tx_vtag_action(FILE *file, uint64_t vtag_action)\n+{\n+\tuint32_t relptr, lid, op, vtag_def;\n+\tchar opname[10];\n+\n+\trelptr = vtag_action & NIX_TX_VTAGACT_VTAG0_RELPTR_MASK;\n+\tlid = ((vtag_action & NIX_TX_VTAGACT_VTAG0_LID_MASK) >> 8) &\n+\t      GENMASK(2, 0);\n+\top = ((vtag_action & NIX_TX_VTAGACT_VTAG0_OP_MASK) >> 12) &\n+\t     GENMASK(1, 0);\n+\tvtag_def = ((vtag_action & NIX_TX_VTAGACT_VTAG0_DEF_MASK) >> 16) &\n+\t\t   GENMASK(9, 0);\n+\n+\tnpc_get_vtag_opname(op, opname, sizeof(opname));\n+\n+\tfprintf(file, \"\\tVTAG0 relptr:%#X\\n\", relptr);\n+\tfprintf(file, \"\\tlid:%#X\\n\", lid);\n+\tfprintf(file, \"\\top:%s\\n\", opname);\n+\tfprintf(file, \"\\tvtag_def:%#X\\n\", vtag_def);\n+\n+\trelptr = ((vtag_action & NIX_TX_VTAGACT_VTAG1_RELPTR_MASK) >> 32) &\n+\t\t GENMASK(7, 0);\n+\tlid = ((vtag_action & NIX_TX_VTAGACT_VTAG1_LID_MASK) >> 40) &\n+\t      GENMASK(2, 0);\n+\top = ((vtag_action & NIX_TX_VTAGACT_VTAG1_OP_MASK) >> 44) &\n+\t     GENMASK(1, 0);\n+\tvtag_def = ((vtag_action & NIX_TX_VTAGACT_VTAG1_DEF_MASK) >> 48) &\n+\t\t   GENMASK(9, 0);\n+\n+\tnpc_get_vtag_opname(op, opname, sizeof(opname));\n+\n+\tfprintf(file, \"\\tVTAG1:relptr:%#X\\n\", relptr);\n+\tfprintf(file, \"\\tlid:%#X\\n\", lid);\n+\tfprintf(file, \"\\top:%s\\n\", opname);\n+\tfprintf(file, \"\\tvtag_def:%#X\\n\", vtag_def);\n+}\n+\n+static void\n+npc_flow_dump_vtag_action(FILE *file, uint64_t vtag_action, bool is_rx)\n+{\n+\tif (is_rx) {\n+\t\tfprintf(file, \"NPC RX VTAG Action:%#016lX\\n\", vtag_action);\n+\t\tnpc_flow_dump_rx_vtag_action(file, vtag_action);\n+\t} else {\n+\t\tfprintf(file, \"NPC TX VTAG Action:%#016lX\\n\", vtag_action);\n+\t\tnpc_flow_dump_tx_vtag_action(file, vtag_action);\n+\t}\n+}\n+\n+void\n+roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,\n+\t\t       struct roc_npc_flow *flow)\n+{\n+\tstruct npc *npc = roc_npc_to_npc_priv(roc_npc);\n+\tbool is_rx = 0;\n+\tint i;\n+\n+\tfprintf(file, \"MCAM Index:%d\\n\", flow->mcam_id);\n+\tfprintf(file, \"Interface :%s (%d)\\n\", intf_str[flow->nix_intf],\n+\t\tflow->nix_intf);\n+\tfprintf(file, \"Priority  :%d\\n\", flow->priority);\n+\n+\tif (flow->nix_intf == NIX_INTF_RX)\n+\t\tis_rx = 1;\n+\n+\tnpc_flow_dump_parsed_action(file, flow->npc_action, is_rx);\n+\tnpc_flow_dump_vtag_action(file, flow->vtag_action, is_rx);\n+\tfprintf(file, \"Patterns:\\n\");\n+\tnpc_flow_dump_patterns(file, npc, flow);\n+\n+\tfprintf(file, \"MCAM Raw Data :\\n\");\n+\n+\tfor (i = 0; i < ROC_NPC_MAX_MCAM_WIDTH_DWORDS; i++) {\n+\t\tfprintf(file, \"\\tDW%d     :%016lX\\n\", i, flow->mcam_data[i]);\n+\t\tfprintf(file, \"\\tDW%d_Mask:%016lX\\n\", i, flow->mcam_mask[i]);\n+\t}\n+\n+\tfprintf(file, \"\\n\");\n+}\ndiff --git a/drivers/common/cnxk/roc_npc_priv.h b/drivers/common/cnxk/roc_npc_priv.h\nindex 8bc5bac..961583b 100644\n--- a/drivers/common/cnxk/roc_npc_priv.h\n+++ b/drivers/common/cnxk/roc_npc_priv.h\n@@ -47,7 +47,7 @@\n #define NPC_RVUPF_MAX_9XXX 0x10 /* HRM: RVU_PRIV_CONST */\n #define NPC_RVUPF_MAX_10XX 0x20 /* HRM: RVU_PRIV_CONST */\n #define NPC_NIXLF_MAX\t   0x80 /* HRM: NIX_AF_CONST2 */\n-#define NPC_MCAME_PER_PF   2\t/* DRV: RSVD_MCAM_ENTRIES_PER_PF */\n+#define NPC_MCAME_PER_PF   3\t/* DRV: RSVD_MCAM_ENTRIES_PER_PF */\n #define NPC_MCAME_PER_LF   1\t/* DRV: RSVD_MCAM_ENTRIES_PER_NIXLF */\n #define NPC_MCAME_RESVD_9XXX                                                   \\\n \t(NPC_NIXLF_MAX * NPC_MCAME_PER_LF +                                    \\\ndiff --git a/drivers/common/cnxk/roc_npc_utils.c b/drivers/common/cnxk/roc_npc_utils.c\nindex 1fb8973..5c97588 100644\n--- a/drivers/common/cnxk/roc_npc_utils.c\n+++ b/drivers/common/cnxk/roc_npc_utils.c\n@@ -206,6 +206,7 @@ npc_update_parse_state(struct npc_parse_state *pst,\n \t\t       uint8_t flags)\n {\n \tstruct npc_lid_lt_xtract_info *xinfo;\n+\tstruct roc_npc_flow_dump_data *dump;\n \tstruct npc_xtract_info *lfinfo;\n \tint intf, lf_cfg;\n \tint i, j, rc = 0;\n@@ -248,6 +249,9 @@ npc_update_parse_state(struct npc_parse_state *pst,\n \t}\n \n done:\n+\tdump = &pst->flow->dump_data[pst->flow->num_patterns++];\n+\tdump->lid = lid;\n+\tdump->ltype = lt;\n \tpst->pattern++;\n \treturn 0;\n }\ndiff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map\nindex c39d76f..a11ba4d 100644\n--- a/drivers/common/cnxk/version.map\n+++ b/drivers/common/cnxk/version.map\n@@ -160,6 +160,8 @@ INTERNAL {\n \troc_npc_fini;\n \troc_npc_flow_create;\n \troc_npc_flow_destroy;\n+\troc_npc_flow_dump;\n+\troc_npc_flow_mcam_dump;\n \troc_npc_flow_parse;\n \troc_npc_get_low_priority_mcam;\n \troc_npc_init;\n",
    "prefixes": [
        "v4",
        "03/62"
    ]
}