[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251014081033.1175053-4-pavan.chebbi@broadcom.com>
Date: Tue, 14 Oct 2025 01:10:31 -0700
From: Pavan Chebbi <pavan.chebbi@...adcom.com>
To: jgg@...pe.ca,
michael.chan@...adcom.com
Cc: dave.jiang@...el.com,
saeedm@...dia.com,
Jonathan.Cameron@...wei.com,
davem@...emloft.net,
corbet@....net,
edumazet@...gle.com,
gospo@...adcom.com,
kuba@...nel.org,
netdev@...r.kernel.org,
pabeni@...hat.com,
andrew+netdev@...n.ch,
selvin.xavier@...adcom.com,
leon@...nel.org,
kalesh-anakkur.purayil@...adcom.com,
Pavan Chebbi <pavan.chebbi@...adcom.com>
Subject: [PATCH net-next v5 3/5] 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.
Reviewed-by: Andy Gospodarek <gospo@...adcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@...adcom.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 +++++++-
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 12 ++++++++++--
include/linux/bnxt/ulp.h | 1 +
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index dcbb321cee3a..5244deb15ecc 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -16188,11 +16188,13 @@ static void bnxt_remove_one(struct pci_dev *pdev)
__bnxt_sriov_disable(bp);
bnxt_aux_device_del(bp, BNXT_AUXDEV_RDMA);
+ bnxt_aux_device_del(bp, BNXT_AUXDEV_FWCTL);
unregister_netdev(dev);
bnxt_ptp_clear(bp);
bnxt_aux_device_uninit(bp, BNXT_AUXDEV_RDMA);
+ bnxt_aux_device_uninit(bp, BNXT_AUXDEV_FWCTL);
bnxt_auxdev_id_free(bp, bp->auxdev_id);
bnxt_free_l2_filters(bp, true);
@@ -16779,8 +16781,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
bnxt_set_tpa_flags(bp);
bnxt_init_ring_params(bp);
bnxt_set_ring_params(bp);
- if (!bnxt_auxdev_id_alloc(bp))
+ if (!bnxt_auxdev_id_alloc(bp)) {
bnxt_aux_device_init(bp, BNXT_AUXDEV_RDMA);
+ bnxt_aux_device_init(bp, BNXT_AUXDEV_FWCTL);
+ }
rc = bnxt_set_dflt_rings(bp, true);
if (rc) {
if (BNXT_VF(bp) && rc == -ENODEV) {
@@ -16845,6 +16849,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
bnxt_dl_fw_reporters_create(bp);
bnxt_aux_device_add(bp, BNXT_AUXDEV_RDMA);
+ bnxt_aux_device_add(bp, BNXT_AUXDEV_FWCTL);
bnxt_print_device_info(bp);
@@ -16853,6 +16858,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
return 0;
init_err_cleanup:
bnxt_aux_device_uninit(bp, BNXT_AUXDEV_RDMA);
+ bnxt_aux_device_uninit(bp, BNXT_AUXDEV_FWCTL);
bnxt_auxdev_id_free(bp, bp->auxdev_id);
bnxt_dl_unregister(bp);
init_err_dl:
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index e15cf4774e9b..2e06cf5e3604 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -35,6 +35,8 @@ struct bnxt_aux_device {
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)
@@ -262,6 +264,11 @@ void bnxt_ulp_stop(struct bnxt *bp)
continue;
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);
@@ -298,7 +305,7 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
return;
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;
}
@@ -496,7 +503,8 @@ void bnxt_aux_device_add(struct bnxt *bp, enum bnxt_auxdev_type idx)
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 99cd872f6605..3cd9d128e5d1 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
Powered by blists - more mailing lists