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 | * |
