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 10/16] drm/i915/display: Use fixed_rr timings in modeset sequence
Date: Wed, 19 Mar 2025 16:36:31 +0200 [thread overview]
Message-ID: <Z9rWb5WfuRd6FWoP@intel.com> (raw)
In-Reply-To: <20250318073540.2773890-11-ankit.k.nautiyal@intel.com>
On Tue, Mar 18, 2025 at 01:05:34PM +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
> v5:
> -For platforms that do not always have VRRTG on, do write bits other
> than enable bit and also use write the TRANS_VRR_PUSH register. (Ville)
> -Avoid writing trans_ctl_vrr if !vrr_possible().
> v6:
> -Disable VRR just before intel_ddi_disable_transcoder_func(). (Ville)
> -Correct the sequence of configuring PUSH and VRR Enable/Disable. (Ville)
> v7: Reset trans_vrr_ctl to 0 unconditionally in
> intel_vrr_transcoder_disable(). (Ville)
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.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 | 57 ++++++++++++++++-----
> drivers/gpu/drm/i915/display/intel_vrr.h | 2 +
> 4 files changed, 54 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index f38c998935b9..44f4465c27e2 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -78,6 +78,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"
>
> @@ -3249,6 +3250,8 @@ static void intel_ddi_post_disable_hdmi_or_sst(struct intel_atomic_state *state,
> drm_dp_dpcd_poll_act_handled(&intel_dp->aux, 0);
> }
>
> + intel_vrr_transcoder_disable(old_crtc_state);
> +
> intel_ddi_disable_transcoder_func(old_crtc_state);
>
> for_each_pipe_crtc_modeset_disable(display, pipe_crtc, old_crtc_state, i) {
> @@ -3522,6 +3525,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 bd47cf127b4c..d2988b9a6e7b 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1065,6 +1065,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
> drm_dp_remove_payload_part2(&intel_dp->mst.mgr, new_mst_state,
> old_payload, new_payload);
>
> + intel_vrr_transcoder_disable(old_crtc_state);
> +
> intel_ddi_disable_transcoder_func(old_crtc_state);
>
> for_each_pipe_crtc_modeset_disable(display, pipe_crtc, old_crtc_state, i) {
> @@ -1326,6 +1328,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 66afa66c66af..d4912199c3ac 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -460,12 +460,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;
> - }
> -
Seems to me that removing this is what causes the state checker woes
in BAT. I think we can leave this in, as our own computed state should
always have a valid flipline and it's only the GOP that doesn't have one.
> if (crtc_state->cmrr.enable) {
> intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
> upper_32_bits(crtc_state->cmrr.cmrr_m));
> @@ -477,14 +471,7 @@ 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);
>
> if (HAS_AS_SDP(display))
> intel_de_write(display,
> @@ -618,6 +605,48 @@ 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 (!HAS_VRR(display))
> + return;
> +
> + if (!intel_vrr_possible(crtc_state))
> + return;
> +
> + if (!intel_vrr_always_use_vrr_tg(display)) {
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> + trans_vrr_ctl(crtc_state));
> + return;
> + }
> +
> + intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
> + TRANS_PUSH_EN);
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
> +}
> +
> +void intel_vrr_transcoder_disable(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 (!HAS_VRR(display))
> + return;
> +
> + if (!intel_vrr_possible(crtc_state))
> + return;
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), 0);
> +
> + intel_de_wait_for_clear(display, TRANS_VRR_STATUS(display, cpu_transcoder),
> + VRR_STATUS_VRR_EN_LIVE, 1000);
> + intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
> +}
> +
> bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
> {
> return crtc_state->vrr.flipline &&
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
> index 65d2b0eead51..859f1dc8a6d7 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.h
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.h
> @@ -36,5 +36,7 @@ int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
> bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state);
> +void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state);
> +void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
>
> #endif /* __INTEL_VRR_H__ */
> --
> 2.45.2
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-03-19 14:36 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-18 7:35 [PATCH 00/16] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 01/16] drm/i915/display: Add fixed_rr to crtc_state dump Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 02/16] drm/i915/vrr: Avoid reading vrr.enable based on fixed_rr check Ankit Nautiyal
2025-03-21 17:34 ` Ville Syrjälä
2025-03-21 17:40 ` Nautiyal, Ankit K
2025-03-21 17:45 ` Ville Syrjälä
2025-03-18 7:35 ` [PATCH 03/16] drm/i915/hdmi: Use VRR Timing generator for HDMI for fixed_rr Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 04/16] drm/i915/dp_mst: Use VRR Timing generator for DP MST " Ankit Nautiyal
2025-03-21 17:42 ` Ville Syrjälä
2025-03-18 7:35 ` [PATCH 05/16] drm/i915/display: Disable PSR before disabling VRR Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 06/16] drm/i915/display: Move intel_psr_post_plane_update() at the later Ankit Nautiyal
2025-03-21 17:43 ` Ville Syrjälä
2025-03-24 6:37 ` Hogander, Jouni
2025-03-18 7:35 ` [PATCH 07/16] drm/i915/vrr: Refactor condition for computing vmax and LRR Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 08/16] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable} Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 09/16] drm/i915/vrr: Set vrr.enable for VRR TG with fixed_rr Ankit Nautiyal
2025-03-21 17:44 ` Ville Syrjälä
2025-03-18 7:35 ` [PATCH 10/16] drm/i915/display: Use fixed_rr timings in modeset sequence Ankit Nautiyal
2025-03-19 14:36 ` Ville Syrjälä [this message]
2025-03-20 5:39 ` Nautiyal, Ankit K
2025-03-24 12:10 ` Nautiyal, Ankit K
2025-03-20 4:20 ` Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 11/16] drm/i915/vrr: Use fixed timings for platforms that support VRR Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 12/16] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr() Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 13/16] drm/i915/display: Move vrr.guardband/pipeline_full out of !fastset block Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 14/16] drm/i915/vrr: Allow fixed_rr with pipe joiner Ankit Nautiyal
2025-03-18 7:35 ` [PATCH 15/16] drm/i915/vrr: Always use VRR timing generator for PTL+ Ankit Nautiyal
2025-03-21 17:47 ` Ville Syrjälä
2025-03-18 7:35 ` [PATCH 16/16] drm/i915/vrr: Set trans_vrr_ctl in intel_vrr_set_transcoder_timings() Ankit Nautiyal
2025-03-18 7:57 ` ✗ CI.Patch_applied: failure for Use VRR timing generator for fixed refresh rate modes (rev9) Patchwork
2025-03-18 8:16 ` ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev14) Patchwork
2025-03-18 8:37 ` ✗ i915.CI.BAT: failure " Patchwork
2025-03-20 5:37 ` ✓ CI.Patch_applied: success for Use VRR timing generator for fixed refresh rate modes (rev10) Patchwork
2025-03-20 5:37 ` ✓ CI.checkpatch: " Patchwork
2025-03-20 5:38 ` ✓ CI.KUnit: " Patchwork
2025-03-20 5:55 ` ✓ CI.Build: " Patchwork
2025-03-20 5:57 ` ✓ CI.Hooks: " Patchwork
2025-03-20 5:58 ` ✗ CI.checksparse: warning " Patchwork
2025-03-20 6:18 ` ✓ Xe.CI.BAT: success " Patchwork
2025-03-20 7:17 ` ✓ Xe.CI.Full: " Patchwork
2025-03-21 6:05 ` ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev16) Patchwork
2025-03-21 6:26 ` ✓ i915.CI.BAT: success " Patchwork
2025-03-21 8:17 ` ✗ i915.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=Z9rWb5WfuRd6FWoP@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.