Add tracking for the DSI DSC pipes-per-line and slices-per-stream value in the slice config state and compute the current slices-per-line value using this slice config state. The slices-per-line value used atm will be removed by a follow-up change after converting all the places using it to use the detailed slice config instead.
Signed-off-by: Imre Deak <[email protected]> --- drivers/gpu/drm/i915/display/intel_bios.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index e69fac4f5bdfe..479c5f0158800 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -41,6 +41,7 @@ #include "intel_display_utils.h" #include "intel_gmbus.h" #include "intel_rom.h" +#include "intel_vdsc.h" #define _INTEL_BIOS_PRIVATE #include "intel_vbt_defs.h" @@ -3519,12 +3520,14 @@ static void fill_dsc(struct intel_crtc_state *crtc_state, * * FIXME: split only when necessary */ + crtc_state->dsc.slice_config.pipes_per_line = 1; + if (dsc->slices_per_line & BIT(2)) { crtc_state->dsc.slice_config.streams_per_pipe = 2; - crtc_state->dsc.slice_count = 4; + crtc_state->dsc.slice_config.slices_per_stream = 2; } else if (dsc->slices_per_line & BIT(1)) { crtc_state->dsc.slice_config.streams_per_pipe = 2; - crtc_state->dsc.slice_count = 2; + crtc_state->dsc.slice_config.slices_per_stream = 1; } else { /* FIXME */ if (!(dsc->slices_per_line & BIT(0))) @@ -3532,9 +3535,11 @@ static void fill_dsc(struct intel_crtc_state *crtc_state, "VBT: Unsupported DSC slice count for DSI\n"); crtc_state->dsc.slice_config.streams_per_pipe = 1; - crtc_state->dsc.slice_count = 1; + crtc_state->dsc.slice_config.slices_per_stream = 1; } + crtc_state->dsc.slice_count = intel_dsc_line_slice_count(&crtc_state->dsc.slice_config); + if (crtc_state->hw.adjusted_mode.crtc_hdisplay % crtc_state->dsc.slice_count != 0) drm_dbg_kms(display->drm, -- 2.49.1
