On 1/26/2026 1:29 PM, Jouni Högander wrote:
On Lunarlake and onwards it is possible to generate PSR "frame change"
event using TRANS_PUSH mechanism. As a preparation add new helper to parse
value to be written into TRANS_PUSH register. Setting
LNL_TRANS_PUSH_PSR_PR_EN is done in upcoming patch.


Nitpick : As I have learnt, when the series/patches are merged these will no longer be patches, but become commits.

So we should avoid referring to them as patches. Perhaps we can use 'change' instead of 'patch' here.

In any case the change looks good to me.

Reviewed-by: Ankit Nautiyal <[email protected]>



Signed-off-by: Jouni Högander <[email protected]>
---
  drivers/gpu/drm/i915/display/intel_vrr.c | 22 +++++++++++++++++++---
  1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c 
b/drivers/gpu/drm/i915/display/intel_vrr.c
index db74744ddb31..f26989c74268 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -676,6 +676,22 @@ intel_vrr_dcb_reset(const struct intel_crtc_state 
*old_crtc_state,
        intel_de_write(display, PIPEDMC_DCB_BALANCE_RESET(pipe), 0);
  }
+static u32 trans_vrr_push(const struct intel_crtc_state *crtc_state,
+                         bool send_push)
+{
+       struct intel_display *display = to_intel_display(crtc_state);
+       u32 trans_vrr_push = 0;
+
+       if (intel_vrr_always_use_vrr_tg(display) ||
+           crtc_state->vrr.enable)
+               trans_vrr_push |= TRANS_PUSH_EN;
+
+       if (send_push)
+               trans_vrr_push |= TRANS_PUSH_SEND;
+
+       return trans_vrr_push;
+}
+
  void intel_vrr_send_push(struct intel_dsb *dsb,
                         const struct intel_crtc_state *crtc_state)
  {
@@ -690,8 +706,7 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
intel_de_write_dsb(display, dsb,
                           TRANS_PUSH(display, cpu_transcoder),
-                          TRANS_PUSH_EN | TRANS_PUSH_SEND);
-
+                          trans_vrr_push(crtc_state, true));
        if (dsb)
                intel_dsb_nonpost_end(dsb);
  }
@@ -876,7 +891,8 @@ static void intel_vrr_tg_enable(const struct 
intel_crtc_state *crtc_state,
        enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
        u32 vrr_ctl;
- intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), TRANS_PUSH_EN);
+       intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
+                      trans_vrr_push(crtc_state, false));
vrr_ctl = VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state);

Reply via email to