summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
diff options
context:
space:
mode:
authorAjit Khaparde <ajit.khaparde@broadcom.com>2022-09-07 13:22:42 -0700
committerAjit Khaparde <ajit.khaparde@broadcom.com>2023-02-01 19:02:14 -0800
commit3b65e9456c29217429158203bfdce4361f45e0be (patch)
tree8b46c6753a09e70dc5abd84ef6753eefe4203379 /drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
parent63669ab384eadebefd1e2a60a15a5431ee874fab (diff)
bnxt_en: Use auxiliary bus calls over proprietary calls
Wherever possible use the function ops provided by auxiliary bus instead of using proprietary ops. Defined bnxt_re_suspend and bnxt_re_resume calls which can be invoked by the bnxt_en driver instead of the ULP stop/start calls. Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com> Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
index 218c56554b91..72815f3b1bd2 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
@@ -271,26 +271,31 @@ static void bnxt_ulp_put(struct bnxt_ulp *ulp)
void bnxt_ulp_stop(struct bnxt *bp)
{
+ struct bnxt_aux_priv *aux_priv = bp->aux_priv;
struct bnxt_en_dev *edev = bp->edev;
- struct bnxt_ulp_ops *ops;
- struct bnxt_ulp *ulp;
if (!edev)
return;
edev->flags |= BNXT_EN_FLAG_ULP_STOPPED;
- ulp = edev->ulp_tbl;
- ops = rtnl_dereference(ulp->ulp_ops);
- if (!ops || !ops->ulp_stop)
- return;
- ops->ulp_stop(ulp->handle);
+ if (aux_priv) {
+ struct auxiliary_device *adev;
+
+ adev = &aux_priv->aux_dev;
+ if (adev->dev.driver) {
+ struct auxiliary_driver *adrv;
+ pm_message_t pm = {};
+
+ adrv = to_auxiliary_drv(adev->dev.driver);
+ adrv->suspend(adev, pm);
+ }
+ }
}
void bnxt_ulp_start(struct bnxt *bp, int err)
{
+ struct bnxt_aux_priv *aux_priv = bp->aux_priv;
struct bnxt_en_dev *edev = bp->edev;
- struct bnxt_ulp_ops *ops;
- struct bnxt_ulp *ulp;
if (!edev)
return;
@@ -300,11 +305,18 @@ void bnxt_ulp_start(struct bnxt *bp, int err)
if (err)
return;
- ulp = edev->ulp_tbl;
- ops = rtnl_dereference(ulp->ulp_ops);
- if (!ops || !ops->ulp_start)
- return;
- ops->ulp_start(ulp->handle);
+ if (aux_priv) {
+ struct auxiliary_device *adev;
+
+ adev = &aux_priv->aux_dev;
+ if (adev->dev.driver) {
+ struct auxiliary_driver *adrv;
+
+ adrv = to_auxiliary_drv(adev->dev.driver);
+ adrv->resume(adev);
+ }
+ }
+
}
void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs)