common/cnxk: dump hardware flow MCAM entry data

Message ID 20220517040408.158840-1-psatheesh@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series common/cnxk: dump hardware flow MCAM entry data |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/github-robot: build success github build: passed
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS

Commit Message

Satheesh Paul Antonysamy May 17, 2022, 4:04 a.m. UTC
  From: Satheesh Paul <psatheesh@marvell.com>

When dumping flow data, read hardware MCAM entry corresponding
to the flow and print that data also.

Signed-off-by: Satheesh Paul <psatheesh@marvell.com>
Reviewed-by: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>
---
 drivers/common/cnxk/roc_npc_mcam_dump.c | 26 ++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
  

Comments

Jerin Jacob June 14, 2022, 12:25 p.m. UTC | #1
On Tue, May 17, 2022 at 9:34 AM <psatheesh@marvell.com> wrote:
>
> From: Satheesh Paul <psatheesh@marvell.com>
>
> When dumping flow data, read hardware MCAM entry corresponding
> to the flow and print that data also.
>
> Signed-off-by: Satheesh Paul <psatheesh@marvell.com>
> Reviewed-by: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>


Updated the git commit as follows and applied to
dpdk-next-net-eventdev/for-main. Thanks

    common/cnxk: support dumping flow MCAM entry data

    When dumping flow data, read hardware MCAM entry corresponding
    to the flow and print that data also.

    Signed-off-by: Satheesh Paul <psatheesh@marvell.com>
    Reviewed-by: Kiran Kumar K <kirankumark@marvell.com>

> ---
>  drivers/common/cnxk/roc_npc_mcam_dump.c | 26 ++++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/common/cnxk/roc_npc_mcam_dump.c b/drivers/common/cnxk/roc_npc_mcam_dump.c
> index 679e3d7657..2aaf3ccd0b 100644
> --- a/drivers/common/cnxk/roc_npc_mcam_dump.c
> +++ b/drivers/common/cnxk/roc_npc_mcam_dump.c
> @@ -586,8 +586,10 @@ roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,
>                        struct roc_npc_flow *flow)
>  {
>         struct npc *npc = roc_npc_to_npc_priv(roc_npc);
> +       struct npc_mcam_read_entry_req *mcam_read_req;
> +       struct npc_mcam_read_entry_rsp *mcam_read_rsp;
>         bool is_rx = 0;
> -       int i;
> +       int i, rc = 0;
>
>         fprintf(file, "MCAM Index:%d\n", flow->mcam_id);
>         fprintf(file, "Interface :%s (%d)\n", intf_str[flow->nix_intf],
> @@ -609,5 +611,27 @@ roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,
>                 fprintf(file, "\tDW%d_Mask:%016lX\n", i, flow->mcam_mask[i]);
>         }
>
> +       mcam_read_req = mbox_alloc_msg_npc_mcam_read_entry(npc->mbox);
> +       if (mcam_read_req == NULL) {
> +               plt_err("Failed to alloc msg");
> +               return;
> +       }
> +
> +       mcam_read_req->entry = flow->mcam_id;
> +       rc = mbox_process_msg(npc->mbox, (void *)&mcam_read_rsp);
> +       if (rc) {
> +               plt_err("Failed to fetch MCAM entry");
> +               return;
> +       }
> +
> +       fprintf(file, "HW MCAM Data :\n");
> +
> +       for (i = 0; i < ROC_NPC_MAX_MCAM_WIDTH_DWORDS; i++) {
> +               fprintf(file, "\tDW%d     :%016lX\n", i,
> +                       mcam_read_rsp->entry_data.kw[i]);
> +               fprintf(file, "\tDW%d_Mask:%016lX\n", i,
> +                       mcam_read_rsp->entry_data.kw_mask[i]);
> +       }
> +
>         fprintf(file, "\n");
>  }
> --
> 2.25.4
>
  

Patch

diff --git a/drivers/common/cnxk/roc_npc_mcam_dump.c b/drivers/common/cnxk/roc_npc_mcam_dump.c
index 679e3d7657..2aaf3ccd0b 100644
--- a/drivers/common/cnxk/roc_npc_mcam_dump.c
+++ b/drivers/common/cnxk/roc_npc_mcam_dump.c
@@ -586,8 +586,10 @@  roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,
 		       struct roc_npc_flow *flow)
 {
 	struct npc *npc = roc_npc_to_npc_priv(roc_npc);
+	struct npc_mcam_read_entry_req *mcam_read_req;
+	struct npc_mcam_read_entry_rsp *mcam_read_rsp;
 	bool is_rx = 0;
-	int i;
+	int i, rc = 0;
 
 	fprintf(file, "MCAM Index:%d\n", flow->mcam_id);
 	fprintf(file, "Interface :%s (%d)\n", intf_str[flow->nix_intf],
@@ -609,5 +611,27 @@  roc_npc_flow_mcam_dump(FILE *file, struct roc_npc *roc_npc,
 		fprintf(file, "\tDW%d_Mask:%016lX\n", i, flow->mcam_mask[i]);
 	}
 
+	mcam_read_req = mbox_alloc_msg_npc_mcam_read_entry(npc->mbox);
+	if (mcam_read_req == NULL) {
+		plt_err("Failed to alloc msg");
+		return;
+	}
+
+	mcam_read_req->entry = flow->mcam_id;
+	rc = mbox_process_msg(npc->mbox, (void *)&mcam_read_rsp);
+	if (rc) {
+		plt_err("Failed to fetch MCAM entry");
+		return;
+	}
+
+	fprintf(file, "HW MCAM Data :\n");
+
+	for (i = 0; i < ROC_NPC_MAX_MCAM_WIDTH_DWORDS; i++) {
+		fprintf(file, "\tDW%d     :%016lX\n", i,
+			mcam_read_rsp->entry_data.kw[i]);
+		fprintf(file, "\tDW%d_Mask:%016lX\n", i,
+			mcam_read_rsp->entry_data.kw_mask[i]);
+	}
+
 	fprintf(file, "\n");
 }