Commit 8f3eea9d authored by Lucas Stach's avatar Lucas Stach
Browse files

drm/etnaviv: keep MMU context across runtime suspend/resume



The MMU state may be kept across a runtime suspend/resume cycle, as we
avoid a full hardware reset to keep the latency of the runtime PM small.

Don't pretend that the MMU state is lost in driver state. The MMU
context is pushed out when new HW jobs with a different context are
coming in. The only exception to this is when the GPU is unbound, in
which case we need to make sure to also free the last active context.

Cc: stable@vger.kernel.org # 5.4
Reported-by: default avatarMichael Walle <michael@walle.cc>
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Tested-by: default avatarMichael Walle <michael@walle.cc>
Tested-by: default avatarMarek Vasut <marex@denx.de>
Reviewed-by: default avatarChristian Gmeiner <christian.gmeiner@gmail.com>
parent 23e0f5a5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1596,9 +1596,6 @@ static int etnaviv_gpu_hw_suspend(struct etnaviv_gpu *gpu)
		 */
		etnaviv_gpu_wait_idle(gpu, 100);

		etnaviv_iommu_context_put(gpu->mmu_context);
		gpu->mmu_context = NULL;

		gpu->fe_running = false;
	}

@@ -1747,6 +1744,9 @@ static void etnaviv_gpu_unbind(struct device *dev, struct device *master,
	etnaviv_gpu_hw_suspend(gpu);
#endif

	if (gpu->mmu_context)
		etnaviv_iommu_context_put(gpu->mmu_context);

	if (gpu->initialized) {
		etnaviv_cmdbuf_free(&gpu->buffer);
		etnaviv_iommu_global_fini(gpu);