diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1747-drm-amd-display-Calculate-link-bandwidth-in-a-common.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1747-drm-amd-display-Calculate-link-bandwidth-in-a-common.patch | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1747-drm-amd-display-Calculate-link-bandwidth-in-a-common.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1747-drm-amd-display-Calculate-link-bandwidth-in-a-common.patch new file mode 100644 index 00000000..2a20c85c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1747-drm-amd-display-Calculate-link-bandwidth-in-a-common.patch @@ -0,0 +1,155 @@ +From 479760d05927373697175d48d883b0fe526a7d88 Mon Sep 17 00:00:00 2001 +From: Nikola Cornij <nikola.cornij@amd.com> +Date: Tue, 19 Mar 2019 19:47:32 -0400 +Subject: [PATCH 1747/2940] 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> +--- + drivers/gpu/drm/amd/display/dc/core/dc.c | 13 ++++++++++ + drivers/gpu/drm/amd/display/dc/core/dc_link.c | 16 ++++++------- + .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 24 ++++--------------- + drivers/gpu/drm/amd/display/dc/dc_link.h | 3 +++ + 4 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index c7c3c383974b..2401c679a70d 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -590,6 +590,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); +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +index 5428bb3fa90c..8504396be362 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +@@ -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); +- +- return dc_fixpt_div_int(mbps, 54); ++ 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 */ ++ ++ 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) +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +index 491d13d27e9e..0d8ef8f7cb58 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +@@ -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; +diff --git a/drivers/gpu/drm/amd/display/dc/dc_link.h b/drivers/gpu/drm/amd/display/dc/dc_link.h +index a83e1c60f9db..7b61fb7b1bb7 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_link.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_link.h +@@ -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, +-- +2.17.1 + |