diff options
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.patch | 298 |
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 + |