aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch
new file mode 100644
index 00000000..202e3796
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4610-drm-amdgpu-add-vcn-jpeg-ring-test.patch
@@ -0,0 +1,93 @@
+From 9fdac1484e5147fd9cf5d584f962170e91933b44 Mon Sep 17 00:00:00 2001
+From: Boyuan Zhang <boyuan.zhang@amd.com>
+Date: Wed, 30 May 2018 15:49:51 -0400
+Subject: [PATCH 4610/5725] drm/amdgpu: add vcn jpeg ring test
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+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>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 40 +++++++++++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 2 ++
+ drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 2 +-
+ 3 files changed, 43 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+index 50e2315..5bacf80 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+@@ -583,3 +583,43 @@ int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout)
+ dma_fence_put(fence);
+ return r;
+ }
++
++int amdgpu_vcn_jpeg_ring_test_ring(struct amdgpu_ring *ring)
++{
++ struct amdgpu_device *adev = ring->adev;
++ uint32_t tmp = 0;
++ unsigned i;
++ int r;
++
++ WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0xCAFEDEAD);
++ r = amdgpu_ring_alloc(ring, 3);
++
++ if (r) {
++ DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
++ ring->idx, r);
++ return r;
++ }
++
++ amdgpu_ring_write(ring,
++ PACKETJ(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID), 0, 0, 0));
++ amdgpu_ring_write(ring, 0xDEADBEEF);
++ amdgpu_ring_commit(ring);
++
++ for (i = 0; i < adev->usec_timeout; i++) {
++ tmp = RREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_CONTEXT_ID));
++ if (tmp == 0xDEADBEEF)
++ break;
++ DRM_UDELAY(1);
++ }
++
++ if (i < adev->usec_timeout) {
++ DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
++ ring->idx, i);
++ } else {
++ DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
++ ring->idx, tmp);
++ r = -EINVAL;
++ }
++
++ return r;
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+index 6f3bed1..0447fae 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
+@@ -84,4 +84,6 @@ int amdgpu_vcn_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout);
+ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring);
+ int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout);
+
++int amdgpu_vcn_jpeg_ring_test_ring(struct amdgpu_ring *ring);
++
+ #endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+index a7a166f..3d58236 100644
+--- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+@@ -1750,7 +1750,7 @@ static const struct amdgpu_ring_funcs vcn_v1_0_jpeg_ring_vm_funcs = {
+ .emit_ib = vcn_v1_0_jpeg_ring_emit_ib,
+ .emit_fence = vcn_v1_0_jpeg_ring_emit_fence,
+ .emit_vm_flush = vcn_v1_0_jpeg_ring_emit_vm_flush,
+- //.test_ring
++ .test_ring = amdgpu_vcn_jpeg_ring_test_ring,
+ //.test_ib
+ .insert_nop = vcn_v1_0_jpeg_ring_nop,
+ .insert_start = vcn_v1_0_jpeg_ring_insert_start,
+--
+2.7.4
+