summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Chebbi <pavan.chebbi@broadcom.com>2026-03-14 18:16:03 +0300
committerJason Gunthorpe <jgg@nvidia.com>2026-03-27 15:12:36 +0300
commit5102836da8397deb2a3d8b9e574238781ea47390 (patch)
treebf7a4c7aeaafeb404c319f8eead32040f5650d3a
parent2c7c85c8c7881d57c5fa1114f4b0dbd7fc53a36f (diff)
downloadlinux-5102836da8397deb2a3d8b9e574238781ea47390.tar.xz
fwctl/bnxt_en: Create an aux device for fwctl
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>
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c12
-rw-r--r--include/linux/bnxt/ulp.h1
2 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index 3705ef3a75c9..052bf69cfa4c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -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;
diff --git a/include/linux/bnxt/ulp.h b/include/linux/bnxt/ulp.h
index 1a4643c46f86..0851ad3394b0 100644
--- a/include/linux/bnxt/ulp.h
+++ b/include/linux/bnxt/ulp.h
@@ -24,6 +24,7 @@ struct bnxt;
enum bnxt_auxdev_type {
BNXT_AUXDEV_RDMA = 0,
+ BNXT_AUXDEV_FWCTL,
__BNXT_AUXDEV_MAX
};