From: Jani Nikula <jani.nikula@linux.intel.com>
To: Animesh Manna <animesh.manna@intel.com>,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: Animesh Manna <animesh.manna@intel.com>
Subject: Re: [RFC 4/8] drm/i915/cmtg: program vrr registers of cmtg
Date: Mon, 17 Nov 2025 17:09:38 +0200 [thread overview]
Message-ID: <ef595fd92b80e5d48deec222923d2c0e129ca472@intel.com> (raw)
In-Reply-To: <20251117114216.1522615-5-animesh.manna@intel.com>
On Mon, 17 Nov 2025, Animesh Manna <animesh.manna@intel.com> 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.
BR,
Jani.
>
> Signed-off-by: Animesh Manna <animesh.manna@intel.com>
> ---
> 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
next prev parent reply other threads:[~2025-11-17 15:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-17 11:42 [RFC 0/8] CMTG enablement Animesh Manna
2025-11-17 11:42 ` [RFC 1/8] drm/i915/cmtg: enable cmtg LNL onwards Animesh Manna
2025-11-17 15:15 ` Jani Nikula
2026-01-08 8:17 ` Manna, Animesh
2025-11-17 11:42 ` [RFC 2/8] drm/i915/cmtg: cmtg set clock select Animesh Manna
2025-11-17 15:17 ` Jani Nikula
2025-11-17 11:42 ` [RFC 3/8] drm/i915/cmtg: set timings for cmtg Animesh Manna
2025-11-17 15:13 ` Jani Nikula
2026-01-08 8:15 ` Manna, Animesh
2025-11-17 11:42 ` [RFC 4/8] drm/i915/cmtg: program vrr registers of cmtg Animesh Manna
2025-11-17 15:09 ` Jani Nikula [this message]
2026-01-08 8:14 ` Manna, Animesh
2025-11-17 11:42 ` [RFC 5/8] drm/i915/cmtg: program set context latency " Animesh Manna
2025-11-17 11:42 ` [RFC 6/8] drm/i915/cmtg: set transcoder mn for cmtg Animesh Manna
2025-11-17 11:42 ` [RFC 7/8] drm/i915/cmtg: program sync to port " Animesh Manna
2025-11-17 11:42 ` [RFC 8/8] drm/i915/cmtg: enable cmtg ctl Animesh Manna
2025-11-17 12:15 ` ✗ CI.checkpatch: warning for CMTG enablement Patchwork
2025-11-17 12:16 ` ✓ CI.KUnit: success " Patchwork
2025-11-17 12:31 ` ✗ CI.checksparse: warning " Patchwork
2025-11-17 12:54 ` ✓ Xe.CI.BAT: success " Patchwork
2025-11-17 14:54 ` ✗ Xe.CI.Full: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ef595fd92b80e5d48deec222923d2c0e129ca472@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=animesh.manna@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox