diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch | 1137 |
1 files changed, 1137 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch b/common/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch new file mode 100644 index 00000000..efd1e167 --- /dev/null +++ b/common/recipes-kernel/linux/files/0225-drm-amdgpu-clean-up-hw-semaphore-support-in-driver.patch @@ -0,0 +1,1137 @@ +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 + |