> -----Original Message-----
> From: Manna, Animesh <[email protected]>
> Sent: Thursday, June 4, 2026 1:24 AM
> To: [email protected]; [email protected]
> Cc: Shankar, Uma <[email protected]>; Dibin Moolakadan Subrahmanian
> <[email protected]>; [email protected];
> Nikula, Jani <[email protected]>; Manna, Animesh
> <[email protected]>
> Subject: [PATCH v8 10/20] drm/i915/cmtg: Program VRR control register for
> CMTG transcoder
> 
> Add intel_cmtg_set_vrr_ctl() to program TRANS_VRR_CTL for the CMTG
> transcoder. Purposefully avoid using the existing VRR enable path, as many of 
> its
> operations are not needed for CMTG.
> 
> v2: Use sw state instead of reading from hardware. [Jani]
> v3: Program cmtg vrr control register along with vrr transcoder registers. 
> [R-b
> from Uma]
> v4: Split out from vrr timing registers programming.

Looks Good to me.
Reviewed-by: Uma Shankar <[email protected]>

> Bspec: 68989
> Signed-off-by: Animesh Manna <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_cmtg.c | 20 ++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_cmtg.h |  1 +
> drivers/gpu/drm/i915/display/intel_vrr.c  |  2 ++
>  3 files changed, 23 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cmtg.c
> b/drivers/gpu/drm/i915/display/intel_cmtg.c
> index 4c8187ddef1f..12f6ef4de0e9 100644
> --- a/drivers/gpu/drm/i915/display/intel_cmtg.c
> +++ b/drivers/gpu/drm/i915/display/intel_cmtg.c
> @@ -17,6 +17,7 @@
>  #include "intel_display_regs.h"
>  #include "intel_display_types.h"
>  #include "intel_vrr.h"
> +#include "intel_vrr_regs.h"
> 
>  /**
>   * DOC: Common Primary Timing Generator (CMTG) @@ -255,3 +256,22 @@
> void intel_cmtg_set_vrr_timings(const struct intel_crtc_state *crtc_state)
> 
>       intel_vrr_set_fixed_rr_timings(crtc_state, cmtg_transcoder);  }
> +
> +void intel_cmtg_set_vrr_ctl(const struct intel_crtc_state *crtc_state)
> +{
> +     struct intel_display *display = to_intel_display(crtc_state);
> +     enum transcoder cmtg_transcoder = to_cmtg_transcoder(crtc_state-
> >cpu_transcoder);
> +     u32 vrr_ctl;
> +
> +     if (!intel_cmtg_is_allowed(crtc_state))
> +             return;
> +
> +     vrr_ctl = VRR_CTL_VRR_ENABLE | VRR_CTL_FLIP_LINE_EN |
> +               XELPD_VRR_CTL_VRR_GUARDBAND(crtc_state-
> >vrr.guardband);
> +
> +     /* TODO: The code below may need to be revisited once CMRR is
> enabled */
> +     if (crtc_state->cmrr.enable)
> +             vrr_ctl |= VRR_CTL_CMRR_ENABLE;
> +
> +     intel_de_write(display, TRANS_VRR_CTL(display, cmtg_transcoder),
> +vrr_ctl); }
> diff --git a/drivers/gpu/drm/i915/display/intel_cmtg.h
> b/drivers/gpu/drm/i915/display/intel_cmtg.h
> index 899a2744514c..c92e3a62ff0d 100644
> --- a/drivers/gpu/drm/i915/display/intel_cmtg.h
> +++ b/drivers/gpu/drm/i915/display/intel_cmtg.h
> @@ -12,6 +12,7 @@ struct intel_display;
>  struct intel_crtc_state;
> 
>  void intel_cmtg_set_vrr_timings(const struct intel_crtc_state *crtc_state);
> +void intel_cmtg_set_vrr_ctl(const struct intel_crtc_state *crtc_state);
>  void intel_cmtg_set_timings(const struct intel_crtc_state *crtc_state, bool 
> lrr);
> void intel_cmtg_set_clk_select(const struct intel_crtc_state *crtc_state);  
> void
> intel_cmtg_sanitize(struct intel_display *display); diff --git
> a/drivers/gpu/drm/i915/display/intel_vrr.c 
> b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 2295f6545981..d4a2645cd380 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -932,6 +932,8 @@ static void intel_vrr_tg_enable(const struct
> intel_crtc_state *crtc_state,
>               vrr_ctl |= VRR_CTL_CMRR_ENABLE;
> 
>       intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> vrr_ctl);
> +
> +     intel_cmtg_set_vrr_ctl(crtc_state);
>  }
> 
>  static void intel_vrr_tg_disable(const struct intel_crtc_state 
> *old_crtc_state)
> --
> 2.29.0

Reply via email to