On Thu, 2025-11-27 at 19:50 +0200, Imre Deak wrote:
> Add a way to track the detailed DSC pipes-per-line, streams-per-pipe,
> slices-per-stream configuration instead of the current streams-per-
> pipe
> and slices-per-line value. This way describes the slice configuration
> in
> a clearer way, for instance providing a
> 
> 2 pipes-per-line x 2 streams-per-pipe x 2 slices-per-stream = 8
> slices-per-line
> 
> view, instead of the current, coarser
> 
> 2 streams-per-pipe, 8 slices-per-line
> 
> view, the former better reflecting that each DSC stream engine has 2
> slices. This also let's optimizing the configuration in a
> simpler/clearer way, for instance using 1 stream x 2 slices, or 1
> stream
> x 4 slices instead of the current 2 stream x 1 slice, or 2 streams x
> 2
> slices configuration (so that 1 DSC stream engine can be powered off
> in
> each pipe).
> 
> Follow-up changes will convert the current slices-per-line
> computation
> logic to compute instead the above detailed slice configuration.
> 
> Signed-off-by: Imre Deak <[email protected]>

Reviewed-by: Jouni Högander <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_display_types.h | 5 +++++
>  drivers/gpu/drm/i915/display/intel_vdsc.c          | 5 +++++
>  drivers/gpu/drm/i915/display/intel_vdsc.h          | 2 ++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 38702a9e0f508..a3de93cdcbde0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1306,6 +1306,11 @@ struct intel_crtc_state {
>               bool compression_enabled_on_link;
>               bool compression_enable;
>               int num_streams;
> +             struct intel_dsc_slice_config {
> +                     int pipes_per_line;
> +                     int streams_per_pipe;
> +                     int slices_per_stream;
> +             } slice_config;
>               /* Compressed Bpp in U6.4 format (first 4 bits for
> fractional part) */
>               u16 compressed_bpp_x16;
>               u8 slice_count;
> diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c
> b/drivers/gpu/drm/i915/display/intel_vdsc.c
> index 0e727fc5e80c1..8aa480e3d1c9d 100644
> --- a/drivers/gpu/drm/i915/display/intel_vdsc.c
> +++ b/drivers/gpu/drm/i915/display/intel_vdsc.c
> @@ -35,6 +35,11 @@ bool intel_dsc_source_support(const struct
> intel_crtc_state *crtc_state)
>       return true;
>  }
>  
> +int intel_dsc_line_slice_count(const struct intel_dsc_slice_config
> *config)
> +{
> +     return config->pipes_per_line * config->streams_per_pipe *
> config->slices_per_stream;
> +}
> +
>  static bool is_pipe_dsc(struct intel_crtc *crtc, enum transcoder
> cpu_transcoder)
>  {
>       struct intel_display *display = to_intel_display(crtc);
> diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.h
> b/drivers/gpu/drm/i915/display/intel_vdsc.h
> index 99f64ac54b273..e61116d5297c8 100644
> --- a/drivers/gpu/drm/i915/display/intel_vdsc.h
> +++ b/drivers/gpu/drm/i915/display/intel_vdsc.h
> @@ -13,9 +13,11 @@ struct drm_printer;
>  enum transcoder;
>  struct intel_crtc;
>  struct intel_crtc_state;
> +struct intel_dsc_slice_config;
>  struct intel_encoder;
>  
>  bool intel_dsc_source_support(const struct intel_crtc_state
> *crtc_state);
> +int intel_dsc_line_slice_count(const struct intel_dsc_slice_config
> *config);
>  void intel_uncompressed_joiner_enable(const struct intel_crtc_state
> *crtc_state);
>  void intel_dsc_enable(const struct intel_crtc_state *crtc_state);
>  void intel_dsc_disable(const struct intel_crtc_state *crtc_state);

Reply via email to