return drm_dp_dsc_sink_supports_format(connector->dp.dsc_dpcd, sink_dsc_format);
}
-static bool is_bw_sufficient_for_dsc_config(int dsc_bpp_x16, u32 link_clock,
- u32 lane_count, u32 mode_clock,
- enum intel_output_format output_format,
- int timeslots)
+static bool is_bw_sufficient_for_dsc_config(struct intel_dp *intel_dp,
+ int link_clock, int lane_count,
+ int mode_clock, int mode_hdisplay,
+ int dsc_slice_count, int link_bpp_x16,
+ unsigned long bw_overhead_flags)
{
- u32 available_bw, required_bw;
+ int available_bw;
+ int required_bw;
- available_bw = (link_clock * lane_count * timeslots * 16) / 8;
- required_bw = dsc_bpp_x16 * (intel_dp_mode_to_fec_clock(mode_clock));
+ available_bw = intel_dp_max_link_data_rate(intel_dp, link_clock, lane_count);
+ required_bw = intel_dp_link_required(link_clock, lane_count,
+ mode_clock, mode_hdisplay,
+ link_bpp_x16, bw_overhead_flags);
return available_bw >= required_bw;
}
if (ret)
continue;
} else {
- if (!is_bw_sufficient_for_dsc_config(dsc_bpp_x16, link_rate,
- lane_count,
+ if (!is_bw_sufficient_for_dsc_config(intel_dp,
+ link_rate, lane_count,
adjusted_mode->crtc_clock,
- pipe_config->output_format,
- timeslots))
+ adjusted_mode->hdisplay,
+ pipe_config->dsc.slice_count,
+ dsc_bpp_x16, 0))
continue;
}