mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 11:01:06 -04:00
drm/i915: Fix up skl_program_plane() pxp stuff
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 <anshuman.gupta@intel.com> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Juston Li <juston.li@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211006235704.28894-3-ville.syrjala@linux.intel.com Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user