From: Ville Syrjälä <[email protected]>

There's lots of expensive stuff inserted between the PLANE_CTL
and  PLANE_SURF writes even though the comment before the PLANE_CTL
write says not to put stuff there. Move it all to a more apporiate
place.

There's also a weird PLANE_COLOR_CTL RMW in there. I guess because
force_black was computed way too late originally, but that is now
sorted.

Cc: Anshuman Gupta <[email protected]>
Cc: Daniele Ceraolo Spurio <[email protected]>
Cc: Juston Li <[email protected]>
Cc: Rodrigo Vivi <[email protected]>
Cc: Uma Shankar <[email protected]>
Signed-off-by: Ville Syrjälä <[email protected]>
---
 .../drm/i915/display/skl_universal_plane.c    | 30 +++++++++----------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index 1fcb41942c7e..55dae8c8fcad 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -985,6 +985,9 @@ static u32 glk_plane_color_ctl(const struct 
intel_crtc_state *crtc_state,
                        plane_color_ctl |= 
PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
        }
 
+       if (plane_state->force_black)
+               plane_color_ctl |= PLANE_COLOR_PLANE_CSC_ENABLE;
+
        return plane_color_ctl;
 }
 
@@ -1090,8 +1093,19 @@ skl_program_plane(struct intel_plane *plane,
                        aux_dist |= skl_plane_stride(plane_state, aux_plane);
        }
 
+       plane_surf = intel_plane_ggtt_offset(plane_state) + surf_addr;
+       if (plane_state->decrypt)
+               plane_surf |= PLANE_SURF_DECRYPT;
+
        spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
 
+       /*
+        * FIXME: pxp session invalidation can hit any time even at time of 
commit
+        * or after the commit, display content will be garbage.
+        */
+       if (plane_state->force_black)
+               intel_load_plane_csc_black(plane);
+
        intel_de_write_fw(dev_priv, PLANE_STRIDE(pipe, plane_id), stride);
        intel_de_write_fw(dev_priv, PLANE_POS(pipe, plane_id),
                          (crtc_y << 16) | crtc_x);
@@ -1146,22 +1160,6 @@ skl_program_plane(struct intel_plane *plane,
         * the control register just before the surface register.
         */
        intel_de_write_fw(dev_priv, PLANE_CTL(pipe, plane_id), plane_ctl);
-       plane_surf = intel_plane_ggtt_offset(plane_state) + surf_addr;
-       plane_color_ctl = intel_de_read_fw(dev_priv, PLANE_COLOR_CTL(pipe, 
plane_id));
-
-       /*
-        * FIXME: pxp session invalidation can hit any time even at time of 
commit
-        * or after the commit, display content will be garbage.
-        */
-       if (plane_state->decrypt) {
-               plane_surf |= PLANE_SURF_DECRYPT;
-       } else if (plane_state->force_black) {
-               intel_load_plane_csc_black(plane);
-               plane_color_ctl |= PLANE_COLOR_PLANE_CSC_ENABLE;
-       }
-
-       intel_de_write_fw(dev_priv, PLANE_COLOR_CTL(pipe, plane_id),
-                         plane_color_ctl);
        intel_de_write_fw(dev_priv, PLANE_SURF(pipe, plane_id), plane_surf);
 
        spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
-- 
2.32.0

Reply via email to