]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/psr: Do PSR exit on frontbuffer flush on LunarLake and onwards
authorJouni Högander <jouni.hogander@intel.com>
Tue, 27 Jan 2026 12:41:18 +0000 (14:41 +0200)
committerJouni Högander <jouni.hogander@intel.com>
Mon, 2 Feb 2026 06:13:39 +0000 (08:13 +0200)
We need to use intel_psr_exit in frontbuffer flush on LunarLake and
onwards if we want to move using trans push mechanism to trigger Frame
Change event.

Keep PSR1 and PSR2 HW tracking as it is for older platforms as this was
seen causing problems there.

v2: typo fixed

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patch.msgid.link/20260127124120.1069026-10-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_psr.c

index 9613c50623dc34d2625c66eda70592e1a9d764f2..9a4354c6bdda9042099b4746a23b21304707a419 100644 (file)
@@ -3559,7 +3559,14 @@ 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) {
+       if (DISPLAY_VER(display) >= 20) {
+               /*
+                * We can use PSR exit on LunarLake onwards. Also
+                * using trans push mechanism to trigger Frame Change
+                * event requires using PSR exit.
+                */
+               intel_psr_exit(intel_dp);
+       } else if (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? */
@@ -3579,16 +3586,11 @@ 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) {
+       } else {
                /*
-                * PSR1 on all platforms
-                * PSR2 HW tracking
-                * Panel Replay Full frame update
+                * On older platforms using PSR exit was seen causing problems
                 */
                intel_psr_force_update(intel_dp);
-       } else {
-               /* Selective update LNL onwards */
-               intel_psr_exit(intel_dp);
        }
 
        if (!intel_dp->psr.active && !intel_dp->psr.busy_frontbuffer_bits)