From: Jouni Högander Date: Tue, 27 Jan 2026 12:41:20 +0000 (+0200) Subject: drm/i915/psr: Use TRANS_PUSH to trigger frame change event X-Git-Tag: v7.1-rc1~167^2~24^2~194 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=129a4da117075746bd1a0809f684fc1c7eabfd65;p=thirdparty%2Flinux.git drm/i915/psr: Use TRANS_PUSH to trigger frame change event 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 Reviewed-by: Ankit Nautiyal Link: https://patch.msgid.link/20260127124120.1069026-12-jouni.hogander@intel.com --- diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c index 9a4354c6bdda9..4e644711c571f 100644 --- a/drivers/gpu/drm/i915/display/intel_psr.c +++ b/drivers/gpu/drm/i915/display/intel_psr.c @@ -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; } diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c index 8a072f90049f5..9d814cc2d608a 100644 --- a/drivers/gpu/drm/i915/display/intel_vrr.c +++ b/drivers/gpu/drm/i915/display/intel_vrr.c @@ -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; }