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) { > /*
