diff options
author | Christian König <christian.koenig@amd.com> | 2015-09-05 05:12:27 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-09-23 17:23:29 -0400 |
commit | 3daea9e3d3ecd217a63f35e63f18ea7138f2ae17 (patch) | |
tree | 9a88ec12be8b0a1750fd50dc1d578a17a9070c9b /drivers/gpu/drm/amd/amdgpu | |
parent | 9fbcc7c007ea200357e2453c6b2b153646fbc165 (diff) |
drm/amdgpu: add option to disable semaphores
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>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 17 |
3 files changed, 21 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 668939a14206..e587e20074d3 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; | |||
82 | extern int amdgpu_enable_scheduler; | 82 | extern int amdgpu_enable_scheduler; |
83 | extern int amdgpu_sched_jobs; | 83 | extern int amdgpu_sched_jobs; |
84 | extern int amdgpu_sched_hw_submission; | 84 | extern int amdgpu_sched_hw_submission; |
85 | extern int amdgpu_enable_semaphores; | ||
85 | 86 | ||
86 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 | 87 | #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 |
87 | #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ | 88 | #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 0fcc0bd1622c..adb48353f2e1 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; | |||
79 | int amdgpu_enable_scheduler = 0; | 79 | int amdgpu_enable_scheduler = 0; |
80 | int amdgpu_sched_jobs = 16; | 80 | int amdgpu_sched_jobs = 16; |
81 | int amdgpu_sched_hw_submission = 2; | 81 | int amdgpu_sched_hw_submission = 2; |
82 | int amdgpu_enable_semaphores = 1; | ||
82 | 83 | ||
83 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); | 84 | MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in megabytes"); |
84 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); | 85 | module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); |
@@ -152,6 +153,9 @@ module_param_named(sched_jobs, amdgpu_sched_jobs, int, 0444); | |||
152 | MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)"); | 153 | MODULE_PARM_DESC(sched_hw_submission, "the max number of HW submissions (default 2)"); |
153 | module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444); | 154 | module_param_named(sched_hw_submission, amdgpu_sched_hw_submission, int, 0444); |
154 | 155 | ||
156 | MODULE_PARM_DESC(enable_semaphores, "Enable semaphores (1 = enable (default), 0 = disable)"); | ||
157 | module_param_named(enable_semaphores, amdgpu_enable_semaphores, int, 0644); | ||
158 | |||
155 | static struct pci_device_id pciidlist[] = { | 159 | static struct pci_device_id pciidlist[] = { |
156 | #ifdef CONFIG_DRM_AMDGPU_CIK | 160 | #ifdef CONFIG_DRM_AMDGPU_CIK |
157 | /* Kaveri */ | 161 | /* Kaveri */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c index 068aeaff7183..cfd2999acc59 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) | |||
251 | fence_put(e->fence); | 251 | fence_put(e->fence); |
252 | kfree(e); | 252 | kfree(e); |
253 | } | 253 | } |
254 | |||
255 | if (amdgpu_enable_semaphores) | ||
256 | return 0; | ||
257 | |||
258 | for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { | ||
259 | struct amdgpu_fence *fence = sync->sync_to[i]; | ||
260 | if (!fence) | ||
261 | continue; | ||
262 | |||
263 | r = fence_wait(&fence->base, false); | ||
264 | if (r) | ||
265 | return r; | ||
266 | } | ||
267 | |||
254 | return 0; | 268 | return 0; |
255 | } | 269 | } |
256 | 270 | ||
@@ -285,7 +299,8 @@ int amdgpu_sync_rings(struct amdgpu_sync *sync, | |||
285 | return -EINVAL; | 299 | return -EINVAL; |
286 | } | 300 | } |
287 | 301 | ||
288 | if (amdgpu_enable_scheduler || (count >= AMDGPU_NUM_SYNCS)) { | 302 | if (amdgpu_enable_scheduler || !amdgpu_enable_semaphores || |
303 | (count >= AMDGPU_NUM_SYNCS)) { | ||
289 | /* not enough room, wait manually */ | 304 | /* not enough room, wait manually */ |
290 | r = fence_wait(&fence->base, false); | 305 | r = fence_wait(&fence->base, false); |
291 | if (r) | 306 | if (r) |