diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index ae3f4454928e..b322bde98675 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -784,6 +784,17 @@ intel_find_pll_g4x_dp(const intel_limit_t *limit, struct drm_crtc *crtc, | |||
784 | return true; | 784 | return true; |
785 | } | 785 | } |
786 | 786 | ||
787 | static void ironlake_wait_for_vblank(struct drm_device *dev, int pipe) | ||
788 | { | ||
789 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
790 | u32 frame, frame_reg = PIPEFRAME(pipe); | ||
791 | |||
792 | frame = I915_READ(frame_reg); | ||
793 | |||
794 | if (wait_for(I915_READ_NOTRACE(frame_reg) != frame, 50)) | ||
795 | DRM_DEBUG_KMS("vblank wait timed out\n"); | ||
796 | } | ||
797 | |||
787 | /** | 798 | /** |
788 | * intel_wait_for_vblank - wait for vblank on a given pipe | 799 | * intel_wait_for_vblank - wait for vblank on a given pipe |
789 | * @dev: drm device | 800 | * @dev: drm device |
@@ -797,6 +808,11 @@ void intel_wait_for_vblank(struct drm_device *dev, int pipe) | |||
797 | struct drm_i915_private *dev_priv = dev->dev_private; | 808 | struct drm_i915_private *dev_priv = dev->dev_private; |
798 | int pipestat_reg = PIPESTAT(pipe); | 809 | int pipestat_reg = PIPESTAT(pipe); |
799 | 810 | ||
811 | if (INTEL_INFO(dev)->gen >= 5) { | ||
812 | ironlake_wait_for_vblank(dev, pipe); | ||
813 | return; | ||
814 | } | ||
815 | |||
800 | /* Clear existing vblank status. Note this will clear any other | 816 | /* Clear existing vblank status. Note this will clear any other |
801 | * sticky status fields as well. | 817 | * sticky status fields as well. |
802 | * | 818 | * |