aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/radeon/uvd_v2_2.c
diff options
context:
space:
mode:
authorGary S. Robertson <gary.robertson@linaro.org>2015-08-09 20:13:12 -0500
committerGary S. Robertson <gary.robertson@linaro.org>2015-08-09 20:13:12 -0500
commitf0a3665629bd0e3aa440168b55caea721a77f158 (patch)
treeb49c9b4c3f2607f3a299d10c17e3283df9f34673 /drivers/gpu/drm/radeon/uvd_v2_2.c
parente33823607da84625db9f1a2e4eb02c578d240e72 (diff)
parent590e935df0c94b2d7a4584bb26906666176a6133 (diff)
Merge tag 'lsk-v3.18-15.07-rt' of http://git.linaro.org/kernel/linux-linaro-stable into linux-linaro-lng-v3.18-rt
LSK RT 15.07 v3.18
Diffstat (limited to 'drivers/gpu/drm/radeon/uvd_v2_2.c')
-rw-r--r--drivers/gpu/drm/radeon/uvd_v2_2.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/uvd_v2_2.c b/drivers/gpu/drm/radeon/uvd_v2_2.c
index 89193519f8a1..7ed778cec7c6 100644
--- a/drivers/gpu/drm/radeon/uvd_v2_2.c
+++ b/drivers/gpu/drm/radeon/uvd_v2_2.c
@@ -60,6 +60,35 @@ void uvd_v2_2_fence_emit(struct radeon_device *rdev,
}
/**
+ * uvd_v2_2_semaphore_emit - emit semaphore command
+ *
+ * @rdev: radeon_device pointer
+ * @ring: radeon_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.
+ */
+bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
+ struct radeon_ring *ring,
+ struct radeon_semaphore *semaphore,
+ bool emit_wait)
+{
+ uint64_t addr = semaphore->gpu_addr;
+
+ radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
+ radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
+
+ radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
+ radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
+
+ radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
+ radeon_ring_write(ring, emit_wait ? 1 : 0);
+
+ return true;
+}
+
+/**
* uvd_v2_2_resume - memory controller programming
*
* @rdev: radeon_device pointer