[Intel-gfx] [PATCH 6/7] drm/i915: Nuke intel_pre_disable_primary_noatomic()

Souza, Jose jose.souza at intel.com
Wed Nov 27 23:56:17 UTC 2019


On Wed, 2019-11-27 at 21:05 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Let's just inline intel_pre_disable_primary_noatomic() into
> intel_plane_disable_noatomic(). The CxSR disable we can do
> regardless of which plane we're disabling, and while at it we can
> make the gen2 underrun w/a accurate by consulting the active_planes
> bitmask.

Reviewed-by: José Roberto de Souza <jose.souza at intel.com>

> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 57 ++++++++--------
> ----
>  1 file changed, 22 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 5368f3ab70af..4377ee2eee56 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -171,7 +171,6 @@ static void ironlake_pfit_disable(const struct
> intel_crtc_state *old_crtc_state)
>  static void ironlake_pfit_enable(const struct intel_crtc_state
> *crtc_state);
>  static void intel_modeset_setup_hw_state(struct drm_device *dev,
>  					 struct drm_modeset_acquire_ctx
> *ctx);
> -static void intel_pre_disable_primary_noatomic(struct drm_crtc
> *crtc);
>  
>  struct intel_limit {
>  	struct {
> @@ -3212,6 +3211,7 @@ static void fixup_active_planes(struct
> intel_crtc_state *crtc_state)
>  static void intel_plane_disable_noatomic(struct intel_crtc *crtc,
>  					 struct intel_plane *plane)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  	struct intel_crtc_state *crtc_state =
>  		to_intel_crtc_state(crtc->base.state);
>  	struct intel_plane_state *plane_state =
> @@ -3227,7 +3227,27 @@ static void
> intel_plane_disable_noatomic(struct intel_crtc *crtc,
>  	crtc_state->min_cdclk[plane->id] = 0;
>  
>  	if (plane->id == PLANE_PRIMARY)
> -		intel_pre_disable_primary_noatomic(&crtc->base);
> +		hsw_disable_ips(crtc_state);
> +
> +	/*
> +	 * Vblank time updates from the shadow to live plane control
> register
> +	 * are blocked if the memory self-refresh mode is active at
> that
> +	 * moment. So to make sure the plane gets truly disabled,
> disable
> +	 * first the self-refresh mode. The self-refresh enable bit in
> turn
> +	 * will be checked/applied by the HW only at the next frame
> start
> +	 * event which is after the vblank start event, so we need to
> have a
> +	 * wait-for-vblank between disabling the plane and the pipe.
> +	 */
> +	if (HAS_GMCH(dev_priv) &&
> +	    intel_set_memory_cxsr(dev_priv, false))
> +		intel_wait_for_vblank(dev_priv, crtc->pipe);
> +
> +	/*
> +	 * Gen2 reports pipe underruns whenever all planes are
> disabled.
> +	 * So disable underrun reporting before all the planes get
> disabled.
> +	 */
> +	if (IS_GEN(dev_priv, 2) && !crtc_state->active_planes)
> +		intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc-
> >pipe, false);
>  
>  	intel_disable_plane(plane, crtc_state);
>  }
> @@ -5908,39 +5928,6 @@ static void
> intel_crtc_dpms_overlay_disable(struct intel_crtc *intel_crtc)
>  	 */
>  }
>  
> -
> -/* FIXME get rid of this and use pre_plane_update */
> -static void
> -intel_pre_disable_primary_noatomic(struct drm_crtc *crtc)
> -{
> -	struct drm_device *dev = crtc->dev;
> -	struct drm_i915_private *dev_priv = to_i915(dev);
> -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
> -	enum pipe pipe = intel_crtc->pipe;
> -
> -	/*
> -	 * Gen2 reports pipe underruns whenever all planes are
> disabled.
> -	 * So disable underrun reporting before all the planes get
> disabled.
> -	 */
> -	if (IS_GEN(dev_priv, 2))
> -		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe,
> false);
> -
> -	hsw_disable_ips(to_intel_crtc_state(crtc->state));
> -
> -	/*
> -	 * Vblank time updates from the shadow to live plane control
> register
> -	 * are blocked if the memory self-refresh mode is active at
> that
> -	 * moment. So to make sure the plane gets truly disabled,
> disable
> -	 * first the self-refresh mode. The self-refresh enable bit in
> turn
> -	 * will be checked/applied by the HW only at the next frame
> start
> -	 * event which is after the vblank start event, so we need to
> have a
> -	 * wait-for-vblank between disabling the plane and the pipe.
> -	 */
> -	if (HAS_GMCH(dev_priv) &&
> -	    intel_set_memory_cxsr(dev_priv, false))
> -		intel_wait_for_vblank(dev_priv, pipe);
> -}
> -
>  static bool hsw_pre_update_disable_ips(const struct intel_crtc_state
> *old_crtc_state,
>  				       const struct intel_crtc_state
> *new_crtc_state)
>  {


More information about the Intel-gfx mailing list