From 92a8a8328b136c53c98afdf6d7da82bfada5b066 Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Thu, 23 Feb 2012 19:16:12 -0500 Subject: [PATCH] --- yaml --- r: 293669 b: refs/heads/master c: 81ffbbedc37c6043e5f5b123da926aa7dd8ad60a h: refs/heads/master i: 293667: 1963765277f83b6c1a3e73567e49e6715d2d637b v: v3 --- [refs] | 2 +- trunk/drivers/gpu/drm/radeon/radeon_display.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 9c9d0d22a55c..0cf2682bab0a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 884a53ef43eb69dfd48408659b9606e581aee7ba +refs/heads/master: 81ffbbedc37c6043e5f5b123da926aa7dd8ad60a diff --git a/trunk/drivers/gpu/drm/radeon/radeon_display.c b/trunk/drivers/gpu/drm/radeon/radeon_display.c index 7cb062daa71e..1f98e5fbc733 100644 --- a/trunk/drivers/gpu/drm/radeon/radeon_display.c +++ b/trunk/drivers/gpu/drm/radeon/radeon_display.c @@ -303,8 +303,17 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) if (update_pending && (DRM_SCANOUTPOS_VALID & radeon_get_crtc_scanoutpos(rdev->ddev, crtc_id, &vpos, &hpos)) && - (vpos >=0) && - (vpos < (99 * rdev->mode_info.crtcs[crtc_id]->base.hwmode.crtc_vdisplay)/100)) { + ((vpos >= (99 * rdev->mode_info.crtcs[crtc_id]->base.hwmode.crtc_vdisplay)/100) || + (vpos < 0 && !ASIC_IS_AVIVO(rdev)))) { + /* crtc didn't flip in this target vblank interval, + * but flip is pending in crtc. Based on the current + * scanout position we know that the current frame is + * (nearly) complete and the flip will (likely) + * complete before the start of the next frame. + */ + update_pending = 0; + } + if (update_pending) { /* crtc didn't flip in this target vblank interval, * but flip is pending in crtc. It will complete it * in next vblank interval, so complete the flip at