Commit ff937b91 authored by Yuval Basson's avatar Yuval Basson Committed by David S. Miller

qed: Add EDPM mode type for user-fw compatibility

In older FW versions the completion flag was treated as the ack flag in
edpm messages. Expose the FW option of setting which mode the QP is in
by adding a flag to the qedr <-> qed API.

Flag is added for backward compatibility with libqedr.
This flag will be set by qedr after determining whether the libqedr is
using the updated version.

Fixes: f1093940 ("qed: Add support for QP verbs")
Signed-off-by: default avatarYuval Basson <yuval.bason@marvell.com>
Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 23917494
...@@ -1378,6 +1378,7 @@ qed_rdma_create_qp(void *rdma_cxt, ...@@ -1378,6 +1378,7 @@ qed_rdma_create_qp(void *rdma_cxt,
rc = qed_iwarp_create_qp(p_hwfn, qp, out_params); rc = qed_iwarp_create_qp(p_hwfn, qp, out_params);
qp->qpid = qp->icid; qp->qpid = qp->icid;
} else { } else {
qp->edpm_mode = GET_FIELD(in_params->flags, QED_ROCE_EDPM_MODE);
rc = qed_roce_alloc_cid(p_hwfn, &qp->icid); rc = qed_roce_alloc_cid(p_hwfn, &qp->icid);
qp->qpid = ((0xFF << 16) | qp->icid); qp->qpid = ((0xFF << 16) | qp->icid);
} }
......
...@@ -183,6 +183,7 @@ struct qed_rdma_qp { ...@@ -183,6 +183,7 @@ struct qed_rdma_qp {
void *shared_queue; void *shared_queue;
dma_addr_t shared_queue_phys_addr; dma_addr_t shared_queue_phys_addr;
struct qed_iwarp_ep *ep; struct qed_iwarp_ep *ep;
u8 edpm_mode;
}; };
static inline bool qed_rdma_is_xrc_qp(struct qed_rdma_qp *qp) static inline bool qed_rdma_is_xrc_qp(struct qed_rdma_qp *qp)
......
...@@ -459,6 +459,9 @@ static int qed_roce_sp_create_requester(struct qed_hwfn *p_hwfn, ...@@ -459,6 +459,9 @@ static int qed_roce_sp_create_requester(struct qed_hwfn *p_hwfn,
ROCE_CREATE_QP_REQ_RAMROD_DATA_XRC_FLAG, ROCE_CREATE_QP_REQ_RAMROD_DATA_XRC_FLAG,
qed_rdma_is_xrc_qp(qp)); qed_rdma_is_xrc_qp(qp));
SET_FIELD(p_ramrod->flags2,
ROCE_CREATE_QP_REQ_RAMROD_DATA_EDPM_MODE, qp->edpm_mode);
p_ramrod->max_ord = qp->max_rd_atomic_req; p_ramrod->max_ord = qp->max_rd_atomic_req;
p_ramrod->traffic_class = qp->traffic_class_tos; p_ramrod->traffic_class = qp->traffic_class_tos;
p_ramrod->hop_limit = qp->hop_limit_ttl; p_ramrod->hop_limit = qp->hop_limit_ttl;
......
...@@ -335,6 +335,9 @@ struct qed_rdma_create_qp_in_params { ...@@ -335,6 +335,9 @@ struct qed_rdma_create_qp_in_params {
u16 xrcd_id; u16 xrcd_id;
u8 stats_queue; u8 stats_queue;
enum qed_rdma_qp_type qp_type; enum qed_rdma_qp_type qp_type;
u8 flags;
#define QED_ROCE_EDPM_MODE_MASK 0x1
#define QED_ROCE_EDPM_MODE_SHIFT 0
}; };
struct qed_rdma_create_qp_out_params { struct qed_rdma_create_qp_out_params {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment