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