diff mbox series

RDMA/bnxt_re: Fix access flags for MR and QP modify

Message ID 1729065346-1364-3-git-send-email-selvin.xavier@broadcom.com (mailing list archive)
State Not Applicable
Headers show
Series RDMA/bnxt_re: Fix access flags for MR and QP modify | expand

Commit Message

Selvin Xavier Oct. 16, 2024, 7:55 a.m. UTC
From: Hongguang Gao <hongguang.gao@broadcom.com>

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>
---
 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 59 +++++++++++++++++++++++++++-----
 1 file changed, 50 insertions(+), 9 deletions(-)

Comments

Selvin Xavier Oct. 16, 2024, 9:03 a.m. UTC | #1
Hi Leon/Jason,

Ignore this patch. This patch is sent by mistake. It is available as
4/4 patch in the previous series. Sorry for the confusion.

Thanks,
Selvin

On Wed, Oct 16, 2024 at 1:46 PM Selvin Xavier
<selvin.xavier@broadcom.com> wrote:
>
> From: Hongguang Gao <hongguang.gao@broadcom.com>
>
> 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>
> ---
>  drivers/infiniband/hw/bnxt_re/ib_verbs.c | 59 +++++++++++++++++++++++++++-----
>  1 file changed, 50 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> index 2a21a90..e610807 100644
> --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
> @@ -94,9 +94,9 @@ static int __from_ib_access_flags(int iflags)
>         return qflags;
>  };
>
> -static enum ib_access_flags __to_ib_access_flags(int qflags)
> +static int __to_ib_access_flags(int qflags)
>  {
> -       enum ib_access_flags iflags = 0;
> +       int iflags = 0;
>
>         if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE)
>                 iflags |= IB_ACCESS_LOCAL_WRITE;
> @@ -113,7 +113,49 @@ static enum ib_access_flags __to_ib_access_flags(int qflags)
>         if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND)
>                 iflags |= IB_ACCESS_ON_DEMAND;
>         return iflags;
> -};
> +}
> +
> +static u8 __qp_access_flags_from_ib(struct bnxt_qplib_chip_ctx *cctx, int iflags)
> +{
> +       u8 qflags = 0;
> +
> +       if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
> +               /* For Wh+ */
> +               return (u8)__from_ib_access_flags(iflags);
> +
> +       /* For P5, P7 and later chips */
> +       if (iflags & IB_ACCESS_LOCAL_WRITE)
> +               qflags |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
> +       if (iflags & IB_ACCESS_REMOTE_WRITE)
> +               qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
> +       if (iflags & IB_ACCESS_REMOTE_READ)
> +               qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
> +       if (iflags & IB_ACCESS_REMOTE_ATOMIC)
> +               qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC;
> +
> +       return qflags;
> +}
> +
> +static int __qp_access_flags_to_ib(struct bnxt_qplib_chip_ctx *cctx, u8 qflags)
> +{
> +       int iflags = 0;
> +
> +       if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
> +               /* For Wh+ */
> +               return __to_ib_access_flags(qflags);
> +
> +       /* For P5, P7 and later chips */
> +       if (qflags & CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE)
> +               iflags |= IB_ACCESS_LOCAL_WRITE;
> +       if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE)
> +               iflags |= IB_ACCESS_REMOTE_WRITE;
> +       if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_READ)
> +               iflags |= IB_ACCESS_REMOTE_READ;
> +       if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC)
> +               iflags |= IB_ACCESS_REMOTE_ATOMIC;
> +
> +       return iflags;
> +}
>
>  static void bnxt_re_check_and_set_relaxed_ordering(struct bnxt_re_dev *rdev,
>                                                    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,
>         if (qp_attr_mask & IB_QP_ACCESS_FLAGS) {
>                 qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS;
>                 qp->qplib_qp.access =
> -                       __from_ib_access_flags(qp_attr->qp_access_flags);
> +                       __qp_access_flags_from_ib(qp->qplib_qp.cctx,
> +                                                 qp_attr->qp_access_flags);
>                 /* LOCAL_WRITE access must be set to allow RC receive */
> -               qp->qplib_qp.access |= BNXT_QPLIB_ACCESS_LOCAL_WRITE;
> -               /* Temp: Set all params on QP as of now */
> -               qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
> -               qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
> +               qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
>         }
>         if (qp_attr_mask & IB_QP_PKEY_INDEX) {
>                 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,
>         qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state);
>         qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state);
>         qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0;
> -       qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access);
> +       qp_attr->qp_access_flags = __qp_access_flags_to_ib(qp->qplib_qp.cctx,
> +                                                          qplib_qp->access);
>         qp_attr->pkey_index = qplib_qp->pkey_index;
>         qp_attr->qkey = qplib_qp->qkey;
>         qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
> --
> 2.5.5
>
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
index 2a21a90..e610807 100644
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
@@ -94,9 +94,9 @@  static int __from_ib_access_flags(int iflags)
 	return qflags;
 };
 
-static enum ib_access_flags __to_ib_access_flags(int qflags)
+static int __to_ib_access_flags(int qflags)
 {
-	enum ib_access_flags iflags = 0;
+	int iflags = 0;
 
 	if (qflags & BNXT_QPLIB_ACCESS_LOCAL_WRITE)
 		iflags |= IB_ACCESS_LOCAL_WRITE;
@@ -113,7 +113,49 @@  static enum ib_access_flags __to_ib_access_flags(int qflags)
 	if (qflags & BNXT_QPLIB_ACCESS_ON_DEMAND)
 		iflags |= IB_ACCESS_ON_DEMAND;
 	return iflags;
-};
+}
+
+static u8 __qp_access_flags_from_ib(struct bnxt_qplib_chip_ctx *cctx, int iflags)
+{
+	u8 qflags = 0;
+
+	if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
+		/* For Wh+ */
+		return (u8)__from_ib_access_flags(iflags);
+
+	/* For P5, P7 and later chips */
+	if (iflags & IB_ACCESS_LOCAL_WRITE)
+		qflags |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
+	if (iflags & IB_ACCESS_REMOTE_WRITE)
+		qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
+	if (iflags & IB_ACCESS_REMOTE_READ)
+		qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
+	if (iflags & IB_ACCESS_REMOTE_ATOMIC)
+		qflags |= CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC;
+
+	return qflags;
+}
+
+static int __qp_access_flags_to_ib(struct bnxt_qplib_chip_ctx *cctx, u8 qflags)
+{
+	int iflags = 0;
+
+	if (!bnxt_qplib_is_chip_gen_p5_p7(cctx))
+		/* For Wh+ */
+		return __to_ib_access_flags(qflags);
+
+	/* For P5, P7 and later chips */
+	if (qflags & CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE)
+		iflags |= IB_ACCESS_LOCAL_WRITE;
+	if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE)
+		iflags |= IB_ACCESS_REMOTE_WRITE;
+	if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_READ)
+		iflags |= IB_ACCESS_REMOTE_READ;
+	if (qflags & CMDQ_MODIFY_QP_ACCESS_REMOTE_ATOMIC)
+		iflags |= IB_ACCESS_REMOTE_ATOMIC;
+
+	return iflags;
+}
 
 static void bnxt_re_check_and_set_relaxed_ordering(struct bnxt_re_dev *rdev,
 						   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,
 	if (qp_attr_mask & IB_QP_ACCESS_FLAGS) {
 		qp->qplib_qp.modify_flags |= CMDQ_MODIFY_QP_MODIFY_MASK_ACCESS;
 		qp->qplib_qp.access =
-			__from_ib_access_flags(qp_attr->qp_access_flags);
+			__qp_access_flags_from_ib(qp->qplib_qp.cctx,
+						  qp_attr->qp_access_flags);
 		/* LOCAL_WRITE access must be set to allow RC receive */
-		qp->qplib_qp.access |= BNXT_QPLIB_ACCESS_LOCAL_WRITE;
-		/* Temp: Set all params on QP as of now */
-		qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_WRITE;
-		qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_REMOTE_READ;
+		qp->qplib_qp.access |= CMDQ_MODIFY_QP_ACCESS_LOCAL_WRITE;
 	}
 	if (qp_attr_mask & IB_QP_PKEY_INDEX) {
 		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,
 	qp_attr->qp_state = __to_ib_qp_state(qplib_qp->state);
 	qp_attr->cur_qp_state = __to_ib_qp_state(qplib_qp->cur_qp_state);
 	qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ? 1 : 0;
-	qp_attr->qp_access_flags = __to_ib_access_flags(qplib_qp->access);
+	qp_attr->qp_access_flags = __qp_access_flags_to_ib(qp->qplib_qp.cctx,
+							   qplib_qp->access);
 	qp_attr->pkey_index = qplib_qp->pkey_index;
 	qp_attr->qkey = qplib_qp->qkey;
 	qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;