aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rs600.c
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2009-12-22 17:02:16 -0500
committerDave Airlie <airlied@redhat.com>2010-02-08 18:32:26 -0500
commitc913e23a145ae07b6f9f88aae8cd5ad06b5729ff (patch)
treeaebde8632096f5b24f0a1592800e1ec1e7926c0b /drivers/gpu/drm/radeon/rs600.c
parent18917b60bca094e7830e4046e336d024f73f1c90 (diff)
drm/radeon/kms: add dynamic engine reclocking (V9)
V2: reorganize functions, fix modesetting calls V3: rebase patch, use radeon's workqueue V4: enable on tested chipsets only, request VBLANK IRQs V5: enable PM on older hardware (IRQs, mode_fixup, dpms) V6: use separate dynpm module parameter V7: drop RADEON_ prefix, set minimum mode for dpms off V8: update legacy encoder call, fix order in rs600 IRQ V9: update compute_clocks call in legacy, not only DPMS_OFF Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rs600.c')
-rw-r--r--drivers/gpu/drm/radeon/rs600.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index c3818562a13e..a581fdead4dd 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -406,10 +406,16 @@ int rs600_irq_process(struct radeon_device *rdev)
406 if (G_000044_SW_INT(status)) 406 if (G_000044_SW_INT(status))
407 radeon_fence_process(rdev); 407 radeon_fence_process(rdev);
408 /* Vertical blank interrupts */ 408 /* Vertical blank interrupts */
409 if (G_007EDC_LB_D1_VBLANK_INTERRUPT(r500_disp_int)) 409 if (G_007EDC_LB_D1_VBLANK_INTERRUPT(r500_disp_int)) {
410 drm_handle_vblank(rdev->ddev, 0); 410 drm_handle_vblank(rdev->ddev, 0);
411 if (G_007EDC_LB_D2_VBLANK_INTERRUPT(r500_disp_int)) 411 if (rdev->pm.vblank_callback)
412 queue_work(rdev->wq, &rdev->pm.reclock_work);
413 }
414 if (G_007EDC_LB_D2_VBLANK_INTERRUPT(r500_disp_int)) {
412 drm_handle_vblank(rdev->ddev, 1); 415 drm_handle_vblank(rdev->ddev, 1);
416 if (rdev->pm.vblank_callback)
417 queue_work(rdev->wq, &rdev->pm.reclock_work);
418 }
413 if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(r500_disp_int)) { 419 if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(r500_disp_int)) {
414 queue_hotplug = true; 420 queue_hotplug = true;
415 DRM_DEBUG("HPD1\n"); 421 DRM_DEBUG("HPD1\n");