[Intel-gfx] [PATCH 2/3] drm/i915: Skip aux plane stuff when there is no aux plane

Imre Deak imre.deak at intel.com
Thu Oct 8 13:38:51 UTC 2020


On Thu, Oct 08, 2020 at 01:16:07PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> when the hardware isn't going to use the aux plane there's no
> real point in dealing with the relevant hardware restrictions.
> So let's just skip all that when not necessary.
> 
> We can now also remove the offset=~0xfff behaviour for unused
> color planes. Let's just zero out everyting so as to not leave
> stale garbage behind to confuse people debugging the code.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Reviewed-by: Imre Deak <imre.deak at intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 14 +++++++++-----
>  drivers/gpu/drm/i915/display/intel_sprite.c  |  6 +++---
>  2 files changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 44fd7059838f..34ba34f84b2a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2001,13 +2001,17 @@ static int ccs_to_main_plane(const struct drm_framebuffer *fb, int ccs_plane)
>  	return ccs_plane - fb->format->num_planes / 2;
>  }
>  
> -/* Return either the main plane's CCS or - if not a CCS FB - UV plane */
>  int intel_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane)
>  {
> +	struct drm_i915_private *i915 = to_i915(fb->dev);
> +
>  	if (is_ccs_modifier(fb->modifier))
>  		return main_to_ccs_plane(fb, main_plane);
> -
> -	return 1;
> +	else if (INTEL_GEN(i915) < 11 &&
> +		 intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier))
> +		return 1;
> +	else
> +		return 0;
>  }
>  
>  bool
> @@ -3933,7 +3937,7 @@ static int skl_check_main_surface(struct intel_plane_state *plane_state)
>  	 * main surface offset, and it must be non-negative. Make
>  	 * sure that is what we will get.
>  	 */
> -	if (offset > aux_offset)
> +	if (aux_plane && offset > aux_offset)
>  		offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
>  							   offset, aux_offset & ~(alignment - 1));
>  
> @@ -4131,7 +4135,7 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
>  	}
>  
>  	for (i = fb->format->num_planes; i < ARRAY_SIZE(plane_state->color_plane); i++) {
> -		plane_state->color_plane[i].offset = ~0xfff;
> +		plane_state->color_plane[i].offset = 0;
>  		plane_state->color_plane[i].x = 0;
>  		plane_state->color_plane[i].y = 0;
>  	}
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c
> index 2da11ab6343c..bf8c82a2b213 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/display/intel_sprite.c
> @@ -656,7 +656,6 @@ skl_program_plane(struct intel_plane *plane,
>  	const struct drm_framebuffer *fb = plane_state->hw.fb;
>  	int aux_plane = intel_main_to_aux_plane(fb, color_plane);
>  	u32 aux_dist = plane_state->color_plane[aux_plane].offset - surf_addr;
> -	u32 aux_stride = skl_plane_stride(plane_state, aux_plane);
>  	int crtc_x = plane_state->uapi.dst.x1;
>  	int crtc_y = plane_state->uapi.dst.y1;
>  	u32 x = plane_state->color_plane[color_plane].x;
> @@ -691,6 +690,9 @@ skl_program_plane(struct intel_plane *plane,
>  		crtc_y = 0;
>  	}
>  
> +	if (INTEL_GEN(dev_priv) < 12 && aux_plane)
> +		aux_dist |= skl_plane_stride(plane_state, aux_plane);
> +
>  	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
>  
>  	intel_de_write_fw(dev_priv, PLANE_STRIDE(pipe, plane_id), stride);
> @@ -699,8 +701,6 @@ skl_program_plane(struct intel_plane *plane,
>  	intel_de_write_fw(dev_priv, PLANE_SIZE(pipe, plane_id),
>  			  (src_h << 16) | src_w);
>  
> -	if (INTEL_GEN(dev_priv) < 12)
> -		aux_dist |= aux_stride;
>  	intel_de_write_fw(dev_priv, PLANE_AUX_DIST(pipe, plane_id), aux_dist);
>  
>  	if (icl_is_hdr_plane(dev_priv, plane_id))
> -- 
> 2.26.2
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list