From: Alex Deucher Date: Wed, 17 Mar 2010 18:29:15 +0000 (-0400) Subject: drm/radeon/kms: wait for gpu idle before changing power mode X-Git-Tag: firefly_0821_release~9833^2~1599^2~75 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ef6e6cf56aca91c0b0db8de6e79e0874595fd260;p=firefly-linux-kernel-4.4.55.git 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 Signed-off-by: Dave Airlie --- 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) radeon_get_power_state(rdev, rdev->pm.planned_action); mutex_lock(&rdev->cp.mutex); + /* wait for GPU idle */ + rdev->pm.gui_idle = false; + rdev->irq.gui_idle = true; + radeon_irq_set(rdev); + wait_event_interruptible_timeout( + rdev->irq.idle_queue, rdev->pm.gui_idle, + msecs_to_jiffies(RADEON_WAIT_IDLE_TIMEOUT)); + rdev->irq.gui_idle = false; + radeon_irq_set(rdev); + if (rdev->pm.active_crtcs & (1 << 0)) { rdev->pm.req_vblank |= (1 << 0); drm_vblank_get(rdev->ddev, 0);