diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4444-drm-amdgpu-add-amdgpu_jpeg-and-JPEG-tests.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4444-drm-amdgpu-add-amdgpu_jpeg-and-JPEG-tests.patch | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4444-drm-amdgpu-add-amdgpu_jpeg-and-JPEG-tests.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4444-drm-amdgpu-add-amdgpu_jpeg-and-JPEG-tests.patch new file mode 100644 index 00000000..5e0114d3 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4444-drm-amdgpu-add-amdgpu_jpeg-and-JPEG-tests.patch @@ -0,0 +1,194 @@ +From c444d485db6eb0a248933b19d714d86030a2183e Mon Sep 17 00:00:00 2001 +From: Leo Liu <leo.liu@amd.com> +Date: Fri, 8 Nov 2019 10:07:56 -0500 +Subject: [PATCH 4444/4736] drm/amdgpu: add amdgpu_jpeg and JPEG tests + +It will be used for all versions of JPEG eventually. Previous +JPEG tests will be removed later since they are still used by +JPEG2.x. + +Signed-off-by: Leo Liu <leo.liu@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/Makefile | 5 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c | 135 +++++++++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h | 3 + + 3 files changed, 141 insertions(+), 2 deletions(-) + create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c + +diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile +index d2fa7313c876..e73f71bd99c2 100644 +--- a/drivers/gpu/drm/amd/amdgpu/Makefile ++++ b/drivers/gpu/drm/amd/amdgpu/Makefile +@@ -148,12 +148,13 @@ amdgpu-y += \ + vce_v3_0.o \ + vce_v4_0.o + +-# add VCN block ++# add VCN and JPEG block + amdgpu-y += \ + amdgpu_vcn.o \ + vcn_v1_0.o \ + vcn_v2_0.o \ +- vcn_v2_5.o ++ vcn_v2_5.o \ ++ amdgpu_jpeg.o + + # add ATHUB block + amdgpu-y += \ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c +new file mode 100644 +index 000000000000..d9a547d4d3b2 +--- /dev/null ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c +@@ -0,0 +1,135 @@ ++/* ++ * Copyright 2019 Advanced Micro Devices, Inc. ++ * All Rights Reserved. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sub license, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, ++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR ++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE ++ * USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * The above copyright notice and this permission notice (including the ++ * next paragraph) shall be included in all copies or substantial portions ++ * of the Software. ++ * ++ */ ++ ++#include "amdgpu.h" ++#include "amdgpu_jpeg.h" ++#include "soc15d.h" ++#include "soc15_common.h" ++ ++int amdgpu_jpeg_dec_ring_test_ring(struct amdgpu_ring *ring) ++{ ++ struct amdgpu_device *adev = ring->adev; ++ uint32_t tmp = 0; ++ unsigned i; ++ int r; ++ ++ WREG32(adev->jpeg.inst[ring->me].external.jpeg_pitch, 0xCAFEDEAD); ++ r = amdgpu_ring_alloc(ring, 3); ++ if (r) ++ return r; ++ ++ amdgpu_ring_write(ring, PACKET0(adev->jpeg.internal.jpeg_pitch, 0)); ++ amdgpu_ring_write(ring, 0xDEADBEEF); ++ amdgpu_ring_commit(ring); ++ ++ for (i = 0; i < adev->usec_timeout; i++) { ++ tmp = RREG32(adev->jpeg.inst[ring->me].external.jpeg_pitch); ++ if (tmp == 0xDEADBEEF) ++ break; ++ udelay(1); ++ } ++ ++ if (i >= adev->usec_timeout) ++ r = -ETIMEDOUT; ++ ++ return r; ++} ++ ++static int amdgpu_jpeg_dec_set_reg(struct amdgpu_ring *ring, uint32_t handle, ++ struct dma_fence **fence) ++{ ++ struct amdgpu_device *adev = ring->adev; ++ struct amdgpu_job *job; ++ struct amdgpu_ib *ib; ++ struct dma_fence *f = NULL; ++ const unsigned ib_size_dw = 16; ++ int i, r; ++ ++ r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, &job); ++ if (r) ++ return r; ++ ++ ib = &job->ibs[0]; ++ ++ ib->ptr[0] = PACKETJ(adev->jpeg.internal.jpeg_pitch, 0, 0, PACKETJ_TYPE0); ++ ib->ptr[1] = 0xDEADBEEF; ++ for (i = 2; i < 16; i += 2) { ++ ib->ptr[i] = PACKETJ(0, 0, 0, PACKETJ_TYPE6); ++ ib->ptr[i+1] = 0; ++ } ++ ib->length_dw = 16; ++ ++ r = amdgpu_job_submit_direct(job, ring, &f); ++ if (r) ++ goto err; ++ ++ if (fence) ++ *fence = dma_fence_get(f); ++ dma_fence_put(f); ++ ++ return 0; ++ ++err: ++ amdgpu_job_free(job); ++ return r; ++} ++ ++int amdgpu_jpeg_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout) ++{ ++ struct amdgpu_device *adev = ring->adev; ++ uint32_t tmp = 0; ++ unsigned i; ++ struct dma_fence *fence = NULL; ++ long r = 0; ++ ++ r = amdgpu_jpeg_dec_set_reg(ring, 1, &fence); ++ if (r) ++ goto error; ++ ++ r = dma_fence_wait_timeout(fence, false, timeout); ++ if (r == 0) { ++ r = -ETIMEDOUT; ++ goto error; ++ } else if (r < 0) { ++ goto error; ++ } else { ++ r = 0; ++ } ++ ++ for (i = 0; i < adev->usec_timeout; i++) { ++ tmp = RREG32(adev->jpeg.inst[ring->me].external.jpeg_pitch); ++ if (tmp == 0xDEADBEEF) ++ break; ++ udelay(1); ++ } ++ ++ if (i >= adev->usec_timeout) ++ r = -ETIMEDOUT; ++ ++ dma_fence_put(fence); ++error: ++ return r; ++} +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h +index 36e2b7340c97..a8d988c25f45 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h +@@ -43,4 +43,7 @@ struct amdgpu_jpeg { + unsigned harvest_config; + }; + ++int amdgpu_jpeg_dec_ring_test_ring(struct amdgpu_ring *ring); ++int amdgpu_jpeg_dec_ring_test_ib(struct amdgpu_ring *ring, long timeout); ++ + #endif /*__AMDGPU_JPEG_H__*/ +-- +2.17.1 + |