On Thu, 2025-11-27 at 19:49 +0200, Imre Deak wrote:
> There is no reason to accept an invalid minimum/maximum DSC source
> input
> BPP value (i.e a minimum DSC input BPP value above the maximum pipe
> BPP
> or a maximum DSC input BPP value below the minimum pipe BPP value),
> fail
> the state computation in these cases.
> 
> Signed-off-by: Imre Deak <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c | 28 ++++++++++++++++++-----
> --
>  1 file changed, 21 insertions(+), 7 deletions(-)
> 

Reviewed-by: Vinod Govindapillai <[email protected]>

> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index db7e49c17ca8d..1ef64b90492ea 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -2669,16 +2669,30 @@
> intel_dp_compute_config_link_bpp_limits(struct intel_dp *intel_dp,
>       return true;
>  }
>  
> -static void
> -intel_dp_dsc_compute_pipe_bpp_limits(struct intel_dp *intel_dp,
> +static bool
> +intel_dp_dsc_compute_pipe_bpp_limits(struct intel_connector
> *connector,
>                                    struct link_config_limits
> *limits)
>  {
> -     struct intel_display *display = to_intel_display(intel_dp);
> +     struct intel_display *display = to_intel_display(connector);
> +     const struct link_config_limits orig_limits = *limits;
>       int dsc_min_bpc = intel_dp_dsc_min_src_input_bpc();
>       int dsc_max_bpc = intel_dp_dsc_max_src_input_bpc(display);
>  
> -     limits->pipe.max_bpp = clamp(limits->pipe.max_bpp,
> dsc_min_bpc * 3, dsc_max_bpc * 3);
> -     limits->pipe.min_bpp = clamp(limits->pipe.min_bpp,
> dsc_min_bpc * 3, dsc_max_bpc * 3);
> +     limits->pipe.min_bpp = max(limits->pipe.min_bpp, dsc_min_bpc
> * 3);
> +     limits->pipe.max_bpp = min(limits->pipe.max_bpp, dsc_max_bpc
> * 3);
> +
> +     if (limits->pipe.min_bpp <= 0 ||
> +         limits->pipe.min_bpp > limits->pipe.max_bpp) {
> +             drm_dbg_kms(display->drm,
> +                         "[CONNECTOR:%d:%s] Invalid DSC src/sink
> input BPP (src:%d-%d pipe:%d-%d)\n",
> +                         connector->base.base.id, connector-
> >base.name,
> +                         dsc_min_bpc * 3, dsc_max_bpc * 3,
> +                         orig_limits.pipe.min_bpp,
> orig_limits.pipe.max_bpp);
> +
> +             return false;
> +     }
> +
> +     return true;
>  }
>  
>  bool
> @@ -2718,8 +2732,8 @@ intel_dp_compute_config_limits(struct intel_dp
> *intel_dp,
>                                                       respect_down
> stream_limits);
>       }
>  
> -     if (dsc)
> -             intel_dp_dsc_compute_pipe_bpp_limits(intel_dp,
> limits);
> +     if (dsc && !intel_dp_dsc_compute_pipe_bpp_limits(connector,
> limits))
> +             return false;
>  
>       if (is_mst || intel_dp->use_max_params) {
>               /*

Reply via email to