From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
jani.nikula@linux.intel.com,
mitulkumar.ajitkumar.golani@intel.com
Subject: Re: [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
Date: Wed, 26 Feb 2025 18:04:26 +0200 [thread overview]
Message-ID: <Z787ipgTzS970VNH@intel.com> (raw)
In-Reply-To: <Z78t-r9fZwr15eMo@intel.com>
On Wed, Feb 26, 2025 at 05:06:34PM +0200, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:14AM +0530, Ankit Nautiyal wrote:
> > During modeset enable sequence, program the fixed timings, and turn on the
> > VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
> >
> > For this intel_vrr_set_transcoder now always programs fixed timings.
> > Later if vrr timings are required, vrr_enable() will switch
> > to the real VRR timings.
> >
> > For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
> > and reset in the transcoder enable/disable path.
> >
> > v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
> > v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
> > v4: Have separate functions to enable/disable VRR CTL
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
> > drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
> > drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
> > drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
> > 4 files changed, 38 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index 5082f38b0a02..8863d1526aea 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -77,6 +77,7 @@
> > #include "intel_tc.h"
> > #include "intel_vdsc.h"
> > #include "intel_vdsc_regs.h"
> > +#include "intel_vrr.h"
> > #include "skl_scaler.h"
> > #include "skl_universal_plane.h"
> >
> > @@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
> > const struct intel_crtc_state *old_crtc_state,
> > const struct drm_connector_state *old_conn_state)
> > {
> > + intel_vrr_transcoder_disable(old_crtc_state);
> > +
> > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
> > intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
> > old_conn_state);
> > @@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
> >
> > intel_ddi_enable_transcoder_func(encoder, crtc_state);
> >
> > + intel_vrr_transcoder_enable(crtc_state);
> > +
> > /* Enable/Disable DP2.0 SDP split config before transcoder */
> > intel_audio_sdp_split_update(crtc_state);
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > index 2c4a9ac6f61e..5ec353eceab4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > @@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
> > intel_crtc_vblank_off(old_pipe_crtc_state);
> > }
> >
> > + intel_vrr_transcoder_disable(old_crtc_state);
> > +
> > intel_disable_transcoder(old_crtc_state);
> >
> > drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
> > @@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
> >
> > intel_ddi_enable_transcoder_func(encoder, pipe_config);
> >
> > + intel_vrr_transcoder_enable(pipe_config);
> > +
> > intel_ddi_clear_act_sent(encoder, pipe_config);
> >
> > intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
> > diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> > index e77f5b483b09..551dcc16f0d4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> > @@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_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;
> > + bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
> >
> > if (intel_crtc_is_joiner_secondary(crtc_state))
> > return;
> > @@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
> > 0, PIPE_VBLANK_WITH_DELAY);
> >
> > - if (!intel_vrr_possible(crtc_state)) {
> > - intel_de_write(display,
> > - TRANS_VRR_CTL(display, cpu_transcoder), 0);
> > - return;
> > - }
> > -
> > if (crtc_state->cmrr.enable) {
> > intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
> > upper_32_bits(crtc_state->cmrr.cmrr_m));
> > @@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > lower_32_bits(crtc_state->cmrr.cmrr_n));
> > }
> >
> > - intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> > - crtc_state->vrr.vmin - 1);
> > - intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> > - crtc_state->vrr.vmax - 1);
> > - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> > - trans_vrr_ctl(crtc_state));
> > - intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
> > - crtc_state->vrr.flipline - 1);
> > + intel_vrr_set_fixed_rr_timings(crtc_state);
> > + intel_vrr_update_guardband(crtc_state, needs_modeset);
> >
> > if (HAS_AS_SDP(display))
> > intel_de_write(display,
> > @@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> > intel_vrr_set_fixed_rr_timings(old_crtc_state);
> > }
> >
> > +void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state)
> > +{
> > + struct intel_display *display = to_intel_display(crtc_state);
> > + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> > +
> > + if (!intel_vrr_always_use_vrr_tg(display))
> > + return;
> > +
> > + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> > + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
>
> Hmm. Maybe we should actually program this even for the
> !intel_vrr_always_use_vrr_tg() case, but just leave the enable
> bit unset. That way we shouldn't need the intel_vrr_update_guardband()
> stuff in vrr_set_transcoder_timings().
>
> We'd still need something for the _lrr() case, but I think that
> could simply call intel_vrr_transcoder_enable() as well.
Oh and for the intel_vrr_always_use_vrr_tg()==true case we
probably want to also enable push.
When I was testing this stuff at least tgl and adl seemed to
require require push to be enabled whenever we use the VRR TG.
If we always enable it then we can easily test this on those
platforms witout having to touch any code outside of
intel_vrr_always_use_vrr_tg().
And even if some more modern hardware doesn't strictly require
push to be enabled, I don't think there should be any harm from
enabling it anyway.
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-02-26 16:04 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
2025-02-24 6:16 ` [PATCH 01/20] drm/i915/vrr: Remove unwanted comment Ankit Nautiyal
2025-02-26 13:06 ` Ville Syrjälä
2025-02-24 6:16 ` [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax Ankit Nautiyal
2025-02-26 12:59 ` Ville Syrjälä
2025-02-27 10:13 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings Ankit Nautiyal
2025-02-26 13:07 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 04/20] drm/i915/vrr: Disable CMRR Ankit Nautiyal
2025-02-26 13:08 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing Ankit Nautiyal
2025-02-26 13:10 ` Ville Syrjälä
2025-02-27 10:16 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin Ankit Nautiyal
2025-02-26 13:11 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings Ankit Nautiyal
2025-02-26 13:13 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode Ankit Nautiyal
2025-02-26 13:27 ` Ville Syrjälä
2025-02-27 10:19 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI Ankit Nautiyal
2025-02-26 13:30 ` Ville Syrjälä
2025-02-27 10:31 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST Ankit Nautiyal
2025-02-26 13:30 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR Ankit Nautiyal
2025-02-26 13:45 ` Ville Syrjälä
2025-02-27 10:33 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2 Ankit Nautiyal
2025-02-26 13:55 ` Ville Syrjälä
2025-02-27 10:36 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr Ankit Nautiyal
2025-02-24 13:47 ` Nautiyal, Ankit K
2025-02-26 15:14 ` Ville Syrjälä
2025-02-27 10:37 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR Ankit Nautiyal
2025-02-26 14:01 ` Ville Syrjälä
2025-02-27 10:39 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable} Ankit Nautiyal
2025-02-26 14:01 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr() Ankit Nautiyal
2025-02-26 15:00 ` Ville Syrjälä
2025-02-27 10:28 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence Ankit Nautiyal
2025-02-26 15:06 ` Ville Syrjälä
2025-02-26 16:04 ` Ville Syrjälä [this message]
2025-02-27 10:44 ` Nautiyal, Ankit K
2025-02-27 10:42 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR Ankit Nautiyal
2025-02-26 15:11 ` Ville Syrjälä
2025-02-27 11:01 ` Nautiyal, Ankit K
2025-02-27 21:05 ` Ville Syrjälä
2025-02-28 12:31 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 19/20] drm/i915/vrr: Always use VRR timing generator for MTL+ Ankit Nautiyal
2025-02-24 6:17 ` [PATCH 20/20] drm/i915/display: Add fixed_rr to crtc_state dump Ankit Nautiyal
2025-02-24 18:16 ` ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev10) Patchwork
2025-02-24 18:39 ` ✗ i915.CI.BAT: 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=Z787ipgTzS970VNH@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=ankit.k.nautiyal@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=mitulkumar.ajitkumar.golani@intel.com \
/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;
as well as URLs for NNTP newsgroup(s).