]> git.droids-corp.org - dpdk.git/commitdiff
common/cnxk: update meter algorithm in band profile
authorRakesh Kudurumalla <rkudurumalla@marvell.com>
Thu, 13 Jan 2022 12:28:07 +0000 (17:58 +0530)
committerJerin Jacob <jerinj@marvell.com>
Thu, 20 Jan 2022 08:41:22 +0000 (09:41 +0100)
Update meter algorithm in NIX's band profile structure.

Signed-off-by: Rakesh Kudurumalla <rkudurumalla@marvell.com>
Acked-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/hw/nix.h
drivers/common/cnxk/roc_nix_bpf.c

index dd2ebecc6a9cc15dc45741027c594cb442efdc5c..6931f1d1d204682ab76bd4dc5ff238bf95b54df1 100644 (file)
@@ -2133,11 +2133,6 @@ struct nix_lso_format {
        ((NIX_BPF_RATE_CONST * ((256 + (mantissa)) << (exponent))) /           \
         (((1ull << (div_exp)) * 256 * policer_timeunit)))
 
-/* Meter rate limits in Bits/Sec */
-#define NIX_BPF_RATE_MIN NIX_BPF_RATE(1000000000, 0, 0, 0)
-#define NIX_BPF_RATE_MAX                                                       \
-       NIX_BPF_RATE(1, NIX_BPF_MAX_RATE_EXPONENT, NIX_BPF_MAX_RATE_MANTISSA, 0)
-
 #define NIX_BPF_DEFAULT_ADJUST_MANTISSA 511
 #define NIX_BPF_DEFAULT_ADJUST_EXPONENT 0
 
index 4941f62995daa7ce2d13b6280ff7202a2c253ed2..55a831f8335ee248ffcd6caa4b6af6f2f5e5513b 100644 (file)
@@ -38,48 +38,23 @@ meter_rate_to_nix(uint64_t value, uint64_t *exponent_p, uint64_t *mantissa_p,
                  uint64_t *div_exp_p, uint32_t timeunit_p)
 {
        uint64_t div_exp, exponent, mantissa;
-       uint32_t time_us = timeunit_p;
+       uint32_t time_ns = timeunit_p;
 
        /* Boundary checks */
-       if (value < NIX_BPF_RATE_MIN || value > NIX_BPF_RATE_MAX)
+       if (value < NIX_BPF_RATE(time_ns, 0, 0, 0) ||
+           value > NIX_BPF_RATE(time_ns, NIX_BPF_MAX_RATE_EXPONENT,
+                                NIX_BPF_MAX_RATE_MANTISSA, 0))
                return 0;
 
-       if (value <= NIX_BPF_RATE(time_us, 0, 0, 0)) {
-               /* Calculate rate div_exp and mantissa using
-                * the following formula:
-                *
-                * value = (2E6 * (256 + mantissa)
-                *              / ((1 << div_exp) * 256))
-                */
-               div_exp = 0;
-               exponent = 0;
-               mantissa = NIX_BPF_MAX_RATE_MANTISSA;
-
-               while (value < (NIX_BPF_RATE_CONST / (1 << div_exp)))
-                       div_exp += 1;
-
-               while (value < ((NIX_BPF_RATE_CONST * (256 + mantissa)) /
-                               ((1 << div_exp) * 256)))
-                       mantissa -= 1;
-       } else {
-               /* Calculate rate exponent and mantissa using
-                * the following formula:
-                *
-                * value = (2E6 * ((256 + mantissa) << exponent)) / 256
-                *
-                */
-               div_exp = 0;
-               exponent = NIX_BPF_MAX_RATE_EXPONENT;
-               mantissa = NIX_BPF_MAX_RATE_MANTISSA;
-
-               while (value < (NIX_BPF_RATE_CONST * (1 << exponent)))
-                       exponent -= 1;
-
-               while (value <
-                      ((NIX_BPF_RATE_CONST * ((256 + mantissa) << exponent)) /
-                       256))
-                       mantissa -= 1;
-       }
+       div_exp = 0;
+       exponent = NIX_BPF_MAX_RATE_EXPONENT;
+       mantissa = NIX_BPF_MAX_RATE_MANTISSA;
+
+       while (value < (NIX_BPF_RATE(time_ns, exponent, 0, 0)))
+               exponent -= 1;
+
+       while (value < (NIX_BPF_RATE(time_ns, exponent, mantissa, 0)))
+               mantissa -= 1;
 
        if (div_exp > NIX_BPF_MAX_RATE_DIV_EXP ||
            exponent > NIX_BPF_MAX_RATE_EXPONENT ||
@@ -94,7 +69,7 @@ meter_rate_to_nix(uint64_t value, uint64_t *exponent_p, uint64_t *mantissa_p,
                *mantissa_p = mantissa;
 
        /* Calculate real rate value */
-       return NIX_BPF_RATE(time_us, exponent, mantissa, div_exp);
+       return NIX_BPF_RATE(time_ns, exponent, mantissa, div_exp);
 }
 
 static inline uint64_t
@@ -195,11 +170,7 @@ nix_precolor_conv_table_write(struct roc_nix *roc_nix, uint64_t val,
        int64_t *addr;
 
        addr = PLT_PTR_ADD(nix->base, off);
-       /* FIXME: Currently writing to this register throwing kernel dump.
-        * plt_write64(val, addr);
-        */
-       PLT_SET_USED(val);
-       PLT_SET_USED(addr);
+       plt_write64(val, addr);
 }
 
 static uint8_t
@@ -665,6 +636,7 @@ roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 
        aq->prof.lmode = cfg->lmode;
        aq->prof.icolor = cfg->icolor;
+       aq->prof.meter_algo = cfg->alg;
        aq->prof.pc_mode = cfg->pc_mode;
        aq->prof.tnl_ena = cfg->tnl_ena;
        aq->prof.gc_action = cfg->action[ROC_NIX_BPF_COLOR_GREEN];
@@ -673,6 +645,7 @@ roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id,
 
        aq->prof_mask.lmode = ~(aq->prof_mask.lmode);
        aq->prof_mask.icolor = ~(aq->prof_mask.icolor);
+       aq->prof_mask.meter_algo = ~(aq->prof_mask.meter_algo);
        aq->prof_mask.pc_mode = ~(aq->prof_mask.pc_mode);
        aq->prof_mask.tnl_ena = ~(aq->prof_mask.tnl_ena);
        aq->prof_mask.gc_action = ~(aq->prof_mask.gc_action);