Create an additional auxiliary device to support fwctl. The next patch will create bnxt_fwctl and bind to this device. Reviewed-by: Andy Gospodarek Signed-off-by: Pavan Chebbi --- 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