diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch | 1137 |
1 files changed, 0 insertions, 1137 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch b/meta-amdfalconx86/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch deleted file mode 100644 index efd1e167..00000000 --- a/meta-amdfalconx86/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch +++ /dev/null @@ -1,1137 +0,0 @@ -From bcabc891096a6d65fa16c4819faa3ab1d0350587 Mon Sep 17 00:00:00 2001 -From: Chunming Zhou <David1.Zhou@amd.com> -Date: Fri, 15 Jan 2016 11:05:21 +0800 -Subject: [PATCH 0225/1110] drm/amdgpu: clean up hw semaphore support in driver - -No longer used. - -Signed-off-by: Chunming Zhou <David1.Zhou@amd.com> -Reviewed-by: Ken Wang <Qingqing.Wang@amd.com> -Reviewed-by: Monk Liu <monk.liu@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/Makefile | 2 +- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 21 --- - drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 - - drivers/gpu/drm/amd/amdgpu/amdgpu_semaphore.c | 102 ----------- - drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 64 +------ - drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | 237 -------------------------- - drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 36 ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 24 --- - drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | 3 - - drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 26 +-- - drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 34 +--- - drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 42 +---- - drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 27 +-- - drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 28 +-- - drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 29 +--- - drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 29 +--- - drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 29 +--- - drivers/gpu/drm/amd/amdgpu/vce_v2_0.c | 2 +- - drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 2 +- - 19 files changed, 17 insertions(+), 724 deletions(-) - delete mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_semaphore.c - -diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile -index 20c9539..7e4568e 100644 ---- a/drivers/gpu/drm/amd/amdgpu/Makefile -+++ b/drivers/gpu/drm/amd/amdgpu/Makefile -@@ -20,7 +20,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \ - amdgpu_fb.o amdgpu_gem.o amdgpu_ring.o \ - amdgpu_cs.o amdgpu_bios.o amdgpu_benchmark.o amdgpu_test.o \ - amdgpu_pm.o atombios_dp.o amdgpu_afmt.o amdgpu_trace_points.o \ -- atombios_encoders.o amdgpu_semaphore.o amdgpu_sa.o atombios_i2c.o \ -+ atombios_encoders.o amdgpu_sa.o atombios_i2c.o \ - amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \ - amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index d5e4503..2d6e17d 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -598,31 +598,10 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv, - int amdgpu_mode_dumb_mmap(struct drm_file *filp, - struct drm_device *dev, - uint32_t handle, uint64_t *offset_p); -- --/* -- * Semaphores. -- */ --struct amdgpu_semaphore { -- struct amdgpu_sa_bo *sa_bo; -- signed waiters; -- uint64_t gpu_addr; --}; -- --int amdgpu_semaphore_create(struct amdgpu_device *adev, -- struct amdgpu_semaphore **semaphore); --bool amdgpu_semaphore_emit_signal(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore); --bool amdgpu_semaphore_emit_wait(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore); --void amdgpu_semaphore_free(struct amdgpu_device *adev, -- struct amdgpu_semaphore **semaphore, -- struct fence *fence); -- - /* - * Synchronization - */ - struct amdgpu_sync { -- struct amdgpu_semaphore *semaphores[AMDGPU_NUM_SYNCS]; - struct fence *sync_to[AMDGPU_MAX_RINGS]; - DECLARE_HASHTABLE(fences, 4); - struct fence *last_vm_update; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -index 9ef1db8..78fac51 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -@@ -81,7 +81,6 @@ int amdgpu_exp_hw_support = 0; - int amdgpu_enable_scheduler = 1; - int amdgpu_sched_jobs = 32; - int amdgpu_sched_hw_submission = 2; --int amdgpu_enable_semaphores = 0; - int amdgpu_powerplay = -1; - unsigned amdgpu_pcie_gen_cap = 0; - unsigned amdgpu_pcie_lane_cap = 0; -@@ -164,9 +163,6 @@ module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444); - MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)"); - module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444); - --MODULE_PARM_DESC(enable_semaphores, "Enable semaphores (1 = enable, 0 = disable (default))"); --module_param_named(enable_semaphores, amdgpu_enable_semaphores, int, 0644); -- - #ifdef CONFIG_DRM_AMD_POWERPLAY - MODULE_PARM_DESC(powerplay, "Powerplay component (1 = enable, 0 = disable, -1 = auto (default))"); - module_param_named(powerplay, amdgpu_powerplay, int, 0444); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_semaphore.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_semaphore.c -deleted file mode 100644 -index 1caaf20..0000000 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_semaphore.c -+++ /dev/null -@@ -1,102 +0,0 @@ --/* -- * Copyright 2011 Christian König. -- * All Rights Reserved. -- * -- * Permission is hereby granted, free of charge, to any person obtaining a -- * copy of this software and associated documentation files (the -- * "Software"), to deal in the Software without restriction, including -- * without limitation the rights to use, copy, modify, merge, publish, -- * distribute, sub license, and/or sell copies of the Software, and to -- * permit persons to whom the Software is furnished to do so, subject to -- * the following conditions: -- * -- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, -- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -- * USE OR OTHER DEALINGS IN THE SOFTWARE. -- * -- * The above copyright notice and this permission notice (including the -- * next paragraph) shall be included in all copies or substantial portions -- * of the Software. -- * -- */ --/* -- * Authors: -- * Christian König <deathsimple@vodafone.de> -- */ --#include <drm/drmP.h> --#include "amdgpu.h" --#include "amdgpu_trace.h" -- --int amdgpu_semaphore_create(struct amdgpu_device *adev, -- struct amdgpu_semaphore **semaphore) --{ -- int r; -- -- *semaphore = kmalloc(sizeof(struct amdgpu_semaphore), GFP_KERNEL); -- if (*semaphore == NULL) { -- return -ENOMEM; -- } -- r = amdgpu_sa_bo_new(&adev->ring_tmp_bo, -- &(*semaphore)->sa_bo, 8, 8); -- if (r) { -- kfree(*semaphore); -- *semaphore = NULL; -- return r; -- } -- (*semaphore)->waiters = 0; -- (*semaphore)->gpu_addr = amdgpu_sa_bo_gpu_addr((*semaphore)->sa_bo); -- -- *((uint64_t *)amdgpu_sa_bo_cpu_addr((*semaphore)->sa_bo)) = 0; -- -- return 0; --} -- --bool amdgpu_semaphore_emit_signal(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore) --{ -- trace_amdgpu_semaphore_signale(ring->idx, semaphore); -- -- if (amdgpu_ring_emit_semaphore(ring, semaphore, false)) { -- --semaphore->waiters; -- -- /* for debugging lockup only, used by sysfs debug files */ -- ring->last_semaphore_signal_addr = semaphore->gpu_addr; -- return true; -- } -- return false; --} -- --bool amdgpu_semaphore_emit_wait(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore) --{ -- trace_amdgpu_semaphore_wait(ring->idx, semaphore); -- -- if (amdgpu_ring_emit_semaphore(ring, semaphore, true)) { -- ++semaphore->waiters; -- -- /* for debugging lockup only, used by sysfs debug files */ -- ring->last_semaphore_wait_addr = semaphore->gpu_addr; -- return true; -- } -- return false; --} -- --void amdgpu_semaphore_free(struct amdgpu_device *adev, -- struct amdgpu_semaphore **semaphore, -- struct fence *fence) --{ -- if (semaphore == NULL || *semaphore == NULL) { -- return; -- } -- if ((*semaphore)->waiters > 0) { -- dev_err(adev->dev, "semaphore %p has more waiters than signalers," -- " hardware lockup imminent!\n", *semaphore); -- } -- amdgpu_sa_bo_free(adev, &(*semaphore)->sa_bo, fence); -- kfree(*semaphore); -- *semaphore = NULL; --} -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c -index 181ce39..a6fee51 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c -@@ -48,9 +48,6 @@ void amdgpu_sync_create(struct amdgpu_sync *sync) - { - unsigned i; - -- for (i = 0; i < AMDGPU_NUM_SYNCS; ++i) -- sync->semaphores[i] = NULL; -- - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) - sync->sync_to[i] = NULL; - -@@ -153,13 +150,13 @@ static void *amdgpu_sync_get_owner(struct fence *f) - } - - /** -- * amdgpu_sync_resv - use the semaphores to sync to a reservation object -+ * amdgpu_sync_resv - sync to a reservation object - * - * @sync: sync object to add fences from reservation object to - * @resv: reservation object with embedded fence - * @shared: true if we should only sync to the exclusive fence - * -- * Sync to the fence using the semaphore objects -+ * Sync to the fence - */ - int amdgpu_sync_resv(struct amdgpu_device *adev, - struct amdgpu_sync *sync, -@@ -250,9 +247,6 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync) - kfree(e); - } - -- if (amdgpu_enable_semaphores) -- return 0; -- - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { - struct fence *fence = sync->sync_to[i]; - if (!fence) -@@ -279,12 +273,10 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync, - struct amdgpu_ring *ring) - { - struct amdgpu_device *adev = ring->adev; -- unsigned count = 0; - int i, r; - - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { - struct amdgpu_ring *other = adev->rings[i]; -- struct amdgpu_semaphore *semaphore; - struct amdgpu_fence *fence; - - if (!sync->sync_to[i]) -@@ -292,64 +284,19 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync, - - fence = to_amdgpu_fence(sync->sync_to[i]); - -- /* check if we really need to sync */ -- if (!amdgpu_enable_scheduler && -- !amdgpu_fence_need_sync(fence, ring)) -- continue; -- - /* prevent GPU deadlocks */ - if (!other->ready) { - dev_err(adev->dev, "Syncing to a disabled ring!"); - return -EINVAL; - } - -- if (amdgpu_enable_scheduler || !amdgpu_enable_semaphores) { -+ if (amdgpu_enable_scheduler) { - r = fence_wait(sync->sync_to[i], true); - if (r) - return r; - continue; - } - -- if (count >= AMDGPU_NUM_SYNCS) { -- /* not enough room, wait manually */ -- r = fence_wait(&fence->base, false); -- if (r) -- return r; -- continue; -- } -- r = amdgpu_semaphore_create(adev, &semaphore); -- if (r) -- return r; -- -- sync->semaphores[count++] = semaphore; -- -- /* allocate enough space for sync command */ -- r = amdgpu_ring_alloc(other, 16); -- if (r) -- return r; -- -- /* emit the signal semaphore */ -- if (!amdgpu_semaphore_emit_signal(other, semaphore)) { -- /* signaling wasn't successful wait manually */ -- amdgpu_ring_undo(other); -- r = fence_wait(&fence->base, false); -- if (r) -- return r; -- continue; -- } -- -- /* we assume caller has already allocated space on waiters ring */ -- if (!amdgpu_semaphore_emit_wait(ring, semaphore)) { -- /* waiting wasn't successful wait manually */ -- amdgpu_ring_undo(other); -- r = fence_wait(&fence->base, false); -- if (r) -- return r; -- continue; -- } -- -- amdgpu_ring_commit(other); -- amdgpu_fence_note_sync(fence, ring); - } - - return 0; -@@ -362,7 +309,7 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync, - * @sync: sync object to use - * @fence: fence to use for the free - * -- * Free the sync object by freeing all semaphores in it. -+ * Free the sync object. - */ - void amdgpu_sync_free(struct amdgpu_device *adev, - struct amdgpu_sync *sync, -@@ -378,9 +325,6 @@ void amdgpu_sync_free(struct amdgpu_device *adev, - kfree(e); - } - -- for (i = 0; i < AMDGPU_NUM_SYNCS; ++i) -- amdgpu_semaphore_free(adev, &sync->semaphores[i], fence); -- - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) - fence_put(sync->sync_to[i]); - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c -index 4865615..05a53f4 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c -@@ -238,144 +238,10 @@ void amdgpu_test_moves(struct amdgpu_device *adev) - amdgpu_do_test_moves(adev); - } - --static int amdgpu_test_create_and_emit_fence(struct amdgpu_device *adev, -- struct amdgpu_ring *ring, -- struct fence **fence) --{ -- uint32_t handle = ring->idx ^ 0xdeafbeef; -- int r; -- -- if (ring == &adev->uvd.ring) { -- r = amdgpu_uvd_get_create_msg(ring, handle, NULL); -- if (r) { -- DRM_ERROR("Failed to get dummy create msg\n"); -- return r; -- } -- -- r = amdgpu_uvd_get_destroy_msg(ring, handle, fence); -- if (r) { -- DRM_ERROR("Failed to get dummy destroy msg\n"); -- return r; -- } -- -- } else if (ring == &adev->vce.ring[0] || -- ring == &adev->vce.ring[1]) { -- r = amdgpu_vce_get_create_msg(ring, handle, NULL); -- if (r) { -- DRM_ERROR("Failed to get dummy create msg\n"); -- return r; -- } -- -- r = amdgpu_vce_get_destroy_msg(ring, handle, fence); -- if (r) { -- DRM_ERROR("Failed to get dummy destroy msg\n"); -- return r; -- } -- } else { -- struct amdgpu_fence *a_fence = NULL; -- r = amdgpu_ring_lock(ring, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring A %d\n", ring->idx); -- return r; -- } -- amdgpu_fence_emit(ring, AMDGPU_FENCE_OWNER_UNDEFINED, &a_fence); -- amdgpu_ring_unlock_commit(ring); -- *fence = &a_fence->base; -- } -- return 0; --} -- - void amdgpu_test_ring_sync(struct amdgpu_device *adev, - struct amdgpu_ring *ringA, - struct amdgpu_ring *ringB) - { -- struct fence *fence1 = NULL, *fence2 = NULL; -- struct amdgpu_semaphore *semaphore = NULL; -- int r; -- -- r = amdgpu_semaphore_create(adev, &semaphore); -- if (r) { -- DRM_ERROR("Failed to create semaphore\n"); -- goto out_cleanup; -- } -- -- r = amdgpu_ring_lock(ringA, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring A %d\n", ringA->idx); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_wait(ringA, semaphore); -- amdgpu_ring_unlock_commit(ringA); -- -- r = amdgpu_test_create_and_emit_fence(adev, ringA, &fence1); -- if (r) -- goto out_cleanup; -- -- r = amdgpu_ring_lock(ringA, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring A %d\n", ringA->idx); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_wait(ringA, semaphore); -- amdgpu_ring_unlock_commit(ringA); -- -- r = amdgpu_test_create_and_emit_fence(adev, ringA, &fence2); -- if (r) -- goto out_cleanup; -- -- mdelay(1000); -- -- if (fence_is_signaled(fence1)) { -- DRM_ERROR("Fence 1 signaled without waiting for semaphore.\n"); -- goto out_cleanup; -- } -- -- r = amdgpu_ring_lock(ringB, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring B %p\n", ringB); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_signal(ringB, semaphore); -- amdgpu_ring_unlock_commit(ringB); -- -- r = fence_wait(fence1, false); -- if (r) { -- DRM_ERROR("Failed to wait for sync fence 1\n"); -- goto out_cleanup; -- } -- -- mdelay(1000); -- -- if (fence_is_signaled(fence2)) { -- DRM_ERROR("Fence 2 signaled without waiting for semaphore.\n"); -- goto out_cleanup; -- } -- -- r = amdgpu_ring_lock(ringB, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring B %p\n", ringB); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_signal(ringB, semaphore); -- amdgpu_ring_unlock_commit(ringB); -- -- r = fence_wait(fence2, false); -- if (r) { -- DRM_ERROR("Failed to wait for sync fence 1\n"); -- goto out_cleanup; -- } -- --out_cleanup: -- amdgpu_semaphore_free(adev, &semaphore, NULL); -- -- if (fence1) -- fence_put(fence1); -- -- if (fence2) -- fence_put(fence2); -- -- if (r) -- printk(KERN_WARNING "Error while testing ring sync (%d).\n", r); - } - - static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, -@@ -383,109 +249,6 @@ static void amdgpu_test_ring_sync2(struct amdgpu_device *adev, - struct amdgpu_ring *ringB, - struct amdgpu_ring *ringC) - { -- struct fence *fenceA = NULL, *fenceB = NULL; -- struct amdgpu_semaphore *semaphore = NULL; -- bool sigA, sigB; -- int i, r; -- -- r = amdgpu_semaphore_create(adev, &semaphore); -- if (r) { -- DRM_ERROR("Failed to create semaphore\n"); -- goto out_cleanup; -- } -- -- r = amdgpu_ring_lock(ringA, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring A %d\n", ringA->idx); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_wait(ringA, semaphore); -- amdgpu_ring_unlock_commit(ringA); -- -- r = amdgpu_test_create_and_emit_fence(adev, ringA, &fenceA); -- if (r) -- goto out_cleanup; -- -- r = amdgpu_ring_lock(ringB, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring B %d\n", ringB->idx); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_wait(ringB, semaphore); -- amdgpu_ring_unlock_commit(ringB); -- r = amdgpu_test_create_and_emit_fence(adev, ringB, &fenceB); -- if (r) -- goto out_cleanup; -- -- mdelay(1000); -- -- if (fence_is_signaled(fenceA)) { -- DRM_ERROR("Fence A signaled without waiting for semaphore.\n"); -- goto out_cleanup; -- } -- if (fence_is_signaled(fenceB)) { -- DRM_ERROR("Fence B signaled without waiting for semaphore.\n"); -- goto out_cleanup; -- } -- -- r = amdgpu_ring_lock(ringC, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring B %p\n", ringC); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_signal(ringC, semaphore); -- amdgpu_ring_unlock_commit(ringC); -- -- for (i = 0; i < 30; ++i) { -- mdelay(100); -- sigA = fence_is_signaled(fenceA); -- sigB = fence_is_signaled(fenceB); -- if (sigA || sigB) -- break; -- } -- -- if (!sigA && !sigB) { -- DRM_ERROR("Neither fence A nor B has been signaled\n"); -- goto out_cleanup; -- } else if (sigA && sigB) { -- DRM_ERROR("Both fence A and B has been signaled\n"); -- goto out_cleanup; -- } -- -- DRM_INFO("Fence %c was first signaled\n", sigA ? 'A' : 'B'); -- -- r = amdgpu_ring_lock(ringC, 64); -- if (r) { -- DRM_ERROR("Failed to lock ring B %p\n", ringC); -- goto out_cleanup; -- } -- amdgpu_semaphore_emit_signal(ringC, semaphore); -- amdgpu_ring_unlock_commit(ringC); -- -- mdelay(1000); -- -- r = fence_wait(fenceA, false); -- if (r) { -- DRM_ERROR("Failed to wait for sync fence A\n"); -- goto out_cleanup; -- } -- r = fence_wait(fenceB, false); -- if (r) { -- DRM_ERROR("Failed to wait for sync fence B\n"); -- goto out_cleanup; -- } -- --out_cleanup: -- amdgpu_semaphore_free(adev, &semaphore, NULL); -- -- if (fenceA) -- fence_put(fenceA); -- -- if (fenceB) -- fence_put(fenceB); -- -- if (r) -- printk(KERN_WARNING "Error while testing ring sync (%d).\n", r); - } - - static bool amdgpu_test_sync_possible(struct amdgpu_ring *ringA, -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -index 8f9834a..2b94c63 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h -@@ -247,42 +247,6 @@ TRACE_EVENT(amdgpu_bo_list_set, - TP_printk("list=%p, bo=%p", __entry->list, __entry->bo) - ); - --DECLARE_EVENT_CLASS(amdgpu_semaphore_request, -- -- TP_PROTO(int ring, struct amdgpu_semaphore *sem), -- -- TP_ARGS(ring, sem), -- -- TP_STRUCT__entry( -- __field(int, ring) -- __field(signed, waiters) -- __field(uint64_t, gpu_addr) -- ), -- -- TP_fast_assign( -- __entry->ring = ring; -- __entry->waiters = sem->waiters; -- __entry->gpu_addr = sem->gpu_addr; -- ), -- -- TP_printk("ring=%u, waiters=%d, addr=%010Lx", __entry->ring, -- __entry->waiters, __entry->gpu_addr) --); -- --DEFINE_EVENT(amdgpu_semaphore_request, amdgpu_semaphore_signale, -- -- TP_PROTO(int ring, struct amdgpu_semaphore *sem), -- -- TP_ARGS(ring, sem) --); -- --DEFINE_EVENT(amdgpu_semaphore_request, amdgpu_semaphore_wait, -- -- TP_PROTO(int ring, struct amdgpu_semaphore *sem), -- -- TP_ARGS(ring, sem) --); -- - #endif - - /* This part must be outside protection */ -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -index bb0da76..9c3e271 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c -@@ -744,30 +744,6 @@ out: - } - - /** -- * amdgpu_vce_ring_emit_semaphore - emit a semaphore command -- * -- * @ring: engine to use -- * @semaphore: address of semaphore -- * @emit_wait: true=emit wait, false=emit signal -- * -- */ --bool amdgpu_vce_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- -- amdgpu_ring_write(ring, VCE_CMD_SEMAPHORE); -- amdgpu_ring_write(ring, (addr >> 3) & 0x000FFFFF); -- amdgpu_ring_write(ring, (addr >> 23) & 0x000FFFFF); -- amdgpu_ring_write(ring, 0x01003000 | (emit_wait ? 1 : 0)); -- if (!emit_wait) -- amdgpu_ring_write(ring, VCE_CMD_END); -- -- return true; --} -- --/** - * amdgpu_vce_ring_emit_ib - execute indirect buffer - * - * @ring: engine to use -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h -index ba2da8e..5538cf7 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h -@@ -34,9 +34,6 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, - struct fence **fence); - void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp); - int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx); --bool amdgpu_vce_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait); - void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib); - void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq, - unsigned flags); -diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -index c55ecf0..dd2a0c1 100644 ---- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c -@@ -295,30 +295,6 @@ static void cik_sdma_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq - } - - /** -- * cik_sdma_ring_emit_semaphore - emit a semaphore on the dma ring -- * -- * @ring: amdgpu_ring structure holding ring information -- * @semaphore: amdgpu semaphore object -- * @emit_wait: wait or signal semaphore -- * -- * Add a DMA semaphore packet to the ring wait on or signal -- * other rings (CIK). -- */ --static bool cik_sdma_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- u64 addr = semaphore->gpu_addr; -- u32 extra_bits = emit_wait ? 0 : SDMA_SEMAPHORE_EXTRA_S; -- -- amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_SEMAPHORE, 0, extra_bits)); -- amdgpu_ring_write(ring, addr & 0xfffffff8); -- amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff); -- -- return true; --} -- --/** - * cik_sdma_gfx_stop - stop the gfx async dma engines - * - * @adev: amdgpu_device pointer -@@ -1297,7 +1273,7 @@ static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = { - .parse_cs = NULL, - .emit_ib = cik_sdma_ring_emit_ib, - .emit_fence = cik_sdma_ring_emit_fence, -- .emit_semaphore = cik_sdma_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = cik_sdma_ring_emit_vm_flush, - .emit_hdp_flush = cik_sdma_ring_emit_hdp_flush, - .test_ring = cik_sdma_ring_test_ring, -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -index 9b1c430..52b3c2b 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c -@@ -2516,36 +2516,6 @@ static void gfx_v7_0_ring_emit_fence_compute(struct amdgpu_ring *ring, - amdgpu_ring_write(ring, upper_32_bits(seq)); - } - --/** -- * gfx_v7_0_ring_emit_semaphore - emit a semaphore on the CP ring -- * -- * @ring: amdgpu ring buffer object -- * @semaphore: amdgpu semaphore object -- * @emit_wait: Is this a sempahore wait? -- * -- * Emits a semaphore signal/wait packet to the CP ring and prevents the PFP -- * from running ahead of semaphore waits. -- */ --static bool gfx_v7_0_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; -- -- amdgpu_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); -- amdgpu_ring_write(ring, addr & 0xffffffff); -- amdgpu_ring_write(ring, (upper_32_bits(addr) & 0xffff) | sel); -- -- if (emit_wait && (ring->type == AMDGPU_RING_TYPE_GFX)) { -- /* Prevent the PFP from running ahead of the semaphore wait */ -- amdgpu_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0)); -- amdgpu_ring_write(ring, 0x0); -- } -- -- return true; --} -- - /* - * IB stuff - */ -@@ -5580,7 +5550,7 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = { - .parse_cs = NULL, - .emit_ib = gfx_v7_0_ring_emit_ib_gfx, - .emit_fence = gfx_v7_0_ring_emit_fence_gfx, -- .emit_semaphore = gfx_v7_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = gfx_v7_0_ring_emit_vm_flush, - .emit_gds_switch = gfx_v7_0_ring_emit_gds_switch, - .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush, -@@ -5596,7 +5566,7 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = { - .parse_cs = NULL, - .emit_ib = gfx_v7_0_ring_emit_ib_compute, - .emit_fence = gfx_v7_0_ring_emit_fence_compute, -- .emit_semaphore = gfx_v7_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = gfx_v7_0_ring_emit_vm_flush, - .emit_gds_switch = gfx_v7_0_ring_emit_gds_switch, - .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush, -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -index 7086ac1..50e071a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -@@ -4762,44 +4762,6 @@ static void gfx_v8_0_ring_emit_fence_gfx(struct amdgpu_ring *ring, u64 addr, - - } - --/** -- * gfx_v8_0_ring_emit_semaphore - emit a semaphore on the CP ring -- * -- * @ring: amdgpu ring buffer object -- * @semaphore: amdgpu semaphore object -- * @emit_wait: Is this a sempahore wait? -- * -- * Emits a semaphore signal/wait packet to the CP ring and prevents the PFP -- * from running ahead of semaphore waits. -- */ --static bool gfx_v8_0_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; -- -- if (ring->adev->asic_type == CHIP_TOPAZ || -- ring->adev->asic_type == CHIP_TONGA || -- ring->adev->asic_type == CHIP_FIJI) -- /* we got a hw semaphore bug in VI TONGA, return false to switch back to sw fence wait */ -- return false; -- else { -- amdgpu_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 2)); -- amdgpu_ring_write(ring, lower_32_bits(addr)); -- amdgpu_ring_write(ring, upper_32_bits(addr)); -- amdgpu_ring_write(ring, sel); -- } -- -- if (emit_wait && (ring->type == AMDGPU_RING_TYPE_GFX)) { -- /* Prevent the PFP from running ahead of the semaphore wait */ -- amdgpu_ring_write(ring, PACKET3(PACKET3_PFP_SYNC_ME, 0)); -- amdgpu_ring_write(ring, 0x0); -- } -- -- return true; --} -- - static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, - unsigned vm_id, uint64_t pd_addr) - { -@@ -5146,7 +5108,7 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = { - .parse_cs = NULL, - .emit_ib = gfx_v8_0_ring_emit_ib_gfx, - .emit_fence = gfx_v8_0_ring_emit_fence_gfx, -- .emit_semaphore = gfx_v8_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = gfx_v8_0_ring_emit_vm_flush, - .emit_gds_switch = gfx_v8_0_ring_emit_gds_switch, - .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush, -@@ -5162,7 +5124,7 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_compute = { - .parse_cs = NULL, - .emit_ib = gfx_v8_0_ring_emit_ib_compute, - .emit_fence = gfx_v8_0_ring_emit_fence_compute, -- .emit_semaphore = gfx_v8_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = gfx_v8_0_ring_emit_vm_flush, - .emit_gds_switch = gfx_v8_0_ring_emit_gds_switch, - .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush, -diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -index b1c7a9b..1eae05a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c -@@ -335,31 +335,6 @@ static void sdma_v2_4_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se - } - - /** -- * sdma_v2_4_ring_emit_semaphore - emit a semaphore on the dma ring -- * -- * @ring: amdgpu_ring structure holding ring information -- * @semaphore: amdgpu semaphore object -- * @emit_wait: wait or signal semaphore -- * -- * Add a DMA semaphore packet to the ring wait on or signal -- * other rings (VI). -- */ --static bool sdma_v2_4_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- u64 addr = semaphore->gpu_addr; -- u32 sig = emit_wait ? 0 : 1; -- -- amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_SEM) | -- SDMA_PKT_SEMAPHORE_HEADER_SIGNAL(sig)); -- amdgpu_ring_write(ring, lower_32_bits(addr) & 0xfffffff8); -- amdgpu_ring_write(ring, upper_32_bits(addr)); -- -- return true; --} -- --/** - * sdma_v2_4_gfx_stop - stop the gfx async dma engines - * - * @adev: amdgpu_device pointer -@@ -1302,7 +1277,7 @@ static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = { - .parse_cs = NULL, - .emit_ib = sdma_v2_4_ring_emit_ib, - .emit_fence = sdma_v2_4_ring_emit_fence, -- .emit_semaphore = sdma_v2_4_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = sdma_v2_4_ring_emit_vm_flush, - .emit_hdp_flush = sdma_v2_4_ring_emit_hdp_flush, - .test_ring = sdma_v2_4_ring_test_ring, -diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -index ad54c46..93930ae 100644 ---- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c -@@ -444,32 +444,6 @@ static void sdma_v3_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0)); - } - -- --/** -- * sdma_v3_0_ring_emit_semaphore - emit a semaphore on the dma ring -- * -- * @ring: amdgpu_ring structure holding ring information -- * @semaphore: amdgpu semaphore object -- * @emit_wait: wait or signal semaphore -- * -- * Add a DMA semaphore packet to the ring wait on or signal -- * other rings (VI). -- */ --static bool sdma_v3_0_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- u64 addr = semaphore->gpu_addr; -- u32 sig = emit_wait ? 0 : 1; -- -- amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_SEM) | -- SDMA_PKT_SEMAPHORE_HEADER_SIGNAL(sig)); -- amdgpu_ring_write(ring, lower_32_bits(addr) & 0xfffffff8); -- amdgpu_ring_write(ring, upper_32_bits(addr)); -- -- return true; --} -- - /** - * sdma_v3_0_gfx_stop - stop the gfx async dma engines - * -@@ -1570,7 +1544,7 @@ static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = { - .parse_cs = NULL, - .emit_ib = sdma_v3_0_ring_emit_ib, - .emit_fence = sdma_v3_0_ring_emit_fence, -- .emit_semaphore = sdma_v3_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .emit_vm_flush = sdma_v3_0_ring_emit_vm_flush, - .emit_hdp_flush = sdma_v3_0_ring_emit_hdp_flush, - .test_ring = sdma_v3_0_ring_test_ring, -diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c -index fbd3767..65961e4 100644 ---- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c -+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c -@@ -439,33 +439,6 @@ static void uvd_v4_2_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq - } - - /** -- * uvd_v4_2_ring_emit_semaphore - emit semaphore command -- * -- * @ring: amdgpu_ring pointer -- * @semaphore: semaphore to emit commands for -- * @emit_wait: true if we should emit a wait command -- * -- * Emit a semaphore command (either wait or signal) to the UVD ring. -- */ --static bool uvd_v4_2_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_LOW, 0)); -- amdgpu_ring_write(ring, (addr >> 3) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_HIGH, 0)); -- amdgpu_ring_write(ring, (addr >> 23) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_CMD, 0)); -- amdgpu_ring_write(ring, 0x80 | (emit_wait ? 1 : 0)); -- -- return true; --} -- --/** - * uvd_v4_2_ring_test_ring - register write test - * - * @ring: amdgpu_ring pointer -@@ -888,7 +861,7 @@ static const struct amdgpu_ring_funcs uvd_v4_2_ring_funcs = { - .parse_cs = amdgpu_uvd_ring_parse_cs, - .emit_ib = uvd_v4_2_ring_emit_ib, - .emit_fence = uvd_v4_2_ring_emit_fence, -- .emit_semaphore = uvd_v4_2_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .test_ring = uvd_v4_2_ring_test_ring, - .test_ib = uvd_v4_2_ring_test_ib, - .insert_nop = amdgpu_ring_insert_nop, -diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c -index 57f1c5b..2a4a21a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c -@@ -483,33 +483,6 @@ static void uvd_v5_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq - } - - /** -- * uvd_v5_0_ring_emit_semaphore - emit semaphore command -- * -- * @ring: amdgpu_ring pointer -- * @semaphore: semaphore to emit commands for -- * @emit_wait: true if we should emit a wait command -- * -- * Emit a semaphore command (either wait or signal) to the UVD ring. -- */ --static bool uvd_v5_0_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_LOW, 0)); -- amdgpu_ring_write(ring, (addr >> 3) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_HIGH, 0)); -- amdgpu_ring_write(ring, (addr >> 23) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_CMD, 0)); -- amdgpu_ring_write(ring, 0x80 | (emit_wait ? 1 : 0)); -- -- return true; --} -- --/** - * uvd_v5_0_ring_test_ring - register write test - * - * @ring: amdgpu_ring pointer -@@ -829,7 +802,7 @@ static const struct amdgpu_ring_funcs uvd_v5_0_ring_funcs = { - .parse_cs = amdgpu_uvd_ring_parse_cs, - .emit_ib = uvd_v5_0_ring_emit_ib, - .emit_fence = uvd_v5_0_ring_emit_fence, -- .emit_semaphore = uvd_v5_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .test_ring = uvd_v5_0_ring_test_ring, - .test_ib = uvd_v5_0_ring_test_ib, - .insert_nop = amdgpu_ring_insert_nop, -diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c -index 0b365b7..dc59a53 100644 ---- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c -@@ -722,33 +722,6 @@ static void uvd_v6_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq - } - - /** -- * uvd_v6_0_ring_emit_semaphore - emit semaphore command -- * -- * @ring: amdgpu_ring pointer -- * @semaphore: semaphore to emit commands for -- * @emit_wait: true if we should emit a wait command -- * -- * Emit a semaphore command (either wait or signal) to the UVD ring. -- */ --static bool uvd_v6_0_ring_emit_semaphore(struct amdgpu_ring *ring, -- struct amdgpu_semaphore *semaphore, -- bool emit_wait) --{ -- uint64_t addr = semaphore->gpu_addr; -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_LOW, 0)); -- amdgpu_ring_write(ring, (addr >> 3) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_ADDR_HIGH, 0)); -- amdgpu_ring_write(ring, (addr >> 23) & 0x000FFFFF); -- -- amdgpu_ring_write(ring, PACKET0(mmUVD_SEMA_CMD, 0)); -- amdgpu_ring_write(ring, 0x80 | (emit_wait ? 1 : 0)); -- -- return true; --} -- --/** - * uvd_v6_0_ring_test_ring - register write test - * - * @ring: amdgpu_ring pointer -@@ -1065,7 +1038,7 @@ static const struct amdgpu_ring_funcs uvd_v6_0_ring_funcs = { - .parse_cs = amdgpu_uvd_ring_parse_cs, - .emit_ib = uvd_v6_0_ring_emit_ib, - .emit_fence = uvd_v6_0_ring_emit_fence, -- .emit_semaphore = uvd_v6_0_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .test_ring = uvd_v6_0_ring_test_ring, - .test_ib = uvd_v6_0_ring_test_ib, - .insert_nop = amdgpu_ring_insert_nop, -diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c -index a822eda..6e48cc6 100644 ---- a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c -@@ -642,7 +642,7 @@ static const struct amdgpu_ring_funcs vce_v2_0_ring_funcs = { - .parse_cs = amdgpu_vce_ring_parse_cs, - .emit_ib = amdgpu_vce_ring_emit_ib, - .emit_fence = amdgpu_vce_ring_emit_fence, -- .emit_semaphore = amdgpu_vce_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .test_ring = amdgpu_vce_ring_test_ring, - .test_ib = amdgpu_vce_ring_test_ib, - .insert_nop = amdgpu_ring_insert_nop, -diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c -index d662fa9..e3b47bc 100644 ---- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c -@@ -762,7 +762,7 @@ static const struct amdgpu_ring_funcs vce_v3_0_ring_funcs = { - .parse_cs = amdgpu_vce_ring_parse_cs, - .emit_ib = amdgpu_vce_ring_emit_ib, - .emit_fence = amdgpu_vce_ring_emit_fence, -- .emit_semaphore = amdgpu_vce_ring_emit_semaphore, -+ .emit_semaphore = NULL, - .test_ring = amdgpu_vce_ring_test_ring, - .test_ib = amdgpu_vce_ring_test_ib, - .insert_nop = amdgpu_ring_insert_nop, --- -2.7.4 - |