|
@@ -418,18 +418,27 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-void adreno_gpu_cleanup(struct adreno_gpu *gpu)
|
|
|
+void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu)
|
|
|
{
|
|
|
- if (gpu->memptrs_bo) {
|
|
|
- if (gpu->memptrs)
|
|
|
- msm_gem_put_vaddr(gpu->memptrs_bo);
|
|
|
+ struct msm_gpu *gpu = &adreno_gpu->base;
|
|
|
+
|
|
|
+ if (adreno_gpu->memptrs_bo) {
|
|
|
+ if (adreno_gpu->memptrs)
|
|
|
+ msm_gem_put_vaddr(adreno_gpu->memptrs_bo);
|
|
|
+
|
|
|
+ if (adreno_gpu->memptrs_iova)
|
|
|
+ msm_gem_put_iova(adreno_gpu->memptrs_bo, gpu->id);
|
|
|
+
|
|
|
+ drm_gem_object_unreference_unlocked(adreno_gpu->memptrs_bo);
|
|
|
+ }
|
|
|
+ release_firmware(adreno_gpu->pm4);
|
|
|
+ release_firmware(adreno_gpu->pfp);
|
|
|
|
|
|
- if (gpu->memptrs_iova)
|
|
|
- msm_gem_put_iova(gpu->memptrs_bo, gpu->base.id);
|
|
|
+ msm_gpu_cleanup(gpu);
|
|
|
|
|
|
- drm_gem_object_unreference_unlocked(gpu->memptrs_bo);
|
|
|
+ if (gpu->aspace) {
|
|
|
+ gpu->aspace->mmu->funcs->detach(gpu->aspace->mmu,
|
|
|
+ iommu_ports, ARRAY_SIZE(iommu_ports));
|
|
|
+ msm_gem_address_space_destroy(gpu->aspace);
|
|
|
}
|
|
|
- release_firmware(gpu->pm4);
|
|
|
- release_firmware(gpu->pfp);
|
|
|
- msm_gpu_cleanup(&gpu->base);
|
|
|
}
|