diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 36 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 45 |
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 | ||
| 235 | int 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 | |||
| 235 | static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, | 271 | static 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); | |||
| 52 | int amdgpu_vcn_resume(struct amdgpu_device *adev); | 52 | int amdgpu_vcn_resume(struct amdgpu_device *adev); |
| 53 | void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring); | 53 | void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring); |
| 54 | void amdgpu_vcn_ring_end_use(struct amdgpu_ring *ring); | 54 | void amdgpu_vcn_ring_end_use(struct amdgpu_ring *ring); |
| 55 | |||
| 56 | int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring); | ||
| 55 | int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout); | 57 | int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout); |
| 56 | 58 | ||
| 57 | int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring); | 59 | int 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 | */ | ||
| 548 | static 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, |
