aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c36
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c45
3 files changed, 39 insertions, 44 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 5decef78cce7..e1493c18f97b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -232,6 +232,42 @@ void amdgpu_vcn_ring_end_use(struct amdgpu_ring *ring)
232 schedule_delayed_work(&ring->adev->vcn.idle_work, VCN_IDLE_TIMEOUT); 232 schedule_delayed_work(&ring->adev->vcn.idle_work, VCN_IDLE_TIMEOUT);
233} 233}
234 234
235int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring)
236{
237 struct amdgpu_device *adev = ring->adev;
238 uint32_t tmp = 0;
239 unsigned i;
240 int r;
241
242 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0xCAFEDEAD);
243 r = amdgpu_ring_alloc(ring, 3);
244 if (r) {
245 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
246 ring->idx, r);
247 return r;
248 }
249 amdgpu_ring_write(ring,
250 PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0));
251 amdgpu_ring_write(ring, 0xDEADBEEF);
252 amdgpu_ring_commit(ring);
253 for (i = 0; i < adev->usec_timeout; i++) {
254 tmp = RREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID));
255 if (tmp == 0xDEADBEEF)
256 break;
257 DRM_UDELAY(1);
258 }
259
260 if (i < adev->usec_timeout) {
261 DRM_INFO("ring test on %d succeeded in %d usecs\n",
262 ring->idx, i);
263 } else {
264 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
265 ring->idx, tmp);
266 r = -EINVAL;
267 }
268 return r;
269}
270
235static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, 271static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
236 bool direct, struct dma_fence **fence) 272 bool direct, struct dma_fence **fence)
237{ 273{
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
index 2fd22a5d23b4..937c6d93089f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
@@ -52,6 +52,8 @@ int amdgpu_vcn_suspend(struct amdgpu_device *adev);
52int amdgpu_vcn_resume(struct amdgpu_device *adev); 52int amdgpu_vcn_resume(struct amdgpu_device *adev);
53void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring); 53void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring);
54void amdgpu_vcn_ring_end_use(struct amdgpu_ring *ring); 54void amdgpu_vcn_ring_end_use(struct amdgpu_ring *ring);
55
56int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring);
55int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout); 57int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout);
56 58
57int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring); 59int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring);
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
index 7f3c078a3013..9cd6690c6a3f 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
@@ -539,49 +539,6 @@ static void vcn_v1_0_dec_ring_emit_hdp_invalidate(struct amdgpu_ring *ring)
539} 539}
540 540
541/** 541/**
542 * vcn_v1_0_dec_ring_test_ring - register write test
543 *
544 * @ring: amdgpu_ring pointer
545 *
546 * Test if we can successfully write to the context register
547 */
548static int vcn_v1_0_dec_ring_test_ring(struct amdgpu_ring *ring)
549{
550 struct amdgpu_device *adev = ring->adev;
551 uint32_t tmp = 0;
552 unsigned i;
553 int r;
554
555 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0xCAFEDEAD);
556 r = amdgpu_ring_alloc(ring, 3);
557 if (r) {
558 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
559 ring->idx, r);
560 return r;
561 }
562 amdgpu_ring_write(ring,
563 PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0));
564 amdgpu_ring_write(ring, 0xDEADBEEF);
565 amdgpu_ring_commit(ring);
566 for (i = 0; i < adev->usec_timeout; i++) {
567 tmp = RREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID));
568 if (tmp == 0xDEADBEEF)
569 break;
570 DRM_UDELAY(1);
571 }
572
573 if (i < adev->usec_timeout) {
574 DRM_INFO("ring test on %d succeeded in %d usecs\n",
575 ring->idx, i);
576 } else {
577 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
578 ring->idx, tmp);
579 r = -EINVAL;
580 }
581 return r;
582}
583
584/**
585 * vcn_v1_0_dec_ring_emit_ib - execute indirect buffer 542 * vcn_v1_0_dec_ring_emit_ib - execute indirect buffer
586 * 543 *
587 * @ring: amdgpu_ring pointer 544 * @ring: amdgpu_ring pointer
@@ -732,7 +689,7 @@ static const struct amdgpu_ring_funcs vcn_v1_0_dec_ring_vm_funcs = {
732 .emit_fence = vcn_v1_0_dec_ring_emit_fence, 689 .emit_fence = vcn_v1_0_dec_ring_emit_fence,
733 .emit_vm_flush = vcn_v1_0_dec_ring_emit_vm_flush, 690 .emit_vm_flush = vcn_v1_0_dec_ring_emit_vm_flush,
734 .emit_hdp_invalidate = vcn_v1_0_dec_ring_emit_hdp_invalidate, 691 .emit_hdp_invalidate = vcn_v1_0_dec_ring_emit_hdp_invalidate,
735 .test_ring = vcn_v1_0_dec_ring_test_ring, 692 .test_ring = amdgpu_vcn_dec_ring_test_ring,
736 .test_ib = amdgpu_vcn_dec_ring_test_ib, 693 .test_ib = amdgpu_vcn_dec_ring_test_ib,
737 .insert_nop = amdgpu_ring_insert_nop, 694 .insert_nop = amdgpu_ring_insert_nop,
738 .pad_ib = amdgpu_ring_generic_pad_ib, 695 .pad_ib = amdgpu_ring_generic_pad_ib,