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 <[email protected]>
Cc: Ville Syrjälä <[email protected]>
Signed-off-by: José Roberto de Souza <[email protected]>
---
 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);
-- 
2.32.0

Reply via email to