Commit 7bca1b80 authored by Imre Deak's avatar Imre Deak

drm/i915/dp: Use connector DSC DPCD in intel_dp_dsc_get_slice_count()

Use the connector's DSC DPCD capabilities in
intel_dp_dsc_get_slice_count().
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231006133727.1822579-16-imre.deak@intel.com
parent 926b726c
...@@ -823,11 +823,11 @@ u16 intel_dp_dsc_get_max_compressed_bpp(struct drm_i915_private *i915, ...@@ -823,11 +823,11 @@ u16 intel_dp_dsc_get_max_compressed_bpp(struct drm_i915_private *i915,
return bits_per_pixel; return bits_per_pixel;
} }
u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, u8 intel_dp_dsc_get_slice_count(const struct intel_connector *connector,
int mode_clock, int mode_hdisplay, int mode_clock, int mode_hdisplay,
bool bigjoiner) bool bigjoiner)
{ {
struct drm_i915_private *i915 = dp_to_i915(intel_dp); struct drm_i915_private *i915 = to_i915(connector->base.dev);
u8 min_slice_count, i; u8 min_slice_count, i;
int max_slice_width; int max_slice_width;
...@@ -845,7 +845,7 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, ...@@ -845,7 +845,7 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
if (mode_clock >= ((i915->display.cdclk.max_cdclk_freq * 85) / 100)) if (mode_clock >= ((i915->display.cdclk.max_cdclk_freq * 85) / 100))
min_slice_count = max_t(u8, min_slice_count, 2); min_slice_count = max_t(u8, min_slice_count, 2);
max_slice_width = drm_dp_dsc_sink_max_slice_width(intel_dp->dsc_dpcd); max_slice_width = drm_dp_dsc_sink_max_slice_width(connector->dp.dsc_dpcd);
if (max_slice_width < DP_DSC_MIN_SLICE_WIDTH_VALUE) { if (max_slice_width < DP_DSC_MIN_SLICE_WIDTH_VALUE) {
drm_dbg_kms(&i915->drm, drm_dbg_kms(&i915->drm,
"Unsupported slice width %d by DP DSC Sink device\n", "Unsupported slice width %d by DP DSC Sink device\n",
...@@ -862,7 +862,7 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, ...@@ -862,7 +862,7 @@ u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp,
u8 test_slice_count = valid_dsc_slicecount[i] << bigjoiner; u8 test_slice_count = valid_dsc_slicecount[i] << bigjoiner;
if (test_slice_count > if (test_slice_count >
drm_dp_dsc_sink_max_slice_count(intel_dp->dsc_dpcd, false)) drm_dp_dsc_sink_max_slice_count(connector->dp.dsc_dpcd, false))
break; break;
/* big joiner needs small joiner to be enabled */ /* big joiner needs small joiner to be enabled */
...@@ -1238,7 +1238,7 @@ intel_dp_mode_valid(struct drm_connector *_connector, ...@@ -1238,7 +1238,7 @@ intel_dp_mode_valid(struct drm_connector *_connector,
output_format, output_format,
pipe_bpp, 64); pipe_bpp, 64);
dsc_slice_count = dsc_slice_count =
intel_dp_dsc_get_slice_count(intel_dp, intel_dp_dsc_get_slice_count(connector,
target_clock, target_clock,
mode->hdisplay, mode->hdisplay,
bigjoiner); bigjoiner);
...@@ -2161,7 +2161,7 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp, ...@@ -2161,7 +2161,7 @@ int intel_dp_dsc_compute_config(struct intel_dp *intel_dp,
u8 dsc_dp_slice_count; u8 dsc_dp_slice_count;
dsc_dp_slice_count = dsc_dp_slice_count =
intel_dp_dsc_get_slice_count(intel_dp, intel_dp_dsc_get_slice_count(connector,
adjusted_mode->crtc_clock, adjusted_mode->crtc_clock,
adjusted_mode->crtc_hdisplay, adjusted_mode->crtc_hdisplay,
pipe_config->bigjoiner_pipes); pipe_config->bigjoiner_pipes);
......
...@@ -125,7 +125,7 @@ u16 intel_dp_dsc_get_max_compressed_bpp(struct drm_i915_private *i915, ...@@ -125,7 +125,7 @@ u16 intel_dp_dsc_get_max_compressed_bpp(struct drm_i915_private *i915,
enum intel_output_format output_format, enum intel_output_format output_format,
u32 pipe_bpp, u32 pipe_bpp,
u32 timeslots); u32 timeslots);
u8 intel_dp_dsc_get_slice_count(struct intel_dp *intel_dp, u8 intel_dp_dsc_get_slice_count(const struct intel_connector *connector,
int mode_clock, int mode_hdisplay, int mode_clock, int mode_hdisplay,
bool bigjoiner); bool bigjoiner);
bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp, bool intel_dp_need_bigjoiner(struct intel_dp *intel_dp,
......
...@@ -1014,7 +1014,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector, ...@@ -1014,7 +1014,7 @@ intel_dp_mst_mode_valid_ctx(struct drm_connector *connector,
INTEL_OUTPUT_FORMAT_RGB, INTEL_OUTPUT_FORMAT_RGB,
pipe_bpp, 64); pipe_bpp, 64);
dsc_slice_count = dsc_slice_count =
intel_dp_dsc_get_slice_count(intel_dp, intel_dp_dsc_get_slice_count(intel_connector,
target_clock, target_clock,
mode->hdisplay, mode->hdisplay,
bigjoiner); bigjoiner);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment