Skip to content

Commit 9535576

Browse files
hoganderrodrigovivi
authored andcommitted
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 <lemen@lemen.xyz> Tested-by: Koos Vriezen <koos.vriezen@gmail.com> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14946 Signed-off-by: Jouni Högander <jouni.hogander@intel.com> Reviewed-by: Mika Kahola <mika.kahola@intel.com> Link: https://lore.kernel.org/r/20250922102725.2752742-1-jouni.hogander@intel.com (cherry picked from commit 924adb0bbdd8fef25fd229c76e3f602c3e8752ee) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
1 parent 86af6b9 commit 9535576

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

drivers/gpu/drm/i915/display/intel_psr.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,6 +3402,7 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
34023402
struct intel_display *display = to_intel_display(intel_dp);
34033403

34043404
if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_enabled) {
3405+
/* Selective fetch prior LNL */
34053406
if (intel_dp->psr.psr2_sel_fetch_cff_enabled) {
34063407
/* can we turn CFF off? */
34073408
if (intel_dp->psr.busy_frontbuffer_bits == 0)
@@ -3420,12 +3421,19 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
34203421
intel_psr_configure_full_frame_update(intel_dp);
34213422

34223423
intel_psr_force_update(intel_dp);
3424+
} else if (!intel_dp->psr.psr2_sel_fetch_enabled) {
3425+
/*
3426+
* PSR1 on all platforms
3427+
* PSR2 HW tracking
3428+
* Panel Replay Full frame update
3429+
*/
3430+
intel_psr_force_update(intel_dp);
34233431
} else {
3432+
/* Selective update LNL onwards */
34243433
intel_psr_exit(intel_dp);
34253434
}
34263435

3427-
if ((!intel_dp->psr.psr2_sel_fetch_enabled || DISPLAY_VER(display) >= 20) &&
3428-
!intel_dp->psr.busy_frontbuffer_bits)
3436+
if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)
34293437
queue_work(display->wq.unordered, &intel_dp->psr.work);
34303438
}
34313439

0 commit comments

Comments
 (0)