[PATCH v3 fwctl 3/5] fwctl/bnxt_en: Create an aux device for fwctl

Pavan Chebbi posted 5 patches 1 week, 2 days ago
There is a newer version of this series
[PATCH v3 fwctl 3/5] fwctl/bnxt_en: Create an aux device for fwctl
Posted by Pavan Chebbi 1 week, 2 days ago
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 3097fc5755e6..9fd3c1e43224 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;
 		}
@@ -521,7 +528,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
Re: [PATCH v3 fwctl 3/5] fwctl/bnxt_en: Create an aux device for fwctl
Posted by Saeed Mahameed 3 days, 11 hours ago
On 29 Jan 07:54, 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 3097fc5755e6..9fd3c1e43224 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;
>+		}

This felt a bet off so I had to comment on patch 2. The fact that you need
to maintain a edev flag for ULP state was before using aux bus for all
upls which was kindof ok since it was unconditionally set on
bnxt_stop/start, but now the state got pretty complex with the introduction
of dangling aux devices as I mentioned in the previous patch. please see
suggestion on that patch, I am sure this can be simplified a lot.

> 		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;
> 		}
>@@ -521,7 +528,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
>
Re: [PATCH v3 fwctl 3/5] fwctl/bnxt_en: Create an aux device for fwctl
Posted by Jonathan Cameron 1 week, 1 day ago
On Thu, 29 Jan 2026 07:54:51 -0800
Pavan Chebbi <pavan.chebbi@broadcom.com> 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 3097fc5755e6..9fd3c1e43224 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) {

Similar to earlier. I'd like this stuff to be callbacks or data in bnxt_aux_devices
to keep the code flow simpler.

> +			edev->flags |= BNXT_EN_FLAG_ULP_STOPPED;
> +			mutex_unlock(&edev->en_dev_lock);
> +			continue;