In preparation for per-band RED offload pass band parameter to
functions.  For now it will always be 0.

Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com>
Reviewed-by: John Hurley <john.hur...@netronome.com>
---
 drivers/net/ethernet/netronome/nfp/abm/ctrl.c | 52 ++++++++++---------
 drivers/net/ethernet/netronome/nfp/abm/main.h | 10 ++--
 .../net/ethernet/netronome/nfp/abm/qdisc.c    | 30 +++++------
 3 files changed, 49 insertions(+), 43 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/abm/ctrl.c 
b/drivers/net/ethernet/netronome/nfp/abm/ctrl.c
index d9c5fff97547..8b2598a223de 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/ctrl.c
+++ b/drivers/net/ethernet/netronome/nfp/abm/ctrl.c
@@ -30,23 +30,25 @@
 
 static int
 nfp_abm_ctrl_stat(struct nfp_abm_link *alink, const struct nfp_rtsym *sym,
-                 unsigned int stride, unsigned int offset, unsigned int i,
-                 bool is_u64, u64 *res)
+                 unsigned int stride, unsigned int offset, unsigned int band,
+                 unsigned int queue, bool is_u64, u64 *res)
 {
        struct nfp_cpp *cpp = alink->abm->app->cpp;
        u64 val, sym_offset;
+       unsigned int qid;
        u32 val32;
        int err;
 
-       sym_offset = (alink->queue_base + i) * stride + offset;
+       qid = band * NFP_NET_MAX_RX_RINGS + alink->queue_base + queue;
+
+       sym_offset = qid * stride + offset;
        if (is_u64)
                err = __nfp_rtsym_readq(cpp, sym, 3, 0, sym_offset, &val);
        else
                err = __nfp_rtsym_readl(cpp, sym, 3, 0, sym_offset, &val32);
        if (err) {
-               nfp_err(cpp,
-                       "RED offload reading stat failed on vNIC %d queue %d\n",
-                       alink->id, i);
+               nfp_err(cpp, "RED offload reading stat failed on vNIC %d band 
%d queue %d (+ %d)\n",
+                       alink->id, band, queue, alink->queue_base);
                return err;
        }
 
@@ -77,12 +79,12 @@ int __nfp_abm_ctrl_set_q_lvl(struct nfp_abm *abm, unsigned 
int id, u32 val)
        return 0;
 }
 
-int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int queue,
-                          u32 val)
+int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int band,
+                          unsigned int queue, u32 val)
 {
        unsigned int threshold;
 
-       threshold = alink->queue_base + queue;
+       threshold = band * NFP_NET_MAX_RX_RINGS + alink->queue_base + queue;
 
        return __nfp_abm_ctrl_set_q_lvl(alink->abm, threshold, val);
 }
@@ -92,7 +94,7 @@ u64 nfp_abm_ctrl_stat_non_sto(struct nfp_abm_link *alink, 
unsigned int i)
        u64 val;
 
        if (nfp_abm_ctrl_stat(alink, alink->abm->qm_stats, NFP_QMSTAT_STRIDE,
-                             NFP_QMSTAT_NON_STO, i, true, &val))
+                             NFP_QMSTAT_NON_STO, 0, i, true, &val))
                return 0;
        return val;
 }
@@ -102,56 +104,58 @@ u64 nfp_abm_ctrl_stat_sto(struct nfp_abm_link *alink, 
unsigned int i)
        u64 val;
 
        if (nfp_abm_ctrl_stat(alink, alink->abm->qm_stats, NFP_QMSTAT_STRIDE,
-                             NFP_QMSTAT_STO, i, true, &val))
+                             NFP_QMSTAT_STO, 0, i, true, &val))
                return 0;
        return val;
 }
 
-int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int i,
-                             struct nfp_alink_stats *stats)
+int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int band,
+                             unsigned int queue, struct nfp_alink_stats *stats)
 {
        int err;
 
-       stats->tx_pkts = nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(i));
-       stats->tx_bytes = nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(i) + 8);
+       stats->tx_pkts += nn_readq(alink->vnic, NFP_NET_CFG_RXR_STATS(queue));
+       stats->tx_bytes += nn_readq(alink->vnic,
+                                   NFP_NET_CFG_RXR_STATS(queue) + 8);
 
-       err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls,
-                               NFP_QLVL_STRIDE, NFP_QLVL_BLOG_BYTES,
-                               i, false, &stats->backlog_bytes);
+       err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls, NFP_QLVL_STRIDE,
+                               NFP_QLVL_BLOG_BYTES, band, queue, false,
+                               &stats->backlog_bytes);
        if (err)
                return err;
 
        err = nfp_abm_ctrl_stat(alink, alink->abm->q_lvls,
                                NFP_QLVL_STRIDE, NFP_QLVL_BLOG_PKTS,
-                               i, false, &stats->backlog_pkts);
+                               band, queue, false, &stats->backlog_pkts);
        if (err)
                return err;
 
        err = nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
                                NFP_QMSTAT_STRIDE, NFP_QMSTAT_DROP,
-                               i, true, &stats->drops);
+                               band, queue, true, &stats->drops);
        if (err)
                return err;
 
        return nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
                                 NFP_QMSTAT_STRIDE, NFP_QMSTAT_ECN,
-                                i, true, &stats->overlimits);
+                                band, queue, true, &stats->overlimits);
 }
 
-int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink, unsigned int i,
+int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink,
+                              unsigned int band, unsigned int queue,
                               struct nfp_alink_xstats *xstats)
 {
        int err;
 
        err = nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
                                NFP_QMSTAT_STRIDE, NFP_QMSTAT_DROP,
-                               i, true, &xstats->pdrop);
+                               band, queue, true, &xstats->pdrop);
        if (err)
                return err;
 
        return nfp_abm_ctrl_stat(alink, alink->abm->qm_stats,
                                 NFP_QMSTAT_STRIDE, NFP_QMSTAT_ECN,
-                                i, true, &xstats->ecn_marked);
+                                band, queue, true, &xstats->ecn_marked);
 }
 
 int nfp_abm_ctrl_qm_enable(struct nfp_abm *abm)
diff --git a/drivers/net/ethernet/netronome/nfp/abm/main.h 
b/drivers/net/ethernet/netronome/nfp/abm/main.h
index b10c067b15c8..b18a699dac50 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/main.h
+++ b/drivers/net/ethernet/netronome/nfp/abm/main.h
@@ -188,11 +188,13 @@ int nfp_abm_setup_tc_mq(struct net_device *netdev, struct 
nfp_abm_link *alink,
 void nfp_abm_ctrl_read_params(struct nfp_abm_link *alink);
 int nfp_abm_ctrl_find_addrs(struct nfp_abm *abm);
 int __nfp_abm_ctrl_set_q_lvl(struct nfp_abm *abm, unsigned int id, u32 val);
-int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int queue,
-                          u32 val);
-int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink, unsigned int i,
+int nfp_abm_ctrl_set_q_lvl(struct nfp_abm_link *alink, unsigned int band,
+                          unsigned int queue, u32 val);
+int nfp_abm_ctrl_read_q_stats(struct nfp_abm_link *alink,
+                             unsigned int band, unsigned int queue,
                              struct nfp_alink_stats *stats);
-int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink, unsigned int i,
+int nfp_abm_ctrl_read_q_xstats(struct nfp_abm_link *alink,
+                              unsigned int band, unsigned int queue,
                               struct nfp_alink_xstats *xstats);
 u64 nfp_abm_ctrl_stat_non_sto(struct nfp_abm_link *alink, unsigned int i);
 u64 nfp_abm_ctrl_stat_sto(struct nfp_abm_link *alink, unsigned int i);
diff --git a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c 
b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
index 16c4afe3a37f..251ce3070564 100644
--- a/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
+++ b/drivers/net/ethernet/netronome/nfp/abm/qdisc.c
@@ -51,15 +51,15 @@ nfp_abm_stats_update_red(struct nfp_abm_link *alink, struct 
nfp_qdisc *qdisc,
        if (!qdisc->offloaded)
                return;
 
-       err = nfp_abm_ctrl_read_q_stats(alink, queue, &qdisc->red.stats);
+       err = nfp_abm_ctrl_read_q_stats(alink, 0, queue, &qdisc->red.stats);
        if (err)
-               nfp_err(cpp, "RED stats (%d) read failed with error %d\n",
-                       queue, err);
+               nfp_err(cpp, "RED stats (%d, %d) read failed with error %d\n",
+                       0, queue, err);
 
-       err = nfp_abm_ctrl_read_q_xstats(alink, queue, &qdisc->red.xstats);
+       err = nfp_abm_ctrl_read_q_xstats(alink, 0, queue, &qdisc->red.xstats);
        if (err)
-               nfp_err(cpp, "RED xstats (%d) read failed with error %d\n",
-                       queue, err);
+               nfp_err(cpp, "RED xstats (%d, %d) read failed with error %d\n",
+                       0, queue, err);
 }
 
 static void
@@ -126,7 +126,7 @@ nfp_abm_qdisc_offload_stop(struct nfp_abm_link *alink, 
struct nfp_qdisc *qdisc)
 }
 
 static int
-__nfp_abm_stats_init(struct nfp_abm_link *alink,
+__nfp_abm_stats_init(struct nfp_abm_link *alink, unsigned int band,
                     unsigned int queue, struct nfp_alink_stats *prev_stats,
                     struct nfp_alink_xstats *prev_xstats)
 {
@@ -139,19 +139,19 @@ __nfp_abm_stats_init(struct nfp_abm_link *alink,
        backlog_pkts = prev_stats->backlog_pkts;
        backlog_bytes = prev_stats->backlog_bytes;
 
-       err = nfp_abm_ctrl_read_q_stats(alink, queue, prev_stats);
+       err = nfp_abm_ctrl_read_q_stats(alink, band, queue, prev_stats);
        if (err) {
                nfp_err(alink->abm->app->cpp,
-                       "RED stats init (%d) failed with error %d\n",
-                       queue, err);
+                       "RED stats init (%d, %d) failed with error %d\n",
+                       band, queue, err);
                return err;
        }
 
-       err = nfp_abm_ctrl_read_q_xstats(alink, queue, prev_xstats);
+       err = nfp_abm_ctrl_read_q_xstats(alink, band, queue, prev_xstats);
        if (err) {
                nfp_err(alink->abm->app->cpp,
-                       "RED xstats init (%d) failed with error %d\n",
-                       queue, err);
+                       "RED xstats init (%d, %d) failed with error %d\n",
+                       band, queue, err);
                return err;
        }
 
@@ -164,7 +164,7 @@ static int
 nfp_abm_stats_init(struct nfp_abm_link *alink, struct nfp_qdisc *qdisc,
                   unsigned int queue)
 {
-       return __nfp_abm_stats_init(alink, queue,
+       return __nfp_abm_stats_init(alink, 0, queue,
                                    &qdisc->red.prev_stats,
                                    &qdisc->red.prev_xstats);
 }
@@ -186,7 +186,7 @@ nfp_abm_offload_compile_red(struct nfp_abm_link *alink, 
struct nfp_qdisc *qdisc,
        if (!qdisc->offload_mark)
                return;
 
-       nfp_abm_ctrl_set_q_lvl(alink, queue, qdisc->red.threshold);
+       nfp_abm_ctrl_set_q_lvl(alink, 0, queue, qdisc->red.threshold);
 }
 
 static void
-- 
2.17.1

Reply via email to