aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch201
1 files changed, 201 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch
new file mode 100644
index 00000000..460537d5
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0405-drm-amdgpu-use-gpu-scheduler-for-sdma-ib-test.patch
@@ -0,0 +1,201 @@
+From 0011fdaa4dab19bf545a28c0d4d164bba4745d29 Mon Sep 17 00:00:00 2001
+From: Chunming Zhou <david1.zhou@amd.com>
+Date: Mon, 1 Jun 2015 15:33:20 +0800
+Subject: [PATCH 0405/1050] drm/amdgpu: use gpu scheduler for sdma ib test
+
+Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Christian K?nig <christian.koenig@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 25 +++++++++++--------------
+ drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 26 ++++++++++++--------------
+ drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 25 +++++++++++--------------
+ 3 files changed, 34 insertions(+), 42 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+index dd3da7b..6e8642b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
++++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+@@ -629,12 +629,10 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ tmp = 0xCAFEDEAD;
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+-
+ r = amdgpu_ib_get(ring, NULL, 256, &ib);
+ if (r) {
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
+- return r;
++ goto err0;
+ }
+
+ ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
+@@ -643,20 +641,15 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
+ ib.ptr[3] = 1;
+ ib.ptr[4] = 0xDEADBEEF;
+ ib.length_dw = 5;
++ r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
++ AMDGPU_FENCE_OWNER_UNDEFINED);
++ if (r)
++ goto err1;
+
+- r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED);
+- if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+- DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r);
+- return r;
+- }
+ r = amdgpu_fence_wait(ib.fence, false);
+ if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: fence wait failed (%d).\n", r);
+- return r;
++ goto err1;
+ }
+ for (i = 0; i < adev->usec_timeout; i++) {
+ tmp = le32_to_cpu(adev->wb.wb[index]);
+@@ -666,12 +659,16 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
+ }
+ if (i < adev->usec_timeout) {
+ DRM_INFO("ib test on ring %d succeeded in %u usecs\n",
+- ib.fence->ring->idx, i);
++ ring->idx, i);
++ goto err1;
+ } else {
+ DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp);
+ r = -EINVAL;
+ }
++
++err1:
+ amdgpu_ib_free(adev, &ib);
++err0:
+ amdgpu_wb_free(adev, index);
+ return r;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+index 8b7e243..5511a19 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+@@ -688,12 +688,10 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring)
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ tmp = 0xCAFEDEAD;
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+-
+ r = amdgpu_ib_get(ring, NULL, 256, &ib);
+ if (r) {
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
+- return r;
++ goto err0;
+ }
+
+ ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
+@@ -707,19 +705,15 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring)
+ ib.ptr[7] = SDMA_PKT_HEADER_OP(SDMA_OP_NOP);
+ ib.length_dw = 8;
+
+- r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED);
+- if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+- DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r);
+- return r;
+- }
++ r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
++ AMDGPU_FENCE_OWNER_UNDEFINED);
++ if (r)
++ goto err1;
++
+ r = amdgpu_fence_wait(ib.fence, false);
+ if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: fence wait failed (%d).\n", r);
+- return r;
++ goto err1;
+ }
+ for (i = 0; i < adev->usec_timeout; i++) {
+ tmp = le32_to_cpu(adev->wb.wb[index]);
+@@ -729,12 +723,16 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring)
+ }
+ if (i < adev->usec_timeout) {
+ DRM_INFO("ib test on ring %d succeeded in %u usecs\n",
+- ib.fence->ring->idx, i);
++ ring->idx, i);
++ goto err1;
+ } else {
+ DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp);
+ r = -EINVAL;
+ }
++
++err1:
+ amdgpu_ib_free(adev, &ib);
++err0:
+ amdgpu_wb_free(adev, index);
+ return r;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+index 4b5d769..679ea9c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+@@ -809,12 +809,10 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring)
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ tmp = 0xCAFEDEAD;
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+-
+ r = amdgpu_ib_get(ring, NULL, 256, &ib);
+ if (r) {
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
+- return r;
++ goto err0;
+ }
+
+ ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
+@@ -828,19 +826,15 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring)
+ ib.ptr[7] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
+ ib.length_dw = 8;
+
+- r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED);
+- if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+- DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r);
+- return r;
+- }
++ r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
++ AMDGPU_FENCE_OWNER_UNDEFINED);
++ if (r)
++ goto err1;
++
+ r = amdgpu_fence_wait(ib.fence, false);
+ if (r) {
+- amdgpu_ib_free(adev, &ib);
+- amdgpu_wb_free(adev, index);
+ DRM_ERROR("amdgpu: fence wait failed (%d).\n", r);
+- return r;
++ goto err1;
+ }
+ for (i = 0; i < adev->usec_timeout; i++) {
+ tmp = le32_to_cpu(adev->wb.wb[index]);
+@@ -850,12 +844,15 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring)
+ }
+ if (i < adev->usec_timeout) {
+ DRM_INFO("ib test on ring %d succeeded in %u usecs\n",
+- ib.fence->ring->idx, i);
++ ring->idx, i);
++ goto err1;
+ } else {
+ DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp);
+ r = -EINVAL;
+ }
++err1:
+ amdgpu_ib_free(adev, &ib);
++err0:
+ amdgpu_wb_free(adev, index);
+ return r;
+ }
+--
+1.9.1
+