[2/2] common/cnxk: update meter algorithm in band profile
Checks
Commit Message
Patch updates meter algorithm in nix band profile
structure
Signed-off-by: Rakesh Kudurumalla <rkudurumalla@marvell.com>
---
drivers/common/cnxk/hw/nix.h | 5 ---
drivers/common/cnxk/roc_nix_bpf.c | 61 +++++++++----------------------
2 files changed, 17 insertions(+), 49 deletions(-)
Comments
>-----Original Message-----
>From: Rakesh Kudurumalla <rkudurumalla@marvell.com>
>Sent: Tuesday, November 30, 2021 12:12 PM
>To: Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>; Kiran Kumar
>Kokkilagadda <kirankumark@marvell.com>; Sunil Kumar Kori
><skori@marvell.com>; Satha Koteswara Rao Kottidi
><skoteshwar@marvell.com>
>Cc: dev@dpdk.org; Rakesh Kudurumalla <rkudurumalla@marvell.com>
>Subject: [PATCH 2/2] common/cnxk: update meter algorithm in band profile
>
>Patch updates meter algorithm in nix band profile structure
>
>Signed-off-by: Rakesh Kudurumalla <rkudurumalla@marvell.com>
>---
> drivers/common/cnxk/hw/nix.h | 5 ---
> drivers/common/cnxk/roc_nix_bpf.c | 61 +++++++++----------------------
> 2 files changed, 17 insertions(+), 49 deletions(-)
>
>diff --git a/drivers/common/cnxk/hw/nix.h b/drivers/common/cnxk/hw/nix.h
>index dd2ebecc6a..6931f1d1d2 100644
>--- a/drivers/common/cnxk/hw/nix.h
>+++ b/drivers/common/cnxk/hw/nix.h
>@@ -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
>
>diff --git a/drivers/common/cnxk/roc_nix_bpf.c
>b/drivers/common/cnxk/roc_nix_bpf.c
>index 6996a54be0..46ed91e87b 100644
>--- a/drivers/common/cnxk/roc_nix_bpf.c
>+++ b/drivers/common/cnxk/roc_nix_bpf.c
>@@ -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);
>--
>2.25.1
Acked-by: Sunil Kumar Kori <skori@mavell.com>
@@ -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
@@ -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);