Commit 1e59ab50 authored by Imre Deak's avatar Imre Deak
Browse files

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: default avatarUma Shankar <uma.shankar@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/20240226185246.1276018-1-imre.deak@intel.com
parent 610d7bc2
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -4059,3 +4059,33 @@ int drm_dp_bw_channel_coding_efficiency(bool is_uhbr)
		return 800000;
}
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);
+1 −0
Original line number Diff line number Diff line
@@ -812,5 +812,6 @@ int drm_dp_bw_overhead(int lane_count, int hactive,
		       int dsc_slice_count,
		       int bpp_x16, unsigned long flags);
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_ */