mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 21:33:52 +00:00
ravb: Fix "failed to switch device to config mode" message during unbind
This patch fixes the error "ravb 11c20000.ethernet eth0: failed to switch
device to config mode" during unbind.
We are doing register access after pm_runtime_put_sync().
We usually do cleanup in reverse order of init. Currently in
remove(), the "pm_runtime_put_sync" is not in reverse order.
Probe
reset_control_deassert(rstc);
pm_runtime_enable(&pdev->dev);
pm_runtime_get_sync(&pdev->dev);
remove
pm_runtime_put_sync(&pdev->dev);
unregister_netdev(ndev);
..
ravb_mdio_release(priv);
pm_runtime_disable(&pdev->dev);
Consider the call to unregister_netdev()
unregister_netdev->unregister_netdevice_queue->rollback_registered_many
that calls the below functions which access the registers after
pm_runtime_put_sync()
1) ravb_get_stats
2) ravb_close
Fixes: c156633f13
("Renesas Ethernet AVB driver proper")
Cc: stable@vger.kernel.org
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20221214105118.2495313-1-biju.das.jz@bp.renesas.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
2cb815cfc7
commit
c72a7e4259
1 changed files with 1 additions and 1 deletions
|
@ -2903,12 +2903,12 @@ static int ravb_remove(struct platform_device *pdev)
|
||||||
priv->desc_bat_dma);
|
priv->desc_bat_dma);
|
||||||
/* Set reset mode */
|
/* Set reset mode */
|
||||||
ravb_write(ndev, CCC_OPC_RESET, CCC);
|
ravb_write(ndev, CCC_OPC_RESET, CCC);
|
||||||
pm_runtime_put_sync(&pdev->dev);
|
|
||||||
unregister_netdev(ndev);
|
unregister_netdev(ndev);
|
||||||
if (info->nc_queues)
|
if (info->nc_queues)
|
||||||
netif_napi_del(&priv->napi[RAVB_NC]);
|
netif_napi_del(&priv->napi[RAVB_NC]);
|
||||||
netif_napi_del(&priv->napi[RAVB_BE]);
|
netif_napi_del(&priv->napi[RAVB_BE]);
|
||||||
ravb_mdio_release(priv);
|
ravb_mdio_release(priv);
|
||||||
|
pm_runtime_put_sync(&pdev->dev);
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
reset_control_assert(priv->rstc);
|
reset_control_assert(priv->rstc);
|
||||||
free_netdev(ndev);
|
free_netdev(ndev);
|
||||||
|
|
Loading…
Reference in a new issue