scsi: ufs: ti-j721e-ufs: Fix unwinding of pm_runtime changes
authorVignesh Raghavendra <vigneshr@ti.com>
Tue, 26 May 2020 10:03:40 +0000 (15:33 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 27 May 2020 01:33:54 +0000 (21:33 -0400)
Fix unwinding of pm_runtime changes when bailing out of driver probe due to
a failure and also on removal of driver.

Link: https://lore.kernel.org/r/20200526100340.15032-1-vigneshr@ti.com
Fixes: 6979e56cec97 ("scsi: ufs: Add driver for TI wrapper for Cadence UFS IP")
Reported-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ti-j721e-ufs.c

index 5216d22..46bb905 100644 (file)
@@ -32,14 +32,14 @@ static int ti_j721e_ufs_probe(struct platform_device *pdev)
        ret = pm_runtime_get_sync(dev);
        if (ret < 0) {
                pm_runtime_put_noidle(dev);
-               return ret;
+               goto disable_pm;
        }
 
        /* Select MPHY refclk frequency */
        clk = devm_clk_get(dev, NULL);
        if (IS_ERR(clk)) {
                dev_err(dev, "Cannot claim MPHY clock.\n");
-               return PTR_ERR(clk);
+               goto clk_err;
        }
        clk_rate = clk_get_rate(clk);
        if (clk_rate == 26000000)
@@ -54,16 +54,23 @@ static int ti_j721e_ufs_probe(struct platform_device *pdev)
                                   dev);
        if (ret) {
                dev_err(dev, "failed to populate child nodes %d\n", ret);
-               pm_runtime_put_sync(dev);
+               goto clk_err;
        }
 
        return ret;
+
+clk_err:
+       pm_runtime_put_sync(dev);
+disable_pm:
+       pm_runtime_disable(dev);
+       return ret;
 }
 
 static int ti_j721e_ufs_remove(struct platform_device *pdev)
 {
        of_platform_depopulate(&pdev->dev);
        pm_runtime_put_sync(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
 
        return 0;
 }