[Intel-gfx] [PATCH 6/8] drm/i915/dp: Iterate over output bpp with fractional step size
Kandpal, Suraj
suraj.kandpal at intel.com
Mon Sep 11 09:32:34 UTC 2023
> Subject: [PATCH 6/8] drm/i915/dp: Iterate over output bpp with fractional step
> size
>
> From: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
>
> This patch adds support to iterate over compressed output bpp as per the
> fractional step, supported by DP sink.
>
> v2:
> -Avoid ending up with compressed bpp, same as pipe bpp. (Stan)
>
LGTM.
Reviewed-by: Suraj Kandpal <suraj.kandpal at intel.com>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 37 +++++++++++++++----------
> 1 file changed, 23 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index d13fa2749eaf..90c92f3dc62a 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1715,15 +1715,15 @@ static bool intel_dp_dsc_supports_format(struct
> intel_dp *intel_dp,
> return drm_dp_dsc_sink_supports_format(intel_dp->dsc_dpcd,
> sink_dsc_format); }
>
> -static bool is_bw_sufficient_for_dsc_config(u16 compressed_bpp, u32
> link_clock,
> +static bool is_bw_sufficient_for_dsc_config(u16 compressed_bppx16, u32
> +link_clock,
> u32 lane_count, u32 mode_clock,
> enum intel_output_format
> output_format,
> int timeslots)
> {
> u32 available_bw, required_bw;
>
> - available_bw = (link_clock * lane_count * timeslots) / 8;
> - required_bw = compressed_bpp *
> (intel_dp_mode_to_fec_clock(mode_clock));
> + available_bw = (link_clock * lane_count * timeslots * 16) / 8;
> + required_bw = compressed_bppx16 *
> +(intel_dp_mode_to_fec_clock(mode_clock));
>
> return available_bw > required_bw;
> }
> @@ -1731,7 +1731,7 @@ static bool is_bw_sufficient_for_dsc_config(u16
> compressed_bpp, u32 link_clock, static int dsc_compute_link_config(struct
> intel_dp *intel_dp,
> struct intel_crtc_state *pipe_config,
> struct link_config_limits *limits,
> - u16 compressed_bpp,
> + u16 compressed_bppx16,
> int timeslots)
> {
> const struct drm_display_mode *adjusted_mode = &pipe_config-
> >hw.adjusted_mode; @@ -1746,8 +1746,8 @@ static int
> dsc_compute_link_config(struct intel_dp *intel_dp,
> for (lane_count = limits->min_lane_count;
> lane_count <= limits->max_lane_count;
> lane_count <<= 1) {
> - if (!is_bw_sufficient_for_dsc_config(compressed_bpp,
> link_rate, lane_count,
> - adjusted_mode-
> >clock,
> + if
> (!is_bw_sufficient_for_dsc_config(compressed_bppx16, link_rate,
> + lane_count,
> adjusted_mode->clock,
> pipe_config-
> >output_format,
> timeslots))
> continue;
> @@ -1860,7 +1860,7 @@ icl_dsc_compute_link_config(struct intel_dp
> *intel_dp,
> ret = dsc_compute_link_config(intel_dp,
> pipe_config,
> limits,
> - valid_dsc_bpp[i],
> + valid_dsc_bpp[i] << 4,
> timeslots);
> if (ret == 0) {
> pipe_config->dsc.compressed_bpp_x16 =
> to_bpp_x16(valid_dsc_bpp[i]); @@ -1886,22 +1886,31 @@
> xelpd_dsc_compute_link_config(struct intel_dp *intel_dp,
> int pipe_bpp,
> int timeslots)
> {
> - u16 compressed_bpp;
> + u8 bppx16_incr = drm_dp_dsc_sink_bpp_incr(intel_dp->dsc_dpcd);
> + struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> + u16 compressed_bppx16;
> + u8 bppx16_step;
> int ret;
>
> + if (DISPLAY_VER(i915) < 14 || bppx16_incr <= 1)
> + bppx16_step = 16;
> + else
> + bppx16_step = 16 / bppx16_incr;
> +
> /* Compressed BPP should be less than the Input DSC bpp */
> - dsc_max_bpp = min(dsc_max_bpp, pipe_bpp - 1);
> + dsc_max_bpp = min(dsc_max_bpp << 4, (pipe_bpp << 4) -
> bppx16_step);
> + dsc_min_bpp = dsc_min_bpp << 4;
>
> - for (compressed_bpp = dsc_max_bpp;
> - compressed_bpp >= dsc_min_bpp;
> - compressed_bpp--) {
> + for (compressed_bppx16 = dsc_max_bpp;
> + compressed_bppx16 >= dsc_min_bpp;
> + compressed_bppx16 -= bppx16_step) {
> ret = dsc_compute_link_config(intel_dp,
> pipe_config,
> limits,
> - compressed_bpp,
> + compressed_bppx16,
> timeslots);
> if (ret == 0) {
> - pipe_config->dsc.compressed_bpp_x16 =
> to_bpp_x16(compressed_bpp);
> + pipe_config->dsc.compressed_bpp_x16 =
> compressed_bppx16;
> return 0;
> }
> }
> --
> 2.25.1
More information about the Intel-gfx
mailing list