]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bnxt_en: Add devlink support for ENABLE_ROCE nvm parameter
authorPavan Chebbi <pavan.chebbi@broadcom.com>
Mon, 10 Mar 2025 18:31:25 +0000 (11:31 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 18 Mar 2025 09:25:22 +0000 (10:25 +0100)
Add set/show support for the ENABLE_ROCE NVM parameter to
enable/disable RoCE for a PF.

Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Co-developed-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://patch.msgid.link/20250310183129.3154117-4-michael.chan@broadcom.com
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Documentation/networking/devlink/bnxt.rst
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h

index a4fb27663cd6b1426897916bce6c39e6acf4eee6..9a8b3d76d11f411b1474beea4fbf2a409c6ad225 100644 (file)
@@ -24,6 +24,8 @@ Parameters
      - Permanent
    * - ``enable_remote_dev_reset``
      - Runtime
+   * - ``enable_roce``
+     - Permanent
 
 The ``bnxt`` driver also implements the following driver-specific
 parameters.
index e61523854dd8b4c736298ba46a05ff32be10c27b..777880594a04c1d2f432c98d3633f3904a0f731d 100644 (file)
@@ -679,6 +679,8 @@ static const struct bnxt_dl_nvm_param nvm_params[] = {
         NVM_OFF_MSIX_VEC_PER_PF_MAX, BNXT_NVM_SHARED_CFG, 10, 4},
        {DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
         NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7, 4},
+       {DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, NVM_OFF_SUPPORT_RDMA,
+        BNXT_NVM_FUNC_CFG, 1, 1},
        {BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
         BNXT_NVM_SHARED_CFG, 1, 1},
 };
@@ -1132,6 +1134,32 @@ static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
        return bnxt_hwrm_nvm_req(bp, id, req, &ctx->val);
 }
 
+static int bnxt_dl_roce_validate(struct devlink *dl, u32 id,
+                                union devlink_param_value val,
+                                struct netlink_ext_ack *extack)
+{
+       const struct bnxt_dl_nvm_param nvm_roce_cap = {0, NVM_OFF_RDMA_CAPABLE,
+               BNXT_NVM_SHARED_CFG, 1, 1};
+       struct bnxt *bp = bnxt_get_bp_from_dl(dl);
+       struct hwrm_nvm_get_variable_input *req;
+       union devlink_param_value roce_cap;
+       int rc;
+
+       rc = hwrm_req_init(bp, req, HWRM_NVM_GET_VARIABLE);
+       if (rc)
+               return rc;
+
+       if (__bnxt_hwrm_nvm_req(bp, &nvm_roce_cap, req, &roce_cap)) {
+               NL_SET_ERR_MSG_MOD(extack, "Unable to verify if device is RDMA Capable");
+               return -EINVAL;
+       }
+       if (!roce_cap.vbool) {
+               NL_SET_ERR_MSG_MOD(extack, "Device does not support RDMA");
+               return -EINVAL;
+       }
+       return 0;
+}
+
 static int bnxt_dl_msix_validate(struct devlink *dl, u32 id,
                                 union devlink_param_value val,
                                 struct netlink_ext_ack *extack)
@@ -1196,6 +1224,10 @@ static const struct devlink_param bnxt_dl_params[] = {
                              BIT(DEVLINK_PARAM_CMODE_PERMANENT),
                              bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
                              bnxt_dl_msix_validate),
+       DEVLINK_PARAM_GENERIC(ENABLE_ROCE,
+                             BIT(DEVLINK_PARAM_CMODE_PERMANENT),
+                             bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
+                             bnxt_dl_roce_validate),
        DEVLINK_PARAM_DRIVER(BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK,
                             "gre_ver_check", DEVLINK_PARAM_TYPE_BOOL,
                             BIT(DEVLINK_PARAM_CMODE_PERMANENT),
index b8105065367b6029d03863e3c3be83637906e2d4..7f45dcd7b28792facd59cda3637f27cb73e4023d 100644 (file)
@@ -41,8 +41,10 @@ static inline void bnxt_dl_set_remote_reset(struct devlink *dl, bool value)
 #define NVM_OFF_MSIX_VEC_PER_PF_MAX    108
 #define NVM_OFF_MSIX_VEC_PER_PF_MIN    114
 #define NVM_OFF_IGNORE_ARI             164
+#define NVM_OFF_RDMA_CAPABLE           161
 #define NVM_OFF_DIS_GRE_VER_CHECK      171
 #define NVM_OFF_ENABLE_SRIOV           401
+#define NVM_OFF_SUPPORT_RDMA           506
 #define NVM_OFF_NVM_CFG_VER            602
 
 #define BNXT_NVM_CFG_VER_BITS          8