Create an additional auxiliary device to support fwctl.
The next patch will create bnxt_fwctl and bind to this
device.
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 12 ++++++++++--
include/linux/bnxt/ulp.h | 1 +
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 4cdfc9641639..13159c0515bb 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -62,6 +62,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)
@@ -289,6 +291,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);
@@ -325,7 +332,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;
}
@@ -525,7 +532,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
};
--
2.39.1
On Sun, Jan 25, 2026 at 09:37:08PM -0800, Pavan Chebbi wrote:
> Create an additional auxiliary device to support fwctl.
> The next patch will create bnxt_fwctl and bind to this
> device.
>
> Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> ---
> drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 12 ++++++++++--
> include/linux/bnxt/ulp.h | 1 +
> 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 4cdfc9641639..13159c0515bb 100644
> --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
> +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
> @@ -62,6 +62,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",
> }};
I would expect the name to be part of auxiliary_driver initialization
and not dynamically added.
5113 static struct auxiliary_driver mlx5r_driver = {
5114 .name = "rdma",
5115 .probe = mlx5r_probe,
5116 .remove = mlx5r_remove,
5117 .id_table = mlx5r_id_table,
5118 };
Thanks
On Thu, Jan 29, 2026 at 7:06 PM Leon Romanovsky <leon@kernel.org> wrote:
>
> On Sun, Jan 25, 2026 at 09:37:08PM -0800, Pavan Chebbi wrote:
> > Create an additional auxiliary device to support fwctl.
> > The next patch will create bnxt_fwctl and bind to this
> > device.
> >
> > Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
> > Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> > ---
> > drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 12 ++++++++++--
> > include/linux/bnxt/ulp.h | 1 +
> > 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 4cdfc9641639..13159c0515bb 100644
> > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
> > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
> > @@ -62,6 +62,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",
> > }};
>
> I would expect the name to be part of auxiliary_driver initialization
> and not dynamically added.
No, this is more like struct mlx5_adev_device.
>
> 5113 static struct auxiliary_driver mlx5r_driver = {
> 5114 .name = "rdma",
> 5115 .probe = mlx5r_probe,
> 5116 .remove = mlx5r_remove,
> 5117 .id_table = mlx5r_id_table,
> 5118 };
>
> Thanks
© 2016 - 2026 Red Hat, Inc.