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 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
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;