[PATCH 11/35] drm/i915/vrr: Avoid prepare vrr timings for cmrr

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Thu Jan 30 10:54:36 UTC 2025


On 1/25/2025 2:39 AM, Ville Syrjälä wrote:
> On Fri, Jan 24, 2025 at 08:29:56PM +0530, Ankit Nautiyal wrote:
>> CMRR has a separate logic for computing vrr timings and so it
>> overwrites the timings prepared for vrr.
>>
>> Avoid prepare vrr timings for cmrr. This will help to separate the
>> helpers for timings for vrr, cmrr and the forthcoming
>> fixed_rr.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
>> ---
>>   drivers/gpu/drm/i915/display/intel_vrr.c | 9 +++++----
>>   1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 7e69e30b2076..90fd6fe58fce 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -257,8 +257,9 @@ void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
>>   }
>>   
>>   static
>> -void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
>> +void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state, int vmin, int vmax)
>>   {
>> +	intel_vrr_prepare_vrr_timings(crtc_state, vmin, vmax);
>>   	crtc_state->vrr.enable = true;
>>   	crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
>>   }
>> @@ -328,12 +329,12 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>   	if (vmin >= vmax)
>>   		return;
>>   
>> -	intel_vrr_prepare_vrr_timings(crtc_state, vmin, vmax);
>> -
>>   	if (crtc_state->uapi.vrr_enabled)
>> -		intel_vrr_compute_vrr_timings(crtc_state);
>> +		intel_vrr_compute_vrr_timings(crtc_state, vmin, vmax);
>>   	else if (is_cmrr_frac_required(crtc_state) && is_edp)
>>   		intel_vrr_compute_cmrr_timings(crtc_state);
>> +	else
>> +		intel_vrr_prepare_vrr_timings(crtc_state, vmin, vmax);
> I don't understand why the caller is calculating the vrr vmin/vmax
> and then passing them in to everyone. Looks to me like each of those
> guys should just calculate the vmin/vmax on their own.

We are computing vmin and vmax early to avoid computing variable timings 
for non vrr panels, based on the condition vmin < vmax.

But I get your point. Will simplify this as mentioned below.

Thanks & Regards,

Ankit

>
> The
>   crtc_state->vrr.flipline = crtc_state->vrr.vmin;
>   crtc_state->vrr.vmin -= intel_vrr_min_flipline_offset(display);
> part could stay in the caller since it's always needed regardless
> of what kind of timings we use.
>
>
>
>
>>   
>>   	if (HAS_AS_SDP(display)) {
>>   		crtc_state->vrr.vsync_start =
>> -- 
>> 2.45.2


More information about the Intel-xe mailing list