> -----Original Message-----
> From: Jani Nikula <[email protected]>
> Sent: Monday, November 17, 2025 8:40 PM
> To: Manna, Animesh <[email protected]>; intel-
> [email protected]; [email protected]
> Cc: Manna, Animesh <[email protected]>
> Subject: Re: [RFC 4/8] drm/i915/cmtg: program vrr registers of cmtg
> 
> On Mon, 17 Nov 2025, Animesh Manna <[email protected]> wrote:
> > Enable vrr if it is enabled on cmtg registers.
> 
> This violates the basic principle that hardware and software states are kept
> separate. When we write the software state to the hardware, making parts
> of it conditional on the existing hardware state results in non-deterministic
> behaviour.

Thanks for review.
Taken care by using s/w state in next version, currently debug ongoing with 
flipQ, will float after that.

Regards,
Animesh
> 
> BR,
> Jani.
> 
> >
> > Signed-off-by: Animesh Manna <[email protected]>
> > ---
> >  drivers/gpu/drm/i915/display/intel_cmtg.c     | 19 +++++++++++++++++++
> >  .../gpu/drm/i915/display/intel_cmtg_regs.h    |  5 +++++
> >  2 files changed, 24 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_cmtg.c
> > b/drivers/gpu/drm/i915/display/intel_cmtg.c
> > index 5e9aaa50b38f..3dfb691913cb 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_power.h"
> >  #include "intel_display_regs.h"
> >  #include "intel_display_types.h"
> > +#include "intel_vrr_regs.h"
> >
> >  /**
> >   * DOC: Common Primary Timing Generator (CMTG) @@ -213,6 +214,7
> @@
> > static void intel_cmtg_set_timings(const struct intel_crtc_state
> > *crtc_state)  {
> >     struct intel_display *display = to_intel_display(crtc_state);
> >     enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> > +   u32 vctl;
> >
> >     intel_de_write(display, TRANS_HTOTAL_CMTG(cpu_transcoder),
> >                    intel_de_read(display, TRANS_HTOTAL(display,
> > cpu_transcoder))); @@ -226,6 +228,23 @@ static void
> intel_cmtg_set_timings(const struct intel_crtc_state *crtc_state)
> >                    intel_de_read(display, TRANS_VBLANK(display,
> cpu_transcoder)));
> >     intel_de_write(display, TRANS_VSYNC_CMTG(cpu_transcoder),
> >                    intel_de_read(display, TRANS_VSYNC(display,
> > cpu_transcoder)));
> > +
> > +   vctl = intel_de_read(display, TRANS_VRR_CTL(display,
> cpu_transcoder));
> > +   if (vctl & VRR_CTL_VRR_ENABLE) {
> > +           u32 vmax, flipline, vmin;
> > +
> > +           vmax = intel_de_read(display, TRANS_VRR_VMAX(display,
> cpu_transcoder));
> > +           flipline = intel_de_read(display,
> TRANS_VRR_FLIPLINE(display, cpu_transcoder));
> > +           if (vmax != flipline)
> > +                   return;
> > +
> > +           vmin = intel_de_read(display, TRANS_VRR_VMIN(display,
> > +cpu_transcoder));
> > +
> > +           intel_de_write(display,
> TRANS_VRR_VMAX_CMTG(cpu_transcoder), vmax);
> > +           intel_de_write(display,
> TRANS_VRR_VMIN_CMTG(cpu_transcoder), vmin);
> > +           intel_de_write(display,
> TRANS_VRR_FLIPLINE_CMTG(cpu_transcoder), flipline);
> > +           intel_de_write(display,
> TRANS_VRR_CTL_CMTG(cpu_transcoder), vctl);
> > +   }
> >  }
> >
> >  void intel_cmtg_enable(const struct intel_crtc_state *crtc_state)
> > diff --git a/drivers/gpu/drm/i915/display/intel_cmtg_regs.h
> > b/drivers/gpu/drm/i915/display/intel_cmtg_regs.h
> > index 47403bbcac7d..37dee7165852 100644
> > --- a/drivers/gpu/drm/i915/display/intel_cmtg_regs.h
> > +++ b/drivers/gpu/drm/i915/display/intel_cmtg_regs.h
> > @@ -33,4 +33,9 @@ enum cmtg {
> >  #define TRANS_VBLANK_CMTG(id)              _MMIO(0x6F010 + (id) *
> 0x100)
> >  #define TRANS_VSYNC_CMTG(id)               _MMIO(0x6F014 + (id) *
> 0x100)
> >
> > +#define TRANS_VRR_CTL_CMTG(id)             _MMIO(0x6F420 + (id) *
> 0x100)
> > +#define TRANS_VRR_VMAX_CMTG(id)            _MMIO(0x6F424 +
> (id) * 0x100)
> > +#define TRANS_VRR_VMIN_CMTG(id)            _MMIO(0x6F434 +
> (id) * 0x100)
> > +#define TRANS_VRR_FLIPLINE_CMTG(id)        _MMIO(0x6F438 + (id) *
> 0x100)
> > +
> >  #endif /* __INTEL_CMTG_REGS_H__ */
> 
> --
> Jani Nikula, Intel

Reply via email to