|
@@ -82,6 +82,7 @@ u32 evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
|
|
|
{
|
|
|
struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id];
|
|
|
u32 tmp = RREG32(EVERGREEN_GRPH_UPDATE + radeon_crtc->crtc_offset);
|
|
|
+ int i;
|
|
|
|
|
|
/* Lock the graphics update lock */
|
|
|
tmp |= EVERGREEN_GRPH_UPDATE_LOCK;
|
|
@@ -99,7 +100,11 @@ u32 evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
|
|
|
(u32)crtc_base);
|
|
|
|
|
|
/* Wait for update_pending to go high. */
|
|
|
- while (!(RREG32(EVERGREEN_GRPH_UPDATE + radeon_crtc->crtc_offset) & EVERGREEN_GRPH_SURFACE_UPDATE_PENDING));
|
|
|
+ for (i = 0; i < rdev->usec_timeout; i++) {
|
|
|
+ if (RREG32(EVERGREEN_GRPH_UPDATE + radeon_crtc->crtc_offset) & EVERGREEN_GRPH_SURFACE_UPDATE_PENDING)
|
|
|
+ break;
|
|
|
+ udelay(1);
|
|
|
+ }
|
|
|
DRM_DEBUG("Update pending now high. Unlocking vupdate_lock.\n");
|
|
|
|
|
|
/* Unlock the lock, so double-buffering can take place inside vblank */
|