xref: /dflybsd-src/sys/dev/drm/radeon/uvd_v3_1.c (revision c6f73aab61fac8c404b25589bb53548913079bc6)
14cd92098Szrj /*
24cd92098Szrj  * Copyright 2013 Advanced Micro Devices, Inc.
34cd92098Szrj  *
44cd92098Szrj  * Permission is hereby granted, free of charge, to any person obtaining a
54cd92098Szrj  * copy of this software and associated documentation files (the "Software"),
64cd92098Szrj  * to deal in the Software without restriction, including without limitation
74cd92098Szrj  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
84cd92098Szrj  * and/or sell copies of the Software, and to permit persons to whom the
94cd92098Szrj  * Software is furnished to do so, subject to the following conditions:
104cd92098Szrj  *
114cd92098Szrj  * The above copyright notice and this permission notice shall be included in
124cd92098Szrj  * all copies or substantial portions of the Software.
134cd92098Szrj  *
144cd92098Szrj  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
154cd92098Szrj  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
164cd92098Szrj  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
174cd92098Szrj  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
184cd92098Szrj  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
194cd92098Szrj  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
204cd92098Szrj  * OTHER DEALINGS IN THE SOFTWARE.
214cd92098Szrj  *
224cd92098Szrj  * Authors: Christian König <christian.koenig@amd.com>
234cd92098Szrj  */
244cd92098Szrj 
254cd92098Szrj #include <drm/drmP.h>
264cd92098Szrj #include "radeon.h"
274cd92098Szrj #include "radeon_asic.h"
284cd92098Szrj #include "nid.h"
294cd92098Szrj 
304cd92098Szrj /**
314cd92098Szrj  * uvd_v3_1_semaphore_emit - emit semaphore command
324cd92098Szrj  *
334cd92098Szrj  * @rdev: radeon_device pointer
344cd92098Szrj  * @ring: radeon_ring pointer
354cd92098Szrj  * @semaphore: semaphore to emit commands for
364cd92098Szrj  * @emit_wait: true if we should emit a wait command
374cd92098Szrj  *
384cd92098Szrj  * Emit a semaphore command (either wait or signal) to the UVD ring.
394cd92098Szrj  */
uvd_v3_1_semaphore_emit(struct radeon_device * rdev,struct radeon_ring * ring,struct radeon_semaphore * semaphore,bool emit_wait)40*c6f73aabSFrançois Tigeot bool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
414cd92098Szrj 			     struct radeon_ring *ring,
424cd92098Szrj 			     struct radeon_semaphore *semaphore,
434cd92098Szrj 			     bool emit_wait)
444cd92098Szrj {
454cd92098Szrj 	uint64_t addr = semaphore->gpu_addr;
464cd92098Szrj 
474cd92098Szrj 	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_LOW, 0));
484cd92098Szrj 	radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF);
494cd92098Szrj 
504cd92098Szrj 	radeon_ring_write(ring, PACKET0(UVD_SEMA_ADDR_HIGH, 0));
514cd92098Szrj 	radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF);
524cd92098Szrj 
534cd92098Szrj 	radeon_ring_write(ring, PACKET0(UVD_SEMA_CMD, 0));
544cd92098Szrj 	radeon_ring_write(ring, 0x80 | (emit_wait ? 1 : 0));
55*c6f73aabSFrançois Tigeot 
56*c6f73aabSFrançois Tigeot 	return true;
574cd92098Szrj }
58