On Thu, 2025-11-27 at 19:49 +0200, Imre Deak wrote: > The pipe joiner maximum compressed BPP must be limited based on the pipe > joiner memory size and BW, do that for all DP outputs by adjusting the > max compressed BPP value already in > intel_dp_compute_config_link_bpp_limits() (which is used by all output > types). > > This way the BPP doesn't need to be adjusted in > dsc_compute_compressed_bpp() (called for DP-SST after the above limits > were computed already), so remove the adjustment from there. > > Signed-off-by: Imre Deak <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_dp.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c > b/drivers/gpu/drm/i915/display/intel_dp.c > index 55be648283b19..def1f869febc2 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -2245,19 +2245,12 @@ static int dsc_compute_compressed_bpp(struct intel_dp > *intel_dp, > { > struct intel_display *display = to_intel_display(intel_dp); > const struct intel_connector *connector = > to_intel_connector(conn_state->connector); > - const struct drm_display_mode *adjusted_mode = > &pipe_config->hw.adjusted_mode; > int min_bpp_x16, max_bpp_x16, bpp_step_x16; > - int dsc_joiner_max_bpp; > - int num_joined_pipes = intel_crtc_num_joined_pipes(pipe_config); > int link_bpp_x16; > int bpp_x16; > int ret; > > - dsc_joiner_max_bpp = get_max_compressed_bpp_with_joiner(display, > adjusted_mode->crtc_clock, > - > adjusted_mode->hdisplay, > - > num_joined_pipes); > - max_bpp_x16 = min(fxp_q4_from_int(dsc_joiner_max_bpp), > limits->link.max_bpp_x16); > - > + max_bpp_x16 = limits->link.max_bpp_x16; > bpp_step_x16 = intel_dp_dsc_bpp_step_x16(connector); > > /* Compressed BPP should be less than the Input DSC bpp */ > @@ -2613,6 +2606,7 @@ intel_dp_compute_config_link_bpp_limits(struct intel_dp > *intel_dp, > int dsc_src_min_bpp, dsc_sink_min_bpp, dsc_min_bpp; > int dsc_src_max_bpp, dsc_sink_max_bpp, dsc_max_bpp; > int throughput_max_bpp_x16; > + int joiner_max_bpp; > > dsc_src_min_bpp = intel_dp_dsc_min_src_compressed_bpp(); > dsc_sink_min_bpp = > intel_dp_dsc_sink_min_compressed_bpp(crtc_state); > @@ -2620,11 +2614,17 @@ intel_dp_compute_config_link_bpp_limits(struct > intel_dp *intel_dp, > limits->link.min_bpp_x16 = fxp_q4_from_int(dsc_min_bpp); > > dsc_src_max_bpp = dsc_src_max_compressed_bpp(intel_dp); > + joiner_max_bpp = > + get_max_compressed_bpp_with_joiner(display, > + > adjusted_mode->crtc_clock, > + > adjusted_mode->hdisplay, > + > intel_crtc_num_joined_pipes(crtc_state)); > dsc_sink_max_bpp = > intel_dp_dsc_sink_max_compressed_bpp(connector, > > crtc_state, > > limits->pipe.max_bpp / 3); > dsc_max_bpp = dsc_sink_max_bpp ? > min(dsc_sink_max_bpp, dsc_src_max_bpp) : > dsc_src_max_bpp; > + dsc_max_bpp = min(dsc_max_bpp, joiner_max_bpp); > > max_link_bpp_x16 = min(max_link_bpp_x16, > fxp_q4_from_int(dsc_max_bpp)); >
Reviewed-by: Luca Coelho <[email protected]> -- Cheers, Luca.
