aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 538e5f27d120..47c5ce9807db 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -37,6 +37,10 @@
37 37
38#include <linux/pm_runtime.h> 38#include <linux/pm_runtime.h>
39 39
40#ifdef CONFIG_DRM_AMD_DC
41#include "amdgpu_dm_irq.h"
42#endif
43
40#define AMDGPU_WAIT_IDLE_TIMEOUT 200 44#define AMDGPU_WAIT_IDLE_TIMEOUT 200
41 45
42/* 46/*
@@ -221,15 +225,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
221 225
222 spin_lock_init(&adev->irq.lock); 226 spin_lock_init(&adev->irq.lock);
223 227
224 if (!adev->enable_virtual_display)
225 /* Disable vblank irqs aggressively for power-saving */
226 adev->ddev->vblank_disable_immediate = true;
227
228 r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc);
229 if (r) {
230 return r;
231 }
232
233 /* enable msi */ 228 /* enable msi */
234 adev->irq.msi_enabled = false; 229 adev->irq.msi_enabled = false;
235 230
@@ -241,7 +236,21 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
241 } 236 }
242 } 237 }
243 238
244 INIT_WORK(&adev->hotplug_work, amdgpu_hotplug_work_func); 239 if (!amdgpu_device_has_dc_support(adev)) {
240 if (!adev->enable_virtual_display)
241 /* Disable vblank irqs aggressively for power-saving */
242 /* XXX: can this be enabled for DC? */
243 adev->ddev->vblank_disable_immediate = true;
244
245 r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc);
246 if (r)
247 return r;
248
249 /* pre DCE11 */
250 INIT_WORK(&adev->hotplug_work,
251 amdgpu_hotplug_work_func);
252 }
253
245 INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func); 254 INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func);
246 255
247 adev->irq.installed = true; 256 adev->irq.installed = true;