Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9873ef07 authored by Jordan Crouse's avatar Jordan Crouse Committed by Rob Clark
Browse files

drm/msm: Make sure to detach the MMU during GPU cleanup



We should be detaching the MMU before destroying the address
space. To do this cleanly, the detach has to happen in
adreno_gpu_cleanup() because it needs access to structs
in adreno_gpu.c.  Plus it is better symmetry to have
the attach and detach at the same code level.

Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 3a882143
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -417,18 +417,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);
}
+0 −3
Original line number Diff line number Diff line
@@ -661,9 +661,6 @@ void msm_gpu_cleanup(struct msm_gpu *gpu)
		msm_ringbuffer_destroy(gpu->rb);
	}

	if (gpu->aspace)
		msm_gem_address_space_destroy(gpu->aspace);

	if (gpu->fctx)
		msm_fence_context_free(gpu->fctx);
}