diff options
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.patch | 93 |
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 + |