]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fwctl/bnxt_en: Create an aux device for fwctl
authorPavan Chebbi <pavan.chebbi@broadcom.com>
Sat, 14 Mar 2026 15:16:03 +0000 (08:16 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 27 Mar 2026 12:12:36 +0000 (09:12 -0300)
Create an additional auxiliary device to support fwctl.
The next patch will create bnxt_fwctl and bind to this
device.

Link: https://patch.msgid.link/r/20260314151605.932749-4-pavan.chebbi@broadcom.com
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
include/linux/bnxt/ulp.h

index 3705ef3a75c9ec3ccef5246e6e73fc13fb222028..052bf69cfa4cddf5f8d251b47c7f940cc4ebe902 100644 (file)
@@ -50,6 +50,8 @@ static bool bnxt_auxdev_is_active(struct bnxt *bp, int idx)
 
 static struct bnxt_aux_device bnxt_aux_devices[__BNXT_AUXDEV_MAX] = {{
        .name           = "rdma",
+}, {
+       .name           = "fwctl",
 }};
 
 static void bnxt_fill_msix_vecs(struct bnxt *bp, struct bnxt_msix_entry *ent)
@@ -278,6 +280,11 @@ void bnxt_ulp_stop(struct bnxt *bp)
                aux_priv = bp->aux_priv[i];
                edev = bp->edev[i];
                mutex_lock(&edev->en_dev_lock);
+               if (i == BNXT_AUXDEV_FWCTL) {
+                       edev->flags |= BNXT_EN_FLAG_ULP_STOPPED;
+                       mutex_unlock(&edev->en_dev_lock);
+                       continue;
+               }
                if (!bnxt_ulp_registered(edev) ||
                    (edev->flags & BNXT_EN_FLAG_ULP_STOPPED)) {
                        mutex_unlock(&edev->en_dev_lock);
@@ -316,7 +323,7 @@ void bnxt_ulp_start(struct bnxt *bp)
                aux_priv = bp->aux_priv[i];
                edev = bp->edev[i];
                mutex_lock(&edev->en_dev_lock);
-               if (!bnxt_ulp_registered(edev) ||
+               if (i == BNXT_AUXDEV_FWCTL || !bnxt_ulp_registered(edev) ||
                    !(edev->flags & BNXT_EN_FLAG_ULP_STOPPED)) {
                        goto clear_flag_continue;
                }
@@ -520,7 +527,8 @@ void bnxt_aux_devices_add(struct bnxt *bp)
                        aux_dev = &bp->aux_priv[idx]->aux_dev;
                        rc = auxiliary_device_add(aux_dev);
                        if (rc) {
-                               netdev_warn(bp->dev, "Failed to add auxiliary device for ROCE\n");
+                               netdev_warn(bp->dev, "Failed to add auxiliary device for auxdev type %d\n",
+                                           idx);
                                auxiliary_device_uninit(aux_dev);
                                if (idx == BNXT_AUXDEV_RDMA)
                                        bp->flags &= ~BNXT_FLAG_ROCE_CAP;
index 1a4643c46f86fbca28a270cbad17ba6eeb9ca78c..0851ad3394b018b4b78362a0f97e0b08b8e8870c 100644 (file)
@@ -24,6 +24,7 @@ struct bnxt;
 
 enum bnxt_auxdev_type {
        BNXT_AUXDEV_RDMA = 0,
+       BNXT_AUXDEV_FWCTL,
        __BNXT_AUXDEV_MAX
 };