diff mbox series

[13/20] drm/i915/vrr: Handle joiner with vrr

Message ID 20250224061717.1095226-14-ankit.k.nautiyal@intel.com (mailing list archive)
State New
Headers show
Series Use VRR timing generator for fixed refresh rate modes | expand

Commit Message

Nautiyal, Ankit K Feb. 24, 2025, 6:17 a.m. UTC
Do not program transcoder registers for VRR for the secondary pipe of
the joiner. Remove check to skip VRR for joiner case.

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
 drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

Comments

Nautiyal, Ankit K Feb. 24, 2025, 1:47 p.m. UTC | #1
On 2/24/2025 11:47 AM, Ankit Nautiyal wrote:
> Do not program transcoder registers for VRR for the secondary pipe of
> the joiner. Remove check to skip VRR for joiner case.

Missed to drop this patch as mentioned in the last version.

Will work on this after the other changes are agreed upon, so this can 
be ignored for now.


Regards,

Ankit

>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
>   1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 45efcb57c77a..30fcd1e66a12 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>   	struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>   	int vmin, vmax;
>   
> -	/*
> -	 * FIXME all joined pipes share the same transcoder.
> -	 * Need to account for that during VRR toggle/push/etc.
> -	 */
> -	if (crtc_state->joiner_pipes)
> -		return;
> -
>   	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>   		return;
>   
> @@ -443,6 +436,9 @@ 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;
>   
> +	if (intel_crtc_is_joiner_secondary(crtc_state))
> +		return;
> +
>   	/*
>   	 * This bit seems to have two meanings depending on the platform:
>   	 * TGL: generate VRR "safe window" for DSB vblank waits
> @@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
>   	if (!crtc_state->vrr.enable)
>   		return;
>   
> +	if (intel_crtc_is_joiner_secondary(crtc_state))
> +		return;
> +
>   	if (dsb)
>   		intel_dsb_nonpost_start(dsb);
>   
> @@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
>   	if (!crtc_state->vrr.enable)
>   		return;
>   
> +	if (intel_crtc_is_joiner_secondary(crtc_state))
> +		return;
> +
>   	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),
> @@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
>   	if (!old_crtc_state->vrr.enable)
>   		return;
>   
> +	if (intel_crtc_is_joiner_secondary(old_crtc_state))
> +		return;
> +
>   	intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>   		       trans_vrr_ctl(old_crtc_state));
>   	intel_de_wait_for_clear(display,
Ville Syrjälä Feb. 26, 2025, 3:14 p.m. UTC | #2
On Mon, Feb 24, 2025 at 07:17:59PM +0530, Nautiyal, Ankit K wrote:
> 
> On 2/24/2025 11:47 AM, Ankit Nautiyal wrote:
> > Do not program transcoder registers for VRR for the secondary pipe of
> > the joiner. Remove check to skip VRR for joiner case.
> 
> Missed to drop this patch as mentioned in the last version.
> 
> Will work on this after the other changes are agreed upon, so this can 
> be ignored for now.

I think before trying to do full joiner+vrr support we should
just allow joiner+fixed_rr (and also not allow update_lrr).
That would avoid the problems with the live VRR reprogramming.

> 
> 
> Regards,
> 
> Ankit
> 
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> >   drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
> >   1 file changed, 12 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> > index 45efcb57c77a..30fcd1e66a12 100644
> > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> > @@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> >   	struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> >   	int vmin, vmax;
> >   
> > -	/*
> > -	 * FIXME all joined pipes share the same transcoder.
> > -	 * Need to account for that during VRR toggle/push/etc.
> > -	 */
> > -	if (crtc_state->joiner_pipes)
> > -		return;
> > -
> >   	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> >   		return;
> >   
> > @@ -443,6 +436,9 @@ 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;
> >   
> > +	if (intel_crtc_is_joiner_secondary(crtc_state))
> > +		return;
> > +
> >   	/*
> >   	 * This bit seems to have two meanings depending on the platform:
> >   	 * TGL: generate VRR "safe window" for DSB vblank waits
> > @@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
> >   	if (!crtc_state->vrr.enable)
> >   		return;
> >   
> > +	if (intel_crtc_is_joiner_secondary(crtc_state))
> > +		return;
> > +
> >   	if (dsb)
> >   		intel_dsb_nonpost_start(dsb);
> >   
> > @@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> >   	if (!crtc_state->vrr.enable)
> >   		return;
> >   
> > +	if (intel_crtc_is_joiner_secondary(crtc_state))
> > +		return;
> > +
> >   	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),
> > @@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> >   	if (!old_crtc_state->vrr.enable)
> >   		return;
> >   
> > +	if (intel_crtc_is_joiner_secondary(old_crtc_state))
> > +		return;
> > +
> >   	intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> >   		       trans_vrr_ctl(old_crtc_state));
> >   	intel_de_wait_for_clear(display,
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 45efcb57c77a..30fcd1e66a12 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -345,13 +345,6 @@  intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
 	struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
 	int vmin, vmax;
 
-	/*
-	 * FIXME all joined pipes share the same transcoder.
-	 * Need to account for that during VRR toggle/push/etc.
-	 */
-	if (crtc_state->joiner_pipes)
-		return;
-
 	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
 		return;
 
@@ -443,6 +436,9 @@  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;
 
+	if (intel_crtc_is_joiner_secondary(crtc_state))
+		return;
+
 	/*
 	 * This bit seems to have two meanings depending on the platform:
 	 * TGL: generate VRR "safe window" for DSB vblank waits
@@ -494,6 +490,9 @@  void intel_vrr_send_push(struct intel_dsb *dsb,
 	if (!crtc_state->vrr.enable)
 		return;
 
+	if (intel_crtc_is_joiner_secondary(crtc_state))
+		return;
+
 	if (dsb)
 		intel_dsb_nonpost_start(dsb);
 
@@ -558,6 +557,9 @@  void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
 	if (!crtc_state->vrr.enable)
 		return;
 
+	if (intel_crtc_is_joiner_secondary(crtc_state))
+		return;
+
 	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),
@@ -586,6 +588,9 @@  void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
 	if (!old_crtc_state->vrr.enable)
 		return;
 
+	if (intel_crtc_is_joiner_secondary(old_crtc_state))
+		return;
+
 	intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
 		       trans_vrr_ctl(old_crtc_state));
 	intel_de_wait_for_clear(display,