diff mbox series

[2/4] drm/i915/display: Fix sel fetch plane offset calculation

Message ID 20210731001019.150373-2-jose.souza@intel.com (mailing list archive)
State New, archived
Headers show
Series [1/4] drm/i915/display/tgl+: Dispatch atomic commits instead of front buffer modifications | expand

Commit Message

Souza, Jose July 31, 2021, 12:10 a.m. UTC
skl_calc_main_surface_offset() is used to calculate an aligned plane
surface address considering the inner framebuffer x and y offset.
It can not be used by selective fetch functions becase there is no
PLANE_SEL_FETCH_SURF.
So the PLANE_SEL_FETCH_OFFSET.y should only be PLANE_OFFSET.y +
damaged_area_within_plane.y1.

This fixes glitches seen in fbcon caused by typing something in
the terminal.

BSpec: 55229
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

Comments

Gwan-gyeong Mun Aug. 13, 2021, 7:40 a.m. UTC | #1
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>

On 7/31/21 3:10 AM, José Roberto de Souza wrote:
> skl_calc_main_surface_offset() is used to calculate an aligned plane
> surface address considering the inner framebuffer x and y offset.
> It can not be used by selective fetch functions becase there is no
> PLANE_SEL_FETCH_SURF.
> So the PLANE_SEL_FETCH_OFFSET.y should only be PLANE_OFFSET.y +
> damaged_area_within_plane.y1.
> 
> This fixes glitches seen in fbcon caused by typing something in
> the terminal.
> 
> BSpec: 55229
> Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_psr.c | 8 ++------
>   1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index caf92f414a6e7..894a2d35668a2 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1487,8 +1487,8 @@ void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
>   	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
>   	enum pipe pipe = plane->pipe;
>   	const struct drm_rect *clip;
> -	u32 val, offset;
> -	int ret, x, y;
> +	u32 val;
> +	int x, y;
>   
>   	if (!crtc_state->enable_psr2_sel_fetch)
>   		return;
> @@ -1508,10 +1508,6 @@ void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
>   	/* TODO: consider auxiliary surfaces */
>   	x = plane_state->uapi.src.x1 >> 16;
>   	y = (plane_state->uapi.src.y1 >> 16) + clip->y1;
> -	ret = skl_calc_main_surface_offset(plane_state, &x, &y, &offset);
> -	if (ret)
> -		drm_warn_once(&dev_priv->drm, "skl_calc_main_surface_offset() returned %i\n",
> -			      ret);
>   	val = y << 16 | x;
>   	intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_OFFSET(pipe, plane->id),
>   			  val);
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index caf92f414a6e7..894a2d35668a2 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1487,8 +1487,8 @@  void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 	enum pipe pipe = plane->pipe;
 	const struct drm_rect *clip;
-	u32 val, offset;
-	int ret, x, y;
+	u32 val;
+	int x, y;
 
 	if (!crtc_state->enable_psr2_sel_fetch)
 		return;
@@ -1508,10 +1508,6 @@  void intel_psr2_program_plane_sel_fetch(struct intel_plane *plane,
 	/* TODO: consider auxiliary surfaces */
 	x = plane_state->uapi.src.x1 >> 16;
 	y = (plane_state->uapi.src.y1 >> 16) + clip->y1;
-	ret = skl_calc_main_surface_offset(plane_state, &x, &y, &offset);
-	if (ret)
-		drm_warn_once(&dev_priv->drm, "skl_calc_main_surface_offset() returned %i\n",
-			      ret);
 	val = y << 16 | x;
 	intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_OFFSET(pipe, plane->id),
 			  val);