diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4201-drm-amdgpu-vcn-fix-allocation-size-in-enc-ring-test.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4201-drm-amdgpu-vcn-fix-allocation-size-in-enc-ring-test.patch | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4201-drm-amdgpu-vcn-fix-allocation-size-in-enc-ring-test.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4201-drm-amdgpu-vcn-fix-allocation-size-in-enc-ring-test.patch new file mode 100644 index 00000000..59365577 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4201-drm-amdgpu-vcn-fix-allocation-size-in-enc-ring-test.patch @@ -0,0 +1,134 @@ +From 32f8b69dcac7547e2603bb3eb643c3eeeac2ac66 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Tue, 15 Oct 2019 18:09:41 -0400 +Subject: [PATCH 4201/4736] drm/amdgpu/vcn: fix allocation size in enc ring + test +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We need to allocate a large enough buffer for the +session info, otherwise the IB test can overwrite +other memory. + +- Session info is 128K according to mesa +- Use the same session info for create and destroy + +Bug: https://bugzilla.kernel.org/show_bug.cgi?id=204241 +Acked-by: Christian König <christian.koenig@amd.com> +Reviewed-by: James Zhu <James.Zhu@amd.com> +Tested-by: James Zhu <James.Zhu@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 35 ++++++++++++++++--------- + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +index 8566a264961f..6b31410a5ff9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +@@ -568,13 +568,14 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring) + } + + static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, +- struct dma_fence **fence) ++ struct amdgpu_bo *bo, ++ struct dma_fence **fence) + { + const unsigned ib_size_dw = 16; + struct amdgpu_job *job; + struct amdgpu_ib *ib; + struct dma_fence *f = NULL; +- uint64_t dummy; ++ uint64_t addr; + int i, r; + + r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, &job); +@@ -582,14 +583,14 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand + return r; + + ib = &job->ibs[0]; +- dummy = ib->gpu_addr + 1024; ++ addr = amdgpu_bo_gpu_offset(bo); + + ib->length_dw = 0; + ib->ptr[ib->length_dw++] = 0x00000018; + ib->ptr[ib->length_dw++] = 0x00000001; /* session info */ + ib->ptr[ib->length_dw++] = handle; +- ib->ptr[ib->length_dw++] = upper_32_bits(dummy); +- ib->ptr[ib->length_dw++] = dummy; ++ ib->ptr[ib->length_dw++] = upper_32_bits(addr); ++ ib->ptr[ib->length_dw++] = addr; + ib->ptr[ib->length_dw++] = 0x0000000b; + + ib->ptr[ib->length_dw++] = 0x00000014; +@@ -620,13 +621,14 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand + } + + static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, +- struct dma_fence **fence) ++ struct amdgpu_bo *bo, ++ struct dma_fence **fence) + { + const unsigned ib_size_dw = 16; + struct amdgpu_job *job; + struct amdgpu_ib *ib; + struct dma_fence *f = NULL; +- uint64_t dummy; ++ uint64_t addr; + int i, r; + + r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, &job); +@@ -634,14 +636,14 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han + return r; + + ib = &job->ibs[0]; +- dummy = ib->gpu_addr + 1024; ++ addr = amdgpu_bo_gpu_offset(bo); + + ib->length_dw = 0; + ib->ptr[ib->length_dw++] = 0x00000018; + ib->ptr[ib->length_dw++] = 0x00000001; + ib->ptr[ib->length_dw++] = handle; +- ib->ptr[ib->length_dw++] = upper_32_bits(dummy); +- ib->ptr[ib->length_dw++] = dummy; ++ ib->ptr[ib->length_dw++] = upper_32_bits(addr); ++ ib->ptr[ib->length_dw++] = addr; + ib->ptr[ib->length_dw++] = 0x0000000b; + + ib->ptr[ib->length_dw++] = 0x00000014; +@@ -674,13 +676,20 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han + int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) + { + struct dma_fence *fence = NULL; ++ struct amdgpu_bo *bo = NULL; + long r; + +- r = amdgpu_vcn_enc_get_create_msg(ring, 1, NULL); ++ r = amdgpu_bo_create_reserved(ring->adev, 128 * 1024, PAGE_SIZE, ++ AMDGPU_GEM_DOMAIN_VRAM, ++ &bo, NULL, NULL); ++ if (r) ++ return r; ++ ++ r = amdgpu_vcn_enc_get_create_msg(ring, 1, bo, NULL); + if (r) + goto error; + +- r = amdgpu_vcn_enc_get_destroy_msg(ring, 1, &fence); ++ r = amdgpu_vcn_enc_get_destroy_msg(ring, 1, bo, &fence); + if (r) + goto error; + +@@ -692,6 +701,8 @@ int amdgpu_vcn_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) + + error: + dma_fence_put(fence); ++ amdgpu_bo_unreserve(bo); ++ amdgpu_bo_unref(&bo); + return r; + } + +-- +2.17.1 + |