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:19 PM, Nautiyal, Ankit K wrote:
>
> 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...
Correction (typo'd twice (facepalm)): I meant if the available pipes are
non-consecutive, like {A,C} or {B,D} the count is still 2, but
bigjoiner needs 2 consecutive pipes.
So we should check pipe_mask for a consecutive pair.
And I should probably wrap up for the day...
>
>
>>
>> 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;