diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-03-17 14:29:15 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-05-18 04:20:50 -0400 |
commit | ef6e6cf56aca91c0b0db8de6e79e0874595fd260 (patch) | |
tree | 7ea9b9f6fec371d13d9bf76d027ad3dd7273b954 /drivers | |
parent | 2031f77ca9c17133869b265210418959a909d259 (diff) |
drm/radeon/kms: wait for gpu idle before changing power mode
set proper wait condition as noted by Rafał Miłecki.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_pm.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index 6dfeb9cf16ba..4ece89aa26f8 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c | |||
@@ -378,6 +378,16 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev) | |||
378 | radeon_get_power_state(rdev, rdev->pm.planned_action); | 378 | radeon_get_power_state(rdev, rdev->pm.planned_action); |
379 | mutex_lock(&rdev->cp.mutex); | 379 | mutex_lock(&rdev->cp.mutex); |
380 | 380 | ||
381 | /* wait for GPU idle */ | ||
382 | rdev->pm.gui_idle = false; | ||
383 | rdev->irq.gui_idle = true; | ||
384 | radeon_irq_set(rdev); | ||
385 | wait_event_interruptible_timeout( | ||
386 | rdev->irq.idle_queue, rdev->pm.gui_idle, | ||
387 | msecs_to_jiffies(RADEON_WAIT_IDLE_TIMEOUT)); | ||
388 | rdev->irq.gui_idle = false; | ||
389 | radeon_irq_set(rdev); | ||
390 | |||
381 | if (rdev->pm.active_crtcs & (1 << 0)) { | 391 | if (rdev->pm.active_crtcs & (1 << 0)) { |
382 | rdev->pm.req_vblank |= (1 << 0); | 392 | rdev->pm.req_vblank |= (1 << 0); |
383 | drm_vblank_get(rdev->ddev, 0); | 393 | drm_vblank_get(rdev->ddev, 0); |