Skip to content

Commit 52f70de

Browse files
hgao656rleon
authored andcommitted
RDMA/bnxt_re: Fix access flags for MR and QP modify
Access flag definition in MR and QP is different in FW. Currently both reg/bind MR and modify/query QP uses the same flags. Add a different function to map the QP access flags for newer adapters. Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Signed-off-by: Hongguang Gao <hongguang.gao@broadcom.com> Reviewed-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> Link: https://patch.msgid.link/1729065346-1364-6-git-send-email-selvin.xavier@broadcom.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent 9a420bb commit 52f70de

1 file changed

Lines changed: 50 additions & 9 deletions

File tree

drivers/infiniband/hw/bnxt_re/ib_verbs.c

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ static int __from_ib_access_flags(int iflags)
9494
return qflags;
9595
};
9696

97-
static enum ib_access_flags __to_ib_access_flags(int qflags)
97+
static int __to_ib_access_flags(int qflags)
9898
{
99-
enum ib_access_flags iflags = 0;
99+
int iflags = 0;
100100

101101
if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE)
102102
iflags |= IB_ACCESS_LOCAL_WRITE;
@@ -113,7 +113,49 @@ static enum ib_access_flags __to_ib_access_flags(int qflags)
113113
if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND)
114114
iflags |= IB_ACCESS_ON_DEMAND;
115115
return iflags;
116-
};
116+
}
117+
118+
static u8 __qp_access_flags_from_ib(struct bnxt_qplib_chip_ctx *cctx, int iflags)
119+
{
120+
u8 qflags = 0;
121+
122+
if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
123+
/* For Wh+ */
124+
return (u8)__from_ib_access_flags(iflags);
125+
126+
/* For P5, P7 and later chips */
127+
if (iflags & IB_ACCESS_LOCAL_WRITE)
128+
qflags |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
129+
if (iflags & IB_ACCESS_REMOTE_WRITE)
130+
qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
131+
if (iflags & IB_ACCESS_REMOTE_READ)
132+
qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
133+
if (iflags & IB_ACCESS_REMOTE_ATOMIC)
134+
qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC;
135+
136+
return qflags;
137+
}
138+
139+
static int __qp_access_flags_to_ib(struct bnxt_qplib_chip_ctx *cctx, u8 qflags)
140+
{
141+
int iflags = 0;
142+
143+
if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
144+
/* For Wh+ */
145+
return __to_ib_access_flags(qflags);
146+
147+
/* For P5, P7 and later chips */
148+
if (qflags & CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE)
149+
iflags |= IB_ACCESS_LOCAL_WRITE;
150+
if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE)
151+
iflags |= IB_ACCESS_REMOTE_WRITE;
152+
if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_READ)
153+
iflags |= IB_ACCESS_REMOTE_READ;
154+
if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC)
155+
iflags |= IB_ACCESS_REMOTE_ATOMIC;
156+
157+
return iflags;
158+
}
117159

118160
static void bnxt_re_check_and_set_relaxed_ordering(struct bnxt_re_dev *rdev,
119161
struct bnxt_qplib_mrw *qplib_mr)
@@ -2053,12 +2095,10 @@ int bnxt_re_modify_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
20532095
if (qp_attr_mask & IB_QP_ACCESS_FLAGS) {
20542096
qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS;
20552097
qp->qplib_qp.access =
2056-
__from_ib_access_flags(qp_attr->qp_access_flags);
2098+
__qp_access_flags_from_ib(qp->qplib_qp.cctx,
2099+
qp_attr->qp_access_flags);
20572100
/* LOCAL_WRITE access must be set to allow RC receive */
2058-
qp->qplib_qp.access |= BNXT_QPLIB_ACCESS_LOCAL_WRITE;
2059-
/* Temp: Set all params on QP as of now */
2060-
qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
2061-
qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
2101+
qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
20622102
}
20632103
if (qp_attr_mask & IB_QP_PKEY_INDEX) {
20642104
qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_PKEY;
@@ -2263,7 +2303,8 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr,
22632303
qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state);
22642304
qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state);
22652305
qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0;
2266-
qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access);
2306+
qp_attr->qp_access_flags = __qp_access_flags_to_ib(qp->qplib_qp.cctx,
2307+
qplib_qp->access);
22672308
qp_attr->pkey_index = qplib_qp->pkey_index;
22682309
qp_attr->qkey = qplib_qp->qkey;
22692310
qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;

0 commit comments

Comments
 (0)