[Intel-gfx] [PATCH] drm/i915/psr: Use continuous full frame update instead of single
Hogander, Jouni
jouni.hogander at intel.com
Mon Nov 28 17:37:28 UTC 2022
I found issue with this patch:
There is a time window between psr_invalidate/flush and next vblank
where atomic commit with selective update will cause full frame update
being lost due to overwriting the configuration.
I will send a new version.
On Fri, 2022-11-25 at 15:43 +0200, Jouni Högander wrote:
> Currently we are observing occasionally display flickering or
> complete
> freeze. This is narrowed down to be caused by single full frame
> update
> (SFF).
>
> SFF bit after it's written gets cleared by HW in subsequent vblank
> i.e. when the update is sent to the panel. SFF bit is required to be
> written together with partial frame update (PFU) bit. After the bit
> gets cleared by the HW psr2 man trk ctl register still contains PFU
> bit. If there is subsequent update for any reason we will end up
> having selective update/fetch configuration where start line is 0 and
> end line is 0. Also selective fetch configuration for the planes is
> not properly performed. This seems to be causing problems with some
> panels.
>
> Fix this by using continuous full frame update instead and switch to
> partial frame update only when selective update area is properly
> calculated and configured.
>
> This is also workaround for HSD 14014971508
>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: José Roberto de Souza <jose.souza at intel.com>
> Cc: Mika Kahola <mika.kahola at intel.com>
>
> Reported-by: Lee Shawn C <shawn.c.lee at intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_psr.c | 21 ++-------------------
> 1 file changed, 2 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 5b678916e6db..41b0718eb3a1 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1480,13 +1480,6 @@ static u32 man_trk_ctl_enable_bit_get(struct
> drm_i915_private *dev_priv)
> PSR2_MAN_TRK_CTL_ENABLE;
> }
>
> -static u32 man_trk_ctl_single_full_frame_bit_get(struct
> drm_i915_private *dev_priv)
> -{
> - return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >=
> 14 ?
> - ADLP_PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME :
> - PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME;
> -}
> -
> static u32 man_trk_ctl_partial_frame_bit_get(struct drm_i915_private
> *dev_priv)
> {
> return IS_ALDERLAKE_P(dev_priv) || DISPLAY_VER(dev_priv) >=
> 14 ?
> @@ -1510,7 +1503,7 @@ static void psr_force_hw_tracking_exit(struct
> intel_dp *intel_dp)
> PSR2_MAN_TRK_CTL(intel_dp-
> >psr.transcoder),
> man_trk_ctl_enable_bit_get(dev_priv) |
>
> man_trk_ctl_partial_frame_bit_get(dev_priv) |
> -
> man_trk_ctl_single_full_frame_bit_get(dev_priv));
> +
> man_trk_ctl_continuos_full_frame(dev_priv));
>
> /*
> * Display WA #0884: skl+
> @@ -1624,11 +1617,7 @@ static void psr2_man_trk_ctl_calc(struct
> intel_crtc_state *crtc_state,
> val |= man_trk_ctl_partial_frame_bit_get(dev_priv);
>
> if (full_update) {
> - /*
> - * Not applying Wa_14014971508:adlp as we do not
> support the
> - * feature that requires this workaround.
> - */
> - val |=
> man_trk_ctl_single_full_frame_bit_get(dev_priv);
> + val |= man_trk_ctl_continuos_full_frame(dev_priv);
> goto exit;
> }
>
> @@ -2306,16 +2295,10 @@ static void _psr_flush_handle(struct intel_dp
> *intel_dp)
> if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
> /* can we turn CFF off? */
> if (intel_dp->psr.busy_frontbuffer_bits == 0)
> {
> - u32 val =
> man_trk_ctl_enable_bit_get(dev_priv) |
> -
> man_trk_ctl_partial_frame_bit_get(dev_priv) |
> -
> man_trk_ctl_single_full_frame_bit_get(dev_priv);
> -
> /*
> * turn continuous full frame off and
> do a single
> * full frame
> */
> - intel_de_write(dev_priv,
> PSR2_MAN_TRK_CTL(intel_dp->psr.transcoder),
> - val);
> intel_de_write(dev_priv,
> CURSURFLIVE(intel_dp->psr.pipe), 0);
> intel_dp-
> >psr.psr2_sel_fetch_cff_enabled = false;
> }
More information about the Intel-gfx
mailing list