common/cnxk: support profile stats reset
authorSunil Kumar Kori <skori@marvell.com>
Tue, 12 Oct 2021 07:05:57 +0000 (12:35 +0530)
committerJerin Jacob <jerinj@marvell.com>
Tue, 19 Oct 2021 14:24:02 +0000 (16:24 +0200)
Implement RoC API to reset stats per bandwidth profile
or per NIXLF.

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/roc_nix.h
drivers/common/cnxk/roc_nix_bpf.c
drivers/common/cnxk/version.map

index 0416778..343bb2f 100644 (file)
@@ -656,10 +656,17 @@ roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask,
                       enum roc_nix_bpf_level_flag lvl_flag,
                       uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */);
 
+int __roc_api roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id,
+                                     uint64_t mask,
+                                     enum roc_nix_bpf_level_flag lvl_flag);
+
 int __roc_api
 roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask,
                          uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */);
 
+int __roc_api roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix,
+                                        uint64_t mask);
+
 uint8_t __roc_api
 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag);
 
index a5e3575..df57958 100644 (file)
@@ -937,6 +937,86 @@ roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask,
        return 0;
 }
 
+int
+roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id, uint64_t mask,
+                       enum roc_nix_bpf_level_flag lvl_flag)
+{
+       struct mbox *mbox = get_mbox(roc_nix);
+       struct nix_cn10k_aq_enq_req *aq;
+       uint8_t level_idx;
+
+       if (roc_model_is_cn9k())
+               return NIX_ERR_HW_NOTSUP;
+
+       level_idx = roc_nix_bpf_level_to_idx(lvl_flag);
+       if (level_idx == ROC_NIX_BPF_LEVEL_IDX_INVALID)
+               return NIX_ERR_PARAM;
+
+       aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
+       if (aq == NULL)
+               return -ENOSPC;
+       aq->qidx = (sw_to_hw_lvl_map[level_idx] << 14 | id);
+       aq->ctype = NIX_AQ_CTYPE_BAND_PROF;
+       aq->op = NIX_AQ_INSTOP_WRITE;
+
+       if (mask & ROC_NIX_BPF_GREEN_PKT_F_PASS) {
+               aq->prof.green_pkt_pass = 0;
+               aq->prof_mask.green_pkt_pass = ~(aq->prof_mask.green_pkt_pass);
+       }
+       if (mask & ROC_NIX_BPF_GREEN_OCTS_F_PASS) {
+               aq->prof.green_octs_pass = 0;
+               aq->prof_mask.green_octs_pass =
+                       ~(aq->prof_mask.green_octs_pass);
+       }
+       if (mask & ROC_NIX_BPF_GREEN_PKT_F_DROP) {
+               aq->prof.green_pkt_drop = 0;
+               aq->prof_mask.green_pkt_drop = ~(aq->prof_mask.green_pkt_drop);
+       }
+       if (mask & ROC_NIX_BPF_GREEN_OCTS_F_DROP) {
+               aq->prof.green_octs_drop = 0;
+               aq->prof_mask.green_octs_drop =
+                       ~(aq->prof_mask.green_octs_drop);
+       }
+       if (mask & ROC_NIX_BPF_YELLOW_PKT_F_PASS) {
+               aq->prof.yellow_pkt_pass = 0;
+               aq->prof_mask.yellow_pkt_pass =
+                       ~(aq->prof_mask.yellow_pkt_pass);
+       }
+       if (mask & ROC_NIX_BPF_YELLOW_OCTS_F_PASS) {
+               aq->prof.yellow_octs_pass = 0;
+               aq->prof_mask.yellow_octs_pass =
+                       ~(aq->prof_mask.yellow_octs_pass);
+       }
+       if (mask & ROC_NIX_BPF_YELLOW_PKT_F_DROP) {
+               aq->prof.yellow_pkt_drop = 0;
+               aq->prof_mask.yellow_pkt_drop =
+                       ~(aq->prof_mask.yellow_pkt_drop);
+       }
+       if (mask & ROC_NIX_BPF_YELLOW_OCTS_F_DROP) {
+               aq->prof.yellow_octs_drop = 0;
+               aq->prof_mask.yellow_octs_drop =
+                       ~(aq->prof_mask.yellow_octs_drop);
+       }
+       if (mask & ROC_NIX_BPF_RED_PKT_F_PASS) {
+               aq->prof.red_pkt_pass = 0;
+               aq->prof_mask.red_pkt_pass = ~(aq->prof_mask.red_pkt_pass);
+       }
+       if (mask & ROC_NIX_BPF_RED_OCTS_F_PASS) {
+               aq->prof.red_octs_pass = 0;
+               aq->prof_mask.red_octs_pass = ~(aq->prof_mask.red_octs_pass);
+       }
+       if (mask & ROC_NIX_BPF_RED_PKT_F_DROP) {
+               aq->prof.red_pkt_drop = 0;
+               aq->prof_mask.red_pkt_drop = ~(aq->prof_mask.red_pkt_drop);
+       }
+       if (mask & ROC_NIX_BPF_RED_OCTS_F_DROP) {
+               aq->prof.red_octs_drop = 0;
+               aq->prof_mask.red_octs_drop = ~(aq->prof_mask.red_octs_drop);
+       }
+
+       return mbox_process(mbox);
+}
+
 int
 roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask,
                          uint64_t stats[ROC_NIX_BPF_STATS_MAX])
@@ -1034,3 +1114,36 @@ roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask,
 
        return 0;
 }
+
+int
+roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix, uint64_t mask)
+{
+       struct nix *nix = roc_nix_to_nix_priv(roc_nix);
+
+       if (mask & ROC_NIX_BPF_GREEN_PKT_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_GREEN_PKT_F_PASS);
+       if (mask & ROC_NIX_BPF_GREEN_OCTS_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_GREEN_OCTS_F_PASS);
+       if (mask & ROC_NIX_BPF_GREEN_PKT_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_GREEN_PKT_F_DROP);
+       if (mask & ROC_NIX_BPF_GREEN_OCTS_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_GREEN_OCTS_F_DROP);
+       if (mask & ROC_NIX_BPF_YELLOW_PKT_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_YELLOW_PKT_F_PASS);
+       if (mask & ROC_NIX_BPF_YELLOW_OCTS_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_YELLOW_OCTS_F_PASS);
+       if (mask & ROC_NIX_BPF_YELLOW_PKT_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_YELLOW_PKT_F_DROP);
+       if (mask & ROC_NIX_BPF_YELLOW_OCTS_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_YELLOW_OCTS_F_DROP);
+       if (mask & ROC_NIX_BPF_RED_PKT_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_RED_PKT_F_PASS);
+       if (mask & ROC_NIX_BPF_RED_OCTS_F_PASS)
+               NIX_RST_STATS(ROC_NIX_BPF_RED_OCTS_F_PASS);
+       if (mask & ROC_NIX_BPF_RED_PKT_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_RED_PKT_F_DROP);
+       if (mask & ROC_NIX_BPF_RED_OCTS_F_DROP)
+               NIX_RST_STATS(ROC_NIX_BPF_RED_OCTS_F_DROP);
+
+       return 0;
+}
index 94a25d5..f5de985 100644 (file)
@@ -92,8 +92,10 @@ INTERNAL {
        roc_nix_bpf_free_all;
        roc_nix_bpf_level_to_idx;
        roc_nix_bpf_lf_stats_read;
+       roc_nix_bpf_lf_stats_reset;
        roc_nix_bpf_pre_color_tbl_setup;
        roc_nix_bpf_stats_read;
+       roc_nix_bpf_stats_reset;
        roc_nix_bpf_stats_to_idx;
        roc_nix_cq_dump;
        roc_nix_cq_fini;