drm/amd/display: Calculate link bandwidth in a common function
[why] Currently link bandwidth is calculated in two places, using the same formula. They should be unified into calling one function. [how] Replace all implementations of link bandwidth calculation with a call to a function. Signed-off-by: Nikola Cornij <nikola.cornij@amd.com> Reviewed-by: Nikola Cornij <Nikola.Cornij@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
0de34efc7b
commit
332c11914a
|
@ -584,6 +584,19 @@ void dc_link_set_test_pattern(struct dc_link *link,
|
|||
cust_pattern_size);
|
||||
}
|
||||
|
||||
uint32_t dc_link_bandwidth_kbps(
|
||||
const struct dc_link *link,
|
||||
const struct dc_link_settings *link_setting)
|
||||
{
|
||||
uint32_t link_bw_kbps = link_setting->link_rate * LINK_RATE_REF_FREQ_IN_KHZ; /* bytes per sec */
|
||||
|
||||
link_bw_kbps *= 8; /* 8 bits per byte*/
|
||||
link_bw_kbps *= link_setting->lane_count;
|
||||
|
||||
return link_bw_kbps;
|
||||
|
||||
}
|
||||
|
||||
static void destruct(struct dc *dc)
|
||||
{
|
||||
dc_release_state(dc->current_state);
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
******************************************************************************/
|
||||
|
||||
enum {
|
||||
LINK_RATE_REF_FREQ_IN_MHZ = 27,
|
||||
PEAK_FACTOR_X1000 = 1006,
|
||||
/*
|
||||
* Some receivers fail to train on first try and are good
|
||||
|
@ -2289,14 +2288,13 @@ void core_link_resume(struct dc_link *link)
|
|||
|
||||
static struct fixed31_32 get_pbn_per_slot(struct dc_stream_state *stream)
|
||||
{
|
||||
struct dc_link_settings *link_settings =
|
||||
&stream->link->cur_link_settings;
|
||||
uint32_t link_rate_in_mbps =
|
||||
link_settings->link_rate * LINK_RATE_REF_FREQ_IN_MHZ;
|
||||
struct fixed31_32 mbps = dc_fixpt_from_int(
|
||||
link_rate_in_mbps * link_settings->lane_count);
|
||||
struct fixed31_32 mbytes_per_sec;
|
||||
uint32_t link_rate_in_mbytes_per_sec = dc_link_bandwidth_kbps(stream->link, &stream->link->cur_link_settings);
|
||||
link_rate_in_mbytes_per_sec /= 8000; /* Kbits to MBytes */
|
||||
|
||||
return dc_fixpt_div_int(mbps, 54);
|
||||
mbytes_per_sec = dc_fixpt_from_int(link_rate_in_mbytes_per_sec);
|
||||
|
||||
return dc_fixpt_div_int(mbytes_per_sec, 54);
|
||||
}
|
||||
|
||||
static int get_color_depth(enum dc_color_depth color_depth)
|
||||
|
|
|
@ -1533,22 +1533,6 @@ static bool decide_fallback_link_setting(
|
|||
return true;
|
||||
}
|
||||
|
||||
static uint32_t bandwidth_in_kbps_from_link_settings(
|
||||
const struct dc_link_settings *link_setting)
|
||||
{
|
||||
uint32_t link_rate_in_kbps = link_setting->link_rate *
|
||||
LINK_RATE_REF_FREQ_IN_KHZ;
|
||||
|
||||
uint32_t lane_count = link_setting->lane_count;
|
||||
uint32_t kbps = link_rate_in_kbps;
|
||||
|
||||
kbps *= lane_count;
|
||||
kbps *= 8; /* 8 bits per byte*/
|
||||
|
||||
return kbps;
|
||||
|
||||
}
|
||||
|
||||
bool dp_validate_mode_timing(
|
||||
struct dc_link *link,
|
||||
const struct dc_crtc_timing *timing)
|
||||
|
@ -1574,7 +1558,7 @@ bool dp_validate_mode_timing(
|
|||
*/
|
||||
|
||||
req_bw = dc_bandwidth_in_kbps_from_timing(timing);
|
||||
max_bw = bandwidth_in_kbps_from_link_settings(link_setting);
|
||||
max_bw = dc_link_bandwidth_kbps(link, link_setting);
|
||||
|
||||
if (req_bw <= max_bw) {
|
||||
/* remember the biggest mode here, during
|
||||
|
@ -1609,7 +1593,8 @@ static bool decide_dp_link_settings(struct dc_link *link, struct dc_link_setting
|
|||
*/
|
||||
while (current_link_setting.link_rate <=
|
||||
link->verified_link_cap.link_rate) {
|
||||
link_bw = bandwidth_in_kbps_from_link_settings(
|
||||
link_bw = dc_link_bandwidth_kbps(
|
||||
link,
|
||||
¤t_link_setting);
|
||||
if (req_bw <= link_bw) {
|
||||
*link_setting = current_link_setting;
|
||||
|
@ -1660,7 +1645,8 @@ static bool decide_edp_link_settings(struct dc_link *link, struct dc_link_settin
|
|||
*/
|
||||
while (current_link_setting.link_rate <=
|
||||
link->verified_link_cap.link_rate) {
|
||||
link_bw = bandwidth_in_kbps_from_link_settings(
|
||||
link_bw = dc_link_bandwidth_kbps(
|
||||
link,
|
||||
¤t_link_setting);
|
||||
if (req_bw <= link_bw) {
|
||||
*link_setting = current_link_setting;
|
||||
|
|
|
@ -246,6 +246,9 @@ void dc_link_set_test_pattern(struct dc_link *link,
|
|||
const struct link_training_settings *p_link_settings,
|
||||
const unsigned char *p_custom_pattern,
|
||||
unsigned int cust_pattern_size);
|
||||
uint32_t dc_link_bandwidth_kbps(
|
||||
const struct dc_link *link,
|
||||
const struct dc_link_settings *link_setting);
|
||||
|
||||
bool dc_submit_i2c(
|
||||
struct dc *dc,
|
||||
|
|
Loading…
Reference in New Issue