aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch')
-rw-r--r--common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch b/common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch
new file mode 100644
index 00000000..7290890a
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0536-drm-amdgpu-add-option-to-disable-semaphores.patch
@@ -0,0 +1,91 @@
+From 3daea9e3d3ecd217a63f35e63f18ea7138f2ae17 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Sat, 5 Sep 2015 11:12:27 +0200
+Subject: [PATCH 0536/1050] drm/amdgpu: add option to disable semaphores
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Provide module parameter to enable/disable them. Still
+enabled by default.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 ++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 17 ++++++++++++++++-
+ 3 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 668939a..e587e20 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -82,6 +82,7 @@ extern int amdgpu_vm_block_size;
+ extern int amdgpu_enable_scheduler;
+ extern int amdgpu_sched_jobs;
+ extern int amdgpu_sched_hw_submission;
++extern int amdgpu_enable_semaphores;
+
+ #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000
+ #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+index 0fcc0bd..adb4835 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+@@ -79,6 +79,7 @@ int amdgpu_exp_hw_support = 0;
+ int amdgpu_enable_scheduler = 0;
+ int amdgpu_sched_jobs = 16;
+ int amdgpu_sched_hw_submission = 2;
++int amdgpu_enable_semaphores = 1;
+
+ MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes");
+ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
+@@ -152,6 +153,9 @@ module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444);
+ MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)");
+ module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444);
+
++MODULE_PARM_DESC(enable_semaphores, "Enable semaphores (1 = enable (default), 0 = disable)");
++module_param_named(enable_semaphores, amdgpu_enable_semaphores, int, 0644);
++
+ static struct pci_device_id pciidlist[] = {
+ #ifdef CONFIG_DRM_AMDGPU_CIK
+ /* Kaveri */
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+index 068aeaf..cfd2999 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+@@ -251,6 +251,20 @@ int amdgpu_sync_wait(struct amdgpu_sync *sync)
+ fence_put(e->fence);
+ kfree(e);
+ }
++
++ if (amdgpu_enable_semaphores)
++ return 0;
++
++ for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
++ struct amdgpu_fence *fence = sync->sync_to[i];
++ if (!fence)
++ continue;
++
++ r = fence_wait(&fence->base, false);
++ if (r)
++ return r;
++ }
++
+ return 0;
+ }
+
+@@ -285,7 +299,8 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync,
+ return -EINVAL;
+ }
+
+- if (amdgpu_enable_scheduler || (count >= AMDGPU_NUM_SYNCS)) {
++ if (amdgpu_enable_scheduler || !amdgpu_enable_semaphores ||
++ (count >= AMDGPU_NUM_SYNCS)) {
+ /* not enough room, wait manually */
+ r = fence_wait(&fence->base, false);
+ if (r)
+--
+1.9.1
+