Re: [PATCH] drm/i915/display: Limit max joined dotclock on pipes available
"Nautiyal, Ankit K" <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-xe,org.freedesktop.lists.intel-gfx,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On 8/6/2026 9:15 PM, Nautiyal, Ankit K wrote:
>
> On 8/6/2026 8:07 PM, Jani Nikula wrote:
>> Multiplying the max dotclock based on joiner availability on the
>> platform alone does not take into account the actual number of pipes
>> (possibly with some fused) available.
>>
>> Limit the max joined dotclock based on the actual number of pipes
>> available.
>>
>> This is still too optimistic due to other constraints on actual pipes,
>> but it reduces some of the false hopes at mode enumeration.
>>
>> Fixes: f4f8f0eaaafc ("drm/i915/display: Consider ultrajoiner for
>> computing maxdotclock")
>> Cc: Ankit Nautiyal <[email protected]>
>> Cc: <[email protected]> # v6.13+
>> Signed-off-by: Jani Nikula <[email protected]>
>> ---
>> drivers/gpu/drm/i915/display/intel_display.c | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
>> b/drivers/gpu/drm/i915/display/intel_display.c
>> index 829d7a411dcc..44c5d1dde255 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -8113,9 +8113,10 @@ static int max_dotclock(struct intel_display
>> *display)
>> {
>> int max_dotclock = display->cdclk.max_dotclk_freq;
>> - if (HAS_ULTRAJOINER(display))
>> + if (HAS_ULTRAJOINER(display) && INTEL_NUM_PIPES(display) >= 4)
>> max_dotclock *= 4;
>> - else if (HAS_UNCOMPRESSED_JOINER(display) ||
>> HAS_BIGJOINER(display))
>> + else if ((HAS_UNCOMPRESSED_JOINER(display) ||
>> HAS_BIGJOINER(display)) &&
>> + INTEL_NUM_PIPES(display) >= 2)
>
> If fused pipes are AC or BD this will still give us 2. Perhaps should
> have a check for atleast 2 consecutive pipes from
> DISPLAY_RUNTIME_INFO(display)->pipe_mask
^I meant : if fused pipes are B or D, resulting in A,C and B,D
respectively, as available pipes...
>
> On the other hand we can have the consecutive pipe check in
> mode_valid() path after for_each_joiner_candidate() is called, which
> will check whether there exists any consecutive pair that can support
> joiner.
>
> As discussed offline, in any case, we need to fix the compute_config()
> path for SST and MST where we are using the
> for_each_joiner_candidate() to check for a given primary, there exist
> sufficient consecutive pipes to support the joiner candidate.
>
> Regards,
>
> Ankit
>
>
>
> Regards,
>
> Ankit
>
>> max_dotclock *= 2;
>> return max_dotclock;