Commit b9de01d8 authored by Imre Deak's avatar Imre Deak

drm/i915/dp: Simplify intel_dp_max_data_rate()

Simplify intel_dp_max_data_rate() using
drm_dp_bw_channel_coding_efficiency() to calculate the max data rate for
both DP1.4 and UHBR link rates. This trades a redundant multiply/divide
for readability.

Cc: Jani Nikula <jani.nikula@linux.intel.com>
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/20231116131841.1588781-11-imre.deak@intel.com
parent 5ee4badb
...@@ -405,29 +405,27 @@ int intel_dp_effective_data_rate(int pixel_clock, int bpp_x16, ...@@ -405,29 +405,27 @@ int intel_dp_effective_data_rate(int pixel_clock, int bpp_x16,
int int
intel_dp_max_data_rate(int max_link_rate, int max_lanes) intel_dp_max_data_rate(int max_link_rate, int max_lanes)
{ {
if (max_link_rate >= 1000000) { int ch_coding_efficiency =
drm_dp_bw_channel_coding_efficiency(drm_dp_is_uhbr_rate(max_link_rate));
int max_link_rate_kbps = max_link_rate * 10;
/* /*
* UHBR rates always use 128b/132b channel encoding, and have * UHBR rates always use 128b/132b channel encoding, and have
* 97.71% data bandwidth efficiency. Consider max_link_rate the * 97.71% data bandwidth efficiency. Consider max_link_rate the
* link bit rate in units of 10000 bps. * link bit rate in units of 10000 bps.
*/ */
int max_link_rate_kbps = max_link_rate * 10;
max_link_rate_kbps = DIV_ROUND_DOWN_ULL(mul_u32_u32(max_link_rate_kbps, 9671), 10000);
max_link_rate = max_link_rate_kbps / 8;
}
/* /*
* Lower than UHBR rates always use 8b/10b channel encoding, and have * Lower than UHBR rates always use 8b/10b channel encoding, and have
* 80% data bandwidth efficiency for SST non-FEC. However, this turns * 80% data bandwidth efficiency for SST non-FEC. However, this turns
* out to be a nop by coincidence, and can be skipped: * out to be a nop by coincidence:
* *
* int max_link_rate_kbps = max_link_rate * 10; * int max_link_rate_kbps = max_link_rate * 10;
* max_link_rate_kbps = DIV_ROUND_DOWN_ULL(max_link_rate_kbps * 8, 10); * max_link_rate_kbps = DIV_ROUND_DOWN_ULL(max_link_rate_kbps * 8, 10);
* max_link_rate = max_link_rate_kbps / 8; * max_link_rate = max_link_rate_kbps / 8;
*/ */
return DIV_ROUND_DOWN_ULL(mul_u32_u32(max_link_rate_kbps * max_lanes,
return max_link_rate * max_lanes; ch_coding_efficiency),
1000000 * 8);
} }
bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp) bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp)
......
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