hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/net/ethernet/freescale/fec_main.c
....@@ -3850,9 +3850,11 @@
38503850 struct device_node *np = pdev->dev.of_node;
38513851 int ret;
38523852
3853
- ret = pm_runtime_resume_and_get(&pdev->dev);
3853
+ ret = pm_runtime_get_sync(&pdev->dev);
38543854 if (ret < 0)
3855
- return ret;
3855
+ dev_err(&pdev->dev,
3856
+ "Failed to resume device in remove callback (%pe)\n",
3857
+ ERR_PTR(ret));
38563858
38573859 cancel_work_sync(&fep->tx_timeout_work);
38583860 fec_ptp_stop(pdev);
....@@ -3865,8 +3867,13 @@
38653867 of_phy_deregister_fixed_link(np);
38663868 of_node_put(fep->phy_node);
38673869
3868
- clk_disable_unprepare(fep->clk_ahb);
3869
- clk_disable_unprepare(fep->clk_ipg);
3870
+ /* After pm_runtime_get_sync() failed, the clks are still off, so skip
3871
+ * disabling them again.
3872
+ */
3873
+ if (ret >= 0) {
3874
+ clk_disable_unprepare(fep->clk_ahb);
3875
+ clk_disable_unprepare(fep->clk_ipg);
3876
+ }
38703877 pm_runtime_put_noidle(&pdev->dev);
38713878 pm_runtime_disable(&pdev->dev);
38723879