diff options
author | Boyuan Zhang <boyuan.zhang@amd.com> | 2018-05-30 15:49:51 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-06-15 13:20:38 -0400 |
commit | b1d3760645acd7f16c377499460305d8f35bad00 (patch) | |
tree | 73dfebe08827ea8ebf7aa5321d8aff037529f495 /drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | |
parent | 0c5e4b3e1e8a13cf918c1d2197e5b91fd865138a (diff) |
drm/amdgpu: add vcn jpeg ring test
Add a ring test for vcn jpeg.
Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index d485a74de44d..0b97a72cc202 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | |||
@@ -578,3 +578,43 @@ error: | |||
578 | dma_fence_put(fence); | 578 | dma_fence_put(fence); |
579 | return r; | 579 | return r; |
580 | } | 580 | } |
581 | |||
582 | int amdgpu_vcn_jpeg_ring_test_ring(struct amdgpu_ring *ring) | ||
583 | { | ||
584 | struct amdgpu_device *adev = ring->adev; | ||
585 | uint32_t tmp = 0; | ||
586 | unsigned i; | ||
587 | int r; | ||
588 | |||
589 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0xCAFEDEAD); | ||
590 | r = amdgpu_ring_alloc(ring, 3); | ||
591 | |||
592 | if (r) { | ||
593 | DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", | ||
594 | ring->idx, r); | ||
595 | return r; | ||
596 | } | ||
597 | |||
598 | amdgpu_ring_write(ring, | ||
599 | PACKETJ(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0, 0, 0)); | ||
600 | amdgpu_ring_write(ring, 0xDEADBEEF); | ||
601 | amdgpu_ring_commit(ring); | ||
602 | |||
603 | for (i = 0; i < adev->usec_timeout; i++) { | ||
604 | tmp = RREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID)); | ||
605 | if (tmp == 0xDEADBEEF) | ||
606 | break; | ||
607 | DRM_UDELAY(1); | ||
608 | } | ||
609 | |||
610 | if (i < adev->usec_timeout) { | ||
611 | DRM_DEBUG("ring test on %d succeeded in %d usecs\n", | ||
612 | ring->idx, i); | ||
613 | } else { | ||
614 | DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n", | ||
615 | ring->idx, tmp); | ||
616 | r = -EINVAL; | ||
617 | } | ||
618 | |||
619 | return r; | ||
620 | } | ||