aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch298
1 files changed, 298 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch
new file mode 100644
index 00000000..22d86a48
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2019-drm-amd-display-Move-link-functions-from-dc-to-dc_li.patch
@@ -0,0 +1,298 @@
+From 00747f15e0321f132c95ac6da18e29abdad80820 Mon Sep 17 00:00:00 2001
+From: Chris Park <Chris.Park@amd.com>
+Date: Fri, 10 May 2019 13:34:30 -0400
+Subject: [PATCH 2019/2940] drm/amd/display: Move link functions from dc to
+ dc_link
+
+[Why]
+link-specific functions should reside in dc_link.c
+
+[How]
+Move them there.
+
+Signed-off-by: Chris Park <Chris.Park@amd.com>
+Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 122 -----------------
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 127 +++++++++++++++++-
+ 2 files changed, 126 insertions(+), 123 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 45d11459d738..c7fd4047a516 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -496,128 +496,6 @@ void dc_stream_set_static_screen_events(struct dc *dc,
+ dc->hwss.set_static_screen_control(pipes_affected, num_pipes_affected, events);
+ }
+
+-void dc_link_set_drive_settings(struct dc *dc,
+- struct link_training_settings *lt_settings,
+- const struct dc_link *link)
+-{
+-
+- int i;
+-
+- for (i = 0; i < dc->link_count; i++) {
+- if (dc->links[i] == link)
+- break;
+- }
+-
+- if (i >= dc->link_count)
+- ASSERT_CRITICAL(false);
+-
+- dc_link_dp_set_drive_settings(dc->links[i], lt_settings);
+-}
+-
+-void dc_link_perform_link_training(struct dc *dc,
+- struct dc_link_settings *link_setting,
+- bool skip_video_pattern)
+-{
+- int i;
+-
+- for (i = 0; i < dc->link_count; i++)
+- dc_link_dp_perform_link_training(
+- dc->links[i],
+- link_setting,
+- skip_video_pattern);
+-}
+-
+-void dc_link_set_preferred_link_settings(struct dc *dc,
+- struct dc_link_settings *link_setting,
+- struct dc_link *link)
+-{
+- int i;
+- struct pipe_ctx *pipe;
+- struct dc_stream_state *link_stream;
+- struct dc_link_settings store_settings = *link_setting;
+-
+- link->preferred_link_setting = store_settings;
+-
+- /* Retrain with preferred link settings only relevant for
+- * DP signal type
+- */
+- if (!dc_is_dp_signal(link->connector_signal))
+- return;
+-
+- for (i = 0; i < MAX_PIPES; i++) {
+- pipe = &dc->current_state->res_ctx.pipe_ctx[i];
+- if (pipe->stream && pipe->stream->link) {
+- if (pipe->stream->link == link)
+- break;
+- }
+- }
+-
+- /* Stream not found */
+- if (i == MAX_PIPES)
+- return;
+-
+- link_stream = link->dc->current_state->res_ctx.pipe_ctx[i].stream;
+-
+- /* Cannot retrain link if backend is off */
+- if (link_stream->dpms_off)
+- return;
+-
+- if (link_stream)
+- decide_link_settings(link_stream, &store_settings);
+-
+- if ((store_settings.lane_count != LANE_COUNT_UNKNOWN) &&
+- (store_settings.link_rate != LINK_RATE_UNKNOWN))
+- dp_retrain_link_dp_test(link, &store_settings, false);
+-}
+-
+-void dc_link_enable_hpd(const struct dc_link *link)
+-{
+- dc_link_dp_enable_hpd(link);
+-}
+-
+-void dc_link_disable_hpd(const struct dc_link *link)
+-{
+- dc_link_dp_disable_hpd(link);
+-}
+-
+-
+-void dc_link_set_test_pattern(struct dc_link *link,
+- enum dp_test_pattern test_pattern,
+- const struct link_training_settings *p_link_settings,
+- const unsigned char *p_custom_pattern,
+- unsigned int cust_pattern_size)
+-{
+- if (link != NULL)
+- dc_link_dp_set_test_pattern(
+- link,
+- test_pattern,
+- p_link_settings,
+- p_custom_pattern,
+- 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;
+-
+-}
+-
+-const struct dc_link_settings *dc_link_get_link_cap(
+- const struct dc_link *link)
+-{
+- if (link->preferred_link_setting.lane_count != LANE_COUNT_UNKNOWN &&
+- link->preferred_link_setting.link_rate != LINK_RATE_UNKNOWN)
+- return &link->preferred_link_setting;
+- return &link->verified_link_cap;
+-}
+-
+ 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 a527969e2f69..386539289301 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -2339,7 +2339,8 @@ void core_link_resume(struct dc_link *link)
+ static struct fixed31_32 get_pbn_per_slot(struct dc_stream_state *stream)
+ {
+ 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);
++ 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);
+@@ -2858,3 +2859,127 @@ uint32_t dc_bandwidth_in_kbps_from_timing(
+ return kbps;
+
+ }
++
++void dc_link_set_drive_settings(struct dc *dc,
++ struct link_training_settings *lt_settings,
++ const struct dc_link *link)
++{
++
++ int i;
++
++ for (i = 0; i < dc->link_count; i++) {
++ if (dc->links[i] == link)
++ break;
++ }
++
++ if (i >= dc->link_count)
++ ASSERT_CRITICAL(false);
++
++ dc_link_dp_set_drive_settings(dc->links[i], lt_settings);
++}
++
++void dc_link_perform_link_training(struct dc *dc,
++ struct dc_link_settings *link_setting,
++ bool skip_video_pattern)
++{
++ int i;
++
++ for (i = 0; i < dc->link_count; i++)
++ dc_link_dp_perform_link_training(
++ dc->links[i],
++ link_setting,
++ skip_video_pattern);
++}
++
++void dc_link_set_preferred_link_settings(struct dc *dc,
++ struct dc_link_settings *link_setting,
++ struct dc_link *link)
++{
++ int i;
++ struct pipe_ctx *pipe;
++ struct dc_stream_state *link_stream;
++ struct dc_link_settings store_settings = *link_setting;
++
++ link->preferred_link_setting = store_settings;
++
++ /* Retrain with preferred link settings only relevant for
++ * DP signal type
++ */
++ if (!dc_is_dp_signal(link->connector_signal))
++ return;
++
++ for (i = 0; i < MAX_PIPES; i++) {
++ pipe = &dc->current_state->res_ctx.pipe_ctx[i];
++ if (pipe->stream && pipe->stream->link) {
++ if (pipe->stream->link == link)
++ break;
++ }
++ }
++
++ /* Stream not found */
++ if (i == MAX_PIPES)
++ return;
++
++ link_stream = link->dc->current_state->res_ctx.pipe_ctx[i].stream;
++
++ /* Cannot retrain link if backend is off */
++ if (link_stream->dpms_off)
++ return;
++
++ if (link_stream)
++ decide_link_settings(link_stream, &store_settings);
++
++ if ((store_settings.lane_count != LANE_COUNT_UNKNOWN) &&
++ (store_settings.link_rate != LINK_RATE_UNKNOWN))
++ dp_retrain_link_dp_test(link, &store_settings, false);
++}
++
++void dc_link_enable_hpd(const struct dc_link *link)
++{
++ dc_link_dp_enable_hpd(link);
++}
++
++void dc_link_disable_hpd(const struct dc_link *link)
++{
++ dc_link_dp_disable_hpd(link);
++}
++
++
++void dc_link_set_test_pattern(struct dc_link *link,
++ enum dp_test_pattern test_pattern,
++ const struct link_training_settings *p_link_settings,
++ const unsigned char *p_custom_pattern,
++ unsigned int cust_pattern_size)
++{
++ if (link != NULL)
++ dc_link_dp_set_test_pattern(
++ link,
++ test_pattern,
++ p_link_settings,
++ p_custom_pattern,
++ 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;
++
++}
++
++const struct dc_link_settings *dc_link_get_link_cap(
++ const struct dc_link *link)
++{
++ if (link->preferred_link_setting.lane_count != LANE_COUNT_UNKNOWN &&
++ link->preferred_link_setting.link_rate != LINK_RATE_UNKNOWN)
++ return &link->preferred_link_setting;
++ return &link->verified_link_cap;
++}
++
+--
+2.17.1
+