diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-08-20 01:17:33 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-08-20 01:17:33 -0700 |
| commit | a254db548d7fb2526a7b65d65294fdc71b3f92a3 (patch) | |
| tree | 4bbb1668de62f2ff74f48cfe2dc7c235fd16e09c | |
| parent | d7d541d471b816f9ca9c7113a509006515b49f7f (diff) | |
| parent | cfa0dc20936b81668b99cd7f1448fb5ddf489b00 (diff) | |
Merge "drm/msm: Free all allocated resources in case hardware init fails" into msm-4.4
| -rw-r--r-- | drivers/gpu/drm/msm/adreno/adreno_device.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gpu.c | 18 |
2 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c index a498a60cd52d..4e4709d6172f 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_device.c +++ b/drivers/gpu/drm/msm/adreno/adreno_device.c @@ -173,6 +173,9 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev) ret = gpu->funcs->hw_init(gpu); if (ret) { dev_err(dev->dev, "gpu hw init failed: %d\n", ret); + mutex_lock(&dev->struct_mutex); + gpu->funcs->pm_suspend(gpu); + mutex_unlock(&dev->struct_mutex); gpu->funcs->destroy(gpu); gpu = NULL; } else { diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 9320437e923d..5f9d8ef365da 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -1028,4 +1028,22 @@ void msm_gpu_cleanup(struct msm_gpu *gpu) msm_gpu_destroy_address_space(gpu->aspace); msm_gpu_destroy_address_space(gpu->secure_aspace); + + if (gpu->gpu_reg) + devm_regulator_put(gpu->gpu_reg); + + if (gpu->gpu_cx) + devm_regulator_put(gpu->gpu_cx); + + if (gpu->ebi1_clk) + devm_clk_put(&pdev->dev, gpu->ebi1_clk); + + for (i = gpu->nr_clocks - 1; i >= 0; i--) + if (gpu->grp_clks[i]) + devm_clk_put(&pdev->dev, gpu->grp_clks[i]); + + devm_kfree(&pdev->dev, gpu->grp_clks); + + if (gpu->mmio) + devm_iounmap(&pdev->dev, gpu->mmio); } |
