> -----Original Message-----
> From: Intel-gfx <[email protected]> On Behalf Of Jouni 
> Högander
> Sent: Monday, 22 September 2025 13.27
> To: [email protected]; [email protected]
> Cc: Hogander, Jouni <[email protected]>; Lemen <[email protected]>; Koos 
> Vriezen <[email protected]>
> Subject: [PATCH] drm/i915/psr: Deactivate PSR only on LNL and when selective 
> fetch enabled
> 
> Using intel_psr_exit in frontbuffer flush on older platforms seems to be 
> causing problems.
> 
> Sending single full frame update using intel_psr_force_update is anyways more 
> optimal compared to psr deactivate/activate ->
> move back to this approach on PSR1, PSR HW tracking and Panel Replay full 
> frame update and use deactivate/activate only on
> LunarLake and only when selective fetch is enabled.
> 
> Tested-by: Lemen <[email protected]>
> Tested-by: Koos Vriezen <[email protected]>
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14946

Reviewed-by: Mika Kahola <[email protected]>

> Signed-off-by: Jouni Högander <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 01bf304c705f..10eb93a34cf2 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -3402,6 +3402,7 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
>       struct intel_display *display = to_intel_display(intel_dp);
> 
>       if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
> +             /* Selective fetch prior LNL */
>               if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
>                       /* can we turn CFF off? */
>                       if (intel_dp->psr.busy_frontbuffer_bits == 0) @@ 
> -3420,12 +3421,19 @@ static void
> _psr_flush_handle(struct intel_dp *intel_dp)
>               intel_psr_configure_full_frame_update(intel_dp);
> 
>               intel_psr_force_update(intel_dp);
> +     } else if (!intel_dp->psr.psr2_sel_fetch_enabled) {
> +             /*
> +              * PSR1 on all platforms
> +              * PSR2 HW tracking
> +              * Panel Replay Full frame update
> +              */
> +             intel_psr_force_update(intel_dp);
>       } else {
> +             /* Selective update LNL onwards */
>               intel_psr_exit(intel_dp);
>       }
> 
> -     if ((!intel_dp->psr.psr2_sel_fetch_enabled || DISPLAY_VER(display) >= 
> 20) &&
> -         !intel_dp->psr.busy_frontbuffer_bits)
> +     if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)
>               queue_work(display->wq.unordered, &intel_dp->psr.work);  }
> 
> --
> 2.43.0

Reply via email to