cxgb4: Add support to query HW SRQ parameters
authorRaju Rangoju <rajur@chelsio.com>
Tue, 20 Mar 2018 10:11:40 +0000 (15:41 +0530)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Mar 2018 15:59:11 +0000 (11:59 -0400)
This patch adds support to query FW for the HW SRQ table start/end, and
advertise that for ULDs.

Signed-off-by: Raju Rangoju <rajur@chelsio.com>
Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h

index 72ec3f7..3ce4964 100644 (file)
@@ -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);
index 788146c..96a69bd 100644 (file)
@@ -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;