This patch adds support to query FW for the HW SRQ table start/end, and
advertise that for ULDs.

Signed-off-by: Raju Rangoju <ra...@chelsio.com>
Reviewed-by: Steve Wise <sw...@opengridcomputing.com>
Signed-off-by: Ganesh Goudar <ganes...@chelsio.com>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 20 ++++++++++++++++++++
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h  |  1 +
 2 files changed, 21 insertions(+)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 72ec3f7dccbb..3ce496494f3c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -75,6 +75,7 @@
 #include "t4fw_api.h"
 #include "t4fw_version.h"
 #include "cxgb4_dcb.h"
+#include "srq.h"
 #include "cxgb4_debugfs.h"
 #include "clip_tbl.h"
 #include "l2t.h"
@@ -586,6 +587,10 @@ static int fwevtq_handler(struct sge_rspq *q, const __be64 
*rsp,
                const struct cpl_abort_rpl_rss *p = (void *)rsp;
 
                hash_del_filter_rpl(q->adap, p);
+       } else if (opcode == CPL_SRQ_TABLE_RPL) {
+               const struct cpl_srq_table_rpl *p = (void *)rsp;
+
+               do_srq_table_rpl(q->adap, p);
        } else
                dev_err(q->adap->pdev_dev,
                        "unexpected CPL %#x on FW event queue\n", opcode);
@@ -4467,6 +4472,20 @@ static int adap_init0(struct adapter *adap)
                adap->vres.pbl.start = val[4];
                adap->vres.pbl.size = val[5] - val[4] + 1;
 
+               params[0] = FW_PARAM_PFVF(SRQ_START);
+               params[1] = FW_PARAM_PFVF(SRQ_END);
+               ret = t4_query_params(adap, adap->mbox, adap->pf, 0, 2,
+                                     params, val);
+               if (!ret) {
+                       adap->vres.srq.start = val[0];
+                       adap->vres.srq.size = val[1] - val[0] + 1;
+               }
+               if (adap->vres.srq.size) {
+                       adap->srq = t4_init_srq(adap->vres.srq.size);
+                       if (!adap->srq)
+                               dev_warn(&adap->pdev->dev, "could not allocate 
SRQ, continuing\n");
+               }
+
                params[0] = FW_PARAM_PFVF(SQRQ_START);
                params[1] = FW_PARAM_PFVF(SQRQ_END);
                params[2] = FW_PARAM_PFVF(CQ_START);
@@ -5135,6 +5154,7 @@ static void free_some_resources(struct adapter *adapter)
 
        kvfree(adapter->smt);
        kvfree(adapter->l2t);
+       kvfree(adapter->srq);
        t4_cleanup_sched(adapter);
        kvfree(adapter->tids.tid_tab);
        cxgb4_cleanup_tc_flower(adapter);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
index 788146c08151..96a69bdacb4c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
@@ -284,6 +284,7 @@ struct cxgb4_virt_res {                      /* virtualized 
HW resources */
        struct cxgb4_range iscsi;
        struct cxgb4_range stag;
        struct cxgb4_range rq;
+       struct cxgb4_range srq;
        struct cxgb4_range pbl;
        struct cxgb4_range qp;
        struct cxgb4_range cq;
-- 
2.12.0

Reply via email to