diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-05-04 16:18:15 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-08 09:07:38 -0400 |
commit | a928d536c09eb071d114aa94bc60d002e7c8f92b (patch) | |
tree | 3aa37c9c6116584d67444c6a598711fa264a5b3f | |
parent | 4e89ee174bb2da341bf90a84321c7008a3c9210d (diff) |
drm/i915: implement ironlake_wait_for_vblank
intel_wait_for_vblank uses PIPESTAT, which does not exist on Ironlake
and newer, so now we use PIPEFRAME.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
[danvet: Ditch the check for disable pipe from the new ilk wait for
vblank function to keep it consisten with existing behaviour.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-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 | * |