diff options
author | 2023-06-07 15:02:22 +0200 | |
---|---|---|
committer | 2023-07-17 11:32:31 +0200 | |
commit | e116be254aaa257d6bec534a39b26513c1798074 (patch) | |
tree | 037ae0115a2ebb2b813be81fcd227b99dca7e05f /drivers/gpu/drm/etnaviv | |
parent | drm/etnaviv: better track GPU state (diff) | |
download | linux-e116be254aaa257d6bec534a39b26513c1798074.tar.gz linux-e116be254aaa257d6bec534a39b26513c1798074.tar.bz2 linux-e116be254aaa257d6bec534a39b26513c1798074.zip |
drm/etnaviv: drop GPU initialized property
Now that it is only used to track the driver internal state of
the MMU global and cmdbuf objects, we can get rid of this property
by making the free/finit functions of those objects safe to call
on an uninitialized object.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Diffstat (limited to 'drivers/gpu/drm/etnaviv')
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 3 |
4 files changed, 8 insertions, 8 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c index 9dc20d892c15..721d633aece9 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_cmdbuf.c @@ -121,6 +121,9 @@ void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf) int order = order_base_2(ALIGN(cmdbuf->size, SUBALLOC_GRANULE) / SUBALLOC_GRANULE); + if (!suballoc) + return; + mutex_lock(&suballoc->lock); bitmap_release_region(suballoc->granule_map, cmdbuf->suballoc_offset / SUBALLOC_GRANULE, diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index a024f5422df2..53050cf68e1b 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -876,8 +876,6 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu) pm_runtime_mark_last_busy(gpu->dev); pm_runtime_put_autosuspend(gpu->dev); - gpu->initialized = true; - return 0; fail: @@ -1805,11 +1803,8 @@ static void etnaviv_gpu_unbind(struct device *dev, struct device *master, if (gpu->mmu_context) etnaviv_iommu_context_put(gpu->mmu_context); - if (gpu->initialized) { - etnaviv_cmdbuf_free(&gpu->buffer); - etnaviv_iommu_global_fini(gpu); - gpu->initialized = false; - } + etnaviv_cmdbuf_free(&gpu->buffer); + etnaviv_iommu_global_fini(gpu); gpu->drm = NULL; xa_destroy(&gpu->user_fences); diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h index b4e545dce947..85c669dba88e 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h @@ -114,7 +114,6 @@ struct etnaviv_gpu { struct mutex sched_lock; struct drm_gpu_scheduler sched; enum etnaviv_gpu_state state; - bool initialized; /* 'ring'-buffer: */ struct etnaviv_cmdbuf buffer; diff --git a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c index 67bdce5326c6..4fa72567183a 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_mmu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_mmu.c @@ -553,6 +553,9 @@ void etnaviv_iommu_global_fini(struct etnaviv_gpu *gpu) struct etnaviv_drm_private *priv = gpu->drm->dev_private; struct etnaviv_iommu_global *global = priv->mmu_global; + if (!global) + return; + if (--global->use > 0) return; |