mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
drm/dp: Add drm_dp_max_dprx_data_rate()
Copy intel_dp_max_data_rate() to DRM core. It will be needed by a follow-up DP tunnel patch, checking the maximum rate the DPRX (sink) supports. Accordingly use the drm_dp_max_dprx_data_rate() name for clarity. This patchset will also switch calling the new DRM function in i915 instead of intel_dp_max_data_rate(). While at it simplify the function documentation/comments, removing parts described already by drm_dp_bw_channel_coding_efficiency(). v2: (Ville) - Remove max_link_rate_kbps. - Simplify the function documentation. v3: - Rebased on latest drm-tip. Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Uma Shankar <uma.shankar@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240226185246.1276018-1-imre.deak@intel.com
This commit is contained in:
parent
610d7bc2e2
commit
1e59ab501a
2 changed files with 31 additions and 0 deletions
|
@ -4059,3 +4059,33 @@ int drm_dp_bw_channel_coding_efficiency(bool is_uhbr)
|
||||||
return 800000;
|
return 800000;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_dp_bw_channel_coding_efficiency);
|
EXPORT_SYMBOL(drm_dp_bw_channel_coding_efficiency);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_dp_max_dprx_data_rate - Get the max data bandwidth of a DPRX sink
|
||||||
|
* @max_link_rate: max DPRX link rate in 10kbps units
|
||||||
|
* @max_lanes: max DPRX lane count
|
||||||
|
*
|
||||||
|
* Given a link rate and lanes, get the data bandwidth.
|
||||||
|
*
|
||||||
|
* Data bandwidth is the actual payload rate, which depends on the data
|
||||||
|
* bandwidth efficiency and the link rate.
|
||||||
|
*
|
||||||
|
* Note that protocol layers above the DPRX link level considered here can
|
||||||
|
* further limit the maximum data rate. Such layers are the MST topology (with
|
||||||
|
* limits on the link between the source and first branch device as well as on
|
||||||
|
* the whole MST path until the DPRX link) and (Thunderbolt) DP tunnels -
|
||||||
|
* which in turn can encapsulate an MST link with its own limit - with each
|
||||||
|
* SST or MST encapsulated tunnel sharing the BW of a tunnel group.
|
||||||
|
*
|
||||||
|
* Returns the maximum data rate in kBps units.
|
||||||
|
*/
|
||||||
|
int drm_dp_max_dprx_data_rate(int max_link_rate, int max_lanes)
|
||||||
|
{
|
||||||
|
int ch_coding_efficiency =
|
||||||
|
drm_dp_bw_channel_coding_efficiency(drm_dp_is_uhbr_rate(max_link_rate));
|
||||||
|
|
||||||
|
return DIV_ROUND_DOWN_ULL(mul_u32_u32(max_link_rate * 10 * max_lanes,
|
||||||
|
ch_coding_efficiency),
|
||||||
|
1000000 * 8);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_dp_max_dprx_data_rate);
|
||||||
|
|
|
@ -812,5 +812,6 @@ int drm_dp_bw_overhead(int lane_count, int hactive,
|
||||||
int dsc_slice_count,
|
int dsc_slice_count,
|
||||||
int bpp_x16, unsigned long flags);
|
int bpp_x16, unsigned long flags);
|
||||||
int drm_dp_bw_channel_coding_efficiency(bool is_uhbr);
|
int drm_dp_bw_channel_coding_efficiency(bool is_uhbr);
|
||||||
|
int drm_dp_max_dprx_data_rate(int max_link_rate, int max_lanes);
|
||||||
|
|
||||||
#endif /* _DRM_DP_HELPER_H_ */
|
#endif /* _DRM_DP_HELPER_H_ */
|
||||||
|
|
Loading…
Reference in a new issue