]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/bnxt_re: Initialize fw with roce_mirror support
authorSaravanan Vajravel <saravanan.vajravel@broadcom.com>
Fri, 22 Aug 2025 04:07:59 +0000 (09:37 +0530)
committerLeon Romanovsky <leon@kernel.org>
Thu, 11 Sep 2025 06:18:22 +0000 (02:18 -0400)
- Check FW capability for roce_mirror support.
- Initialize FW with roce_mirror support.
- When modifying QP, use unique GID for sgid incase of RawEth QP.

Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Reviewed-by: Kashyap Desai <kashyap.desai@broadcom.com>
Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
Reviewed-by: Anantha Prabhu <anantha.prabhu@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Link: https://patch.msgid.link/20250822040801.776196-9-kalesh-anakkur.purayil@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/bnxt_re/ib_verbs.c
drivers/infiniband/hw/bnxt_re/main.c
drivers/infiniband/hw/bnxt_re/qplib_fp.c
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
drivers/infiniband/hw/bnxt_re/roce_hsi.h

index 90c23d0ee26296f9b76b56686e573079d231fa97..f12d6cd3ae93113f5c555898dc207164d211e04f 100644 (file)
@@ -1037,6 +1037,8 @@ static u8 __from_ib_qp_type(enum ib_qp_type type)
                return CMDQ_CREATE_QP_TYPE_RC;
        case IB_QPT_UD:
                return CMDQ_CREATE_QP_TYPE_UD;
+       case IB_QPT_RAW_PACKET:
+               return CMDQ_CREATE_QP_TYPE_RAW_ETHERTYPE;
        default:
                return IB_QPT_MAX;
        }
index 8179501a0135b64c709d9d944431150aa6074a4c..0225e1d2ada0903c7a6abb9b4125df8364c82d88 100644 (file)
@@ -654,6 +654,8 @@ int bnxt_re_hwrm_qcaps(struct bnxt_re_dev *rdev)
        flags_ext2 = le32_to_cpu(resp.flags_ext2);
        cctx->modes.dbr_pacing = flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_DBR_PACING_EXT_SUPPORTED ||
                                 flags_ext2 & FUNC_QCAPS_RESP_FLAGS_EXT2_DBR_PACING_V0_SUPPORTED;
+       cctx->modes.roce_mirror = !!(le32_to_cpu(resp.flags_ext3) &
+                                    FUNC_QCAPS_RESP_FLAGS_EXT3_MIRROR_ON_ROCE_SUPPORTED);
        return 0;
 }
 
index 092310571dcc4adcb878496ad13aad70affbaaa2..43a4ef76272d9d182859ed9700d72e94f1a4bac2 100644 (file)
@@ -1335,6 +1335,7 @@ static bool is_optimized_state_transition(struct bnxt_qplib_qp *qp)
 
 int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
 {
+       struct bnxt_qplib_sgid_tbl *sgid_tbl = &res->sgid_tbl;
        struct bnxt_qplib_rcfw *rcfw = res->rcfw;
        struct creq_modify_qp_resp resp = {};
        struct bnxt_qplib_cmdqmsg msg = {};
@@ -1386,9 +1387,14 @@ int bnxt_qplib_modify_qp(struct bnxt_qplib_res *res, struct bnxt_qplib_qp *qp)
        if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_FLOW_LABEL)
                req.flow_label = cpu_to_le32(qp->ah.flow_label);
 
-       if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_SGID_INDEX)
-               req.sgid_index = cpu_to_le16(res->sgid_tbl.hw_id
-                                            [qp->ah.sgid_index]);
+       if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_SGID_INDEX) {
+               if (qp->type == CMDQ_CREATE_QP_TYPE_RAW_ETHERTYPE)
+                       req.sgid_index =
+                               cpu_to_le16(sgid_tbl->hw_id[qp->ugid_index]);
+               else
+                       req.sgid_index =
+                               cpu_to_le16(sgid_tbl->hw_id[qp->ah.sgid_index]);
+       }
 
        if (bmask & CMDQ_MODIFY_QP_MODIFY_MASK_HOP_LIMIT)
                req.hop_limit = qp->ah.hop_limit;
index b97e75404139b7dc0f1372b00787fd4eae312e6e..5e34395472c5b50d2330e5a81c8fe2aecfdbe5df 100644 (file)
@@ -905,6 +905,10 @@ skip_ctx_setup:
                flags |= CMDQ_INITIALIZE_FW_FLAGS_OPTIMIZE_MODIFY_QP_SUPPORTED;
        if (rcfw->res->en_dev->flags & BNXT_EN_FLAG_ROCE_VF_RES_MGMT)
                flags |= CMDQ_INITIALIZE_FW_FLAGS_L2_VF_RESOURCE_MGMT;
+       if (bnxt_qplib_roce_mirror_supported(rcfw->res->cctx)) {
+               flags |= CMDQ_INITIALIZE_FW_FLAGS_MIRROR_ON_ROCE_SUPPORTED;
+               rcfw->roce_mirror = true;
+       }
        req.flags |= cpu_to_le16(flags);
        req.stat_ctx_id = cpu_to_le32(ctx->stats.fw_id);
        bnxt_qplib_fill_cmdqmsg(&msg, &req, &resp, NULL, sizeof(req), sizeof(resp), 0);
index cfdf69a3fe9a8aa6a95caa7c01df0c183d6ebf1d..99ecd72e72e20343635742bd36ce7ba57552202e 100644 (file)
@@ -219,6 +219,7 @@ struct cmdq_initialize_fw {
        #define CMDQ_INITIALIZE_FW_FLAGS_HW_REQUESTER_RETX_SUPPORTED     0x2UL
        #define CMDQ_INITIALIZE_FW_FLAGS_OPTIMIZE_MODIFY_QP_SUPPORTED    0x8UL
        #define CMDQ_INITIALIZE_FW_FLAGS_L2_VF_RESOURCE_MGMT             0x10UL
+       #define CMDQ_INITIALIZE_FW_FLAGS_MIRROR_ON_ROCE_SUPPORTED        0x80UL
        __le16  cookie;
        u8      resp_size;
        u8      reserved8;