RDMA/iw_cxgb4: set the correct FID value in DSGL commands
authorHariprasad S <hariprasad@chelsio.com>
Fri, 6 May 2016 16:47:56 +0000 (22:17 +0530)
committerDoug Ledford <dledford@redhat.com>
Fri, 13 May 2016 23:38:05 +0000 (19:38 -0400)
The FID value in a ULP_MEMIO command needs to be set to an IQ ID of
a queue configured for our PF.  The FID/IQ id is used to index into the
PCIE FID table, to find out on which function the DMA needs to be
issued. Essentially, every DMA needs to have the ingress queue. The exact
ingress queue doesn't matter, but it needs to be an ingress queue
associated with the function you want to see the DMA on.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/cxgb4/mem.c
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h

index 008be07d560432b7a0954a0e7676e71b2ef61d04..d495675ea68de0e83533804b17c08bb1ef4cbd47 100644 (file)
@@ -86,8 +86,9 @@ static int _c4iw_write_mem_dma_aligned(struct c4iw_rdev *rdev, u32 addr,
                        (wait ? FW_WR_COMPL_F : 0));
        req->wr.wr_lo = wait ? (__force __be64)(unsigned long) &wr_wait : 0L;
        req->wr.wr_mid = cpu_to_be32(FW_WR_LEN16_V(DIV_ROUND_UP(wr_len, 16)));
-       req->cmd = cpu_to_be32(ULPTX_CMD_V(ULP_TX_MEM_WRITE));
-       req->cmd |= cpu_to_be32(T5_ULP_MEMIO_ORDER_V(1));
+       req->cmd = cpu_to_be32(ULPTX_CMD_V(ULP_TX_MEM_WRITE) |
+                              T5_ULP_MEMIO_ORDER_V(1) |
+                              T5_ULP_MEMIO_FID_V(rdev->lldi.rxq_ids[0]));
        req->dlen = cpu_to_be32(ULP_MEMIO_DATA_LEN_V(len>>5));
        req->len16 = cpu_to_be32(DIV_ROUND_UP(wr_len-sizeof(req->wr), 16));
        req->lock_addr = cpu_to_be32(ULP_MEMIO_ADDR_V(addr));
index 80417fc564d43fc6305a737e90a819080bbcdd8b..4705e2dea42342d870fff93ab3d070e08a5ac715 100644 (file)
@@ -1392,6 +1392,10 @@ struct ulp_mem_io {
 #define T5_ULP_MEMIO_ORDER_V(x) ((x) << T5_ULP_MEMIO_ORDER_S)
 #define T5_ULP_MEMIO_ORDER_F    T5_ULP_MEMIO_ORDER_V(1U)
 
+#define T5_ULP_MEMIO_FID_S     4
+#define T5_ULP_MEMIO_FID_M     0x7ff
+#define T5_ULP_MEMIO_FID_V(x)  ((x) << T5_ULP_MEMIO_FID_S)
+
 /* ulp_mem_io.lock_addr fields */
 #define ULP_MEMIO_ADDR_S    0
 #define ULP_MEMIO_ADDR_V(x) ((x) << ULP_MEMIO_ADDR_S)