common/cnxk: dump hardware flow MCAM entry data
Checks
Commit Message
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
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
>
@@ -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");
}