]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/psr: Use TRANS_PUSH to trigger frame change event
authorJouni Högander <jouni.hogander@intel.com>
Tue, 27 Jan 2026 12:41:20 +0000 (14:41 +0200)
committerJouni Högander <jouni.hogander@intel.com>
Mon, 2 Feb 2026 06:13:40 +0000 (08:13 +0200)
Now we have everything in place for triggering PSR "frame change" event
using TRANS_PUSH: use TRANS_PUSH for LunarLake and onwards.

v4:
  - Added call to intel_vrr_psr_frame_change_enable call
  - added setting LNL_TRANS_PUSH_PSR_PR_EN into intel_vrr_send_push
v3: use HAS_PSR_FRAME_CHANGE macro
v2: use AND instead of OR in intel_psr_use_trans_push

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-12-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_psr.c
drivers/gpu/drm/i915/display/intel_vrr.c

index 9a4354c6bdda9042099b4746a23b21304707a419..4e644711c571fc59217360c992a102cd12fdc244 100644 (file)
@@ -2125,6 +2125,9 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
                intel_dmc_block_pkgc(display, intel_dp->psr.pipe, true);
 
        intel_alpm_configure(intel_dp, crtc_state);
+
+       if (HAS_PSR_TRANS_PUSH_FRAME_CHANGE(display))
+               intel_vrr_psr_frame_change_enable(crtc_state);
 }
 
 static bool psr_interrupt_error_check(struct intel_dp *intel_dp)
@@ -4569,6 +4572,7 @@ int intel_psr_min_guardband(struct intel_crtc_state *crtc_state)
 
 bool intel_psr_use_trans_push(const struct intel_crtc_state *crtc_state)
 {
-       /* TODO: Enable using trans push when everything is in place */
-       return false;
+       struct intel_display *display = to_intel_display(crtc_state);
+
+       return HAS_PSR_TRANS_PUSH_FRAME_CHANGE(display) && crtc_state->has_psr;
 }
index 8a072f90049f54b23781e084f8d71a633c199182..9d814cc2d608a6079ab81be337bee8760199846e 100644 (file)
@@ -689,6 +689,9 @@ static u32 trans_vrr_push(const struct intel_crtc_state *crtc_state,
        if (send_push)
                trans_vrr_push |= TRANS_PUSH_SEND;
 
+       if (HAS_PSR_TRANS_PUSH_FRAME_CHANGE(display))
+               trans_vrr_push |= LNL_TRANS_PUSH_PSR_PR_EN;
+
        return trans_vrr_push;
 }