diff mbox series

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

Message ID 20201008101608.8652-2-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series [1/3] drm/i915: Set all unused color plane offsets to ~0xfff again | expand

Commit Message

Ville Syrjälä Oct. 8, 2020, 10:16 a.m. UTC
From: Ville Syrjälä <ville.syrjala@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@linux.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(-)

Comments

Imre Deak Oct. 8, 2020, 1:38 p.m. UTC | #1
On Thu, Oct 08, 2020 at 01:16:07PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@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@linux.intel.com>

Reviewed-by: Imre Deak <imre.deak@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@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox series

Patch

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