Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6304cd91 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter
Browse files

drm/i915: Drop the excessive vblank waits from modeset codepaths



Now that we've plugged the mmio vs. ring flip race, we shouldn't need
these vblank waits in the modeset codepaths anymore. So get rid of
them.

v2: gen2 needs to wait for planes to turn off before disabling pipe

Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent cea165c3
Loading
Loading
Loading
Loading
+7 −11
Original line number Original line Diff line number Diff line
@@ -2108,7 +2108,6 @@ static void intel_enable_primary_hw_plane(struct drm_i915_private *dev_priv,


	I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE);
	I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE);
	intel_flush_primary_plane(dev_priv, plane);
	intel_flush_primary_plane(dev_priv, plane);
	intel_wait_for_vblank(dev_priv->dev, pipe);
}
}


/**
/**
@@ -2138,7 +2137,6 @@ static void intel_disable_primary_hw_plane(struct drm_i915_private *dev_priv,


	I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE);
	I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE);
	intel_flush_primary_plane(dev_priv, plane);
	intel_flush_primary_plane(dev_priv, plane);
	intel_wait_for_vblank(dev_priv->dev, pipe);
}
}


static bool need_vtd_wa(struct drm_device *dev)
static bool need_vtd_wa(struct drm_device *dev)
@@ -4002,15 +4000,6 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)


	intel_crtc_enable_planes(crtc);
	intel_crtc_enable_planes(crtc);


	/*
	 * There seems to be a race in PCH platform hw (at least on some
	 * outputs) where an enabled pipe still completes any pageflip right
	 * away (as if the pipe is off) instead of waiting for vblank. As soon
	 * as the first vblank happend, everything works as expected. Hence just
	 * wait for one vblank before returning to avoid strange things
	 * happening.
	 */
	intel_wait_for_vblank(dev, intel_crtc->pipe);
}
}


/* IPS only exists on ULT machines and is tied to pipe A. */
/* IPS only exists on ULT machines and is tied to pipe A. */
@@ -4741,6 +4730,13 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
	for_each_encoder_on_crtc(dev, crtc, encoder)
	for_each_encoder_on_crtc(dev, crtc, encoder)
		encoder->disable(encoder);
		encoder->disable(encoder);


	/*
	 * On gen2 planes are double buffered but the pipe isn't, so we must
	 * wait for planes to fully turn off before disabling the pipe.
	 */
	if (IS_GEN2(dev))
		intel_wait_for_vblank(dev, pipe);

	intel_set_cpu_fifo_underrun_reporting(dev, pipe, false);
	intel_set_cpu_fifo_underrun_reporting(dev, pipe, false);
	intel_disable_pipe(dev_priv, pipe);
	intel_disable_pipe(dev_priv, pipe);