diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0772-drm-amd-dal-Move-link-settings-to-public-interface.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0772-drm-amd-dal-Move-link-settings-to-public-interface.patch | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0772-drm-amd-dal-Move-link-settings-to-public-interface.patch b/common/recipes-kernel/linux/files/0772-drm-amd-dal-Move-link-settings-to-public-interface.patch new file mode 100644 index 00000000..399d87e3 --- /dev/null +++ b/common/recipes-kernel/linux/files/0772-drm-amd-dal-Move-link-settings-to-public-interface.patch @@ -0,0 +1,332 @@ +From 5f22fe3b2e8832d59299095cd32be5a95ebe8bea Mon Sep 17 00:00:00 2001 +From: Chris Park <Chris.Park@amd.com> +Date: Fri, 5 Feb 2016 12:43:22 -0500 +Subject: [PATCH 0772/1110] drm/amd/dal: Move link settings to public interface + +DC to move lane_settings to public + +Signed-off-by: Chris Park <Chris.Park@amd.com> +Acked-by: Jordan Lazare <Jordan.Lazare@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 8 ++-- + drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c | 55 +++++++++++----------- + drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c | 4 +- + drivers/gpu/drm/amd/dal/dc/core/dc_resource.c | 2 +- + drivers/gpu/drm/amd/dal/dc/dc.h | 9 ++++ + .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 5 +- + drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 7 --- + 7 files changed, 47 insertions(+), 43 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +index b0ef028..c1e3d33 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +@@ -1160,7 +1160,7 @@ static enum dc_status enable_link_dp(struct core_stream *stream) + skip_video_pattern = false; + + if (perform_link_training(link, &link_settings, skip_video_pattern)) { +- link->cur_link_settings = link_settings; ++ link->public.cur_link_settings = link_settings; + status = DC_OK; + } + else +@@ -1176,7 +1176,7 @@ static enum dc_status enable_link_dp_mst(struct core_stream *stream) + /* sink signal type after MST branch is MST. Multiple MST sinks + * share one link. Link DP PHY is enable or training only once. + */ +- if (link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) ++ if (link->public.cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) + return DC_OK; + + return enable_link_dp(stream); +@@ -1214,7 +1214,7 @@ static void enable_link_hdmi(struct core_stream *stream) + normalized_pix_clk, + stream->public.timing.flags.LTE_340MCSC_SCRAMBLE); + +- dm_memset(&stream->sink->link->cur_link_settings, 0, ++ dm_memset(&stream->sink->link->public.cur_link_settings, 0, + sizeof(struct link_settings)); + + link->link_enc->funcs->enable_tmds_output( +@@ -1342,7 +1342,7 @@ void core_link_resume(struct core_link *link) + static struct fixed31_32 get_pbn_per_slot(struct core_stream *stream) + { + struct link_settings *link_settings = +- &stream->sink->link->cur_link_settings; ++ &stream->sink->link->public.cur_link_settings; + uint32_t link_rate_in_mbps = + link_settings->link_rate * LINK_RATE_REF_FREQ_IN_MHZ; + struct fixed31_32 mbps = dal_fixed31_32_from_int( +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c +index 83d5e03..54d1f9f 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c +@@ -277,7 +277,7 @@ static void dpcd_set_lt_pattern_and_lane_settings( + dpcd_lt_buffer, + size_in_bytes + sizeof(dpcd_pattern.raw) ); + +- link->ln_setting = lt_settings->lane_settings[0]; ++ link->public.ln_setting = lt_settings->lane_settings[0]; + } + + static bool is_cr_done(enum lane_count ln_count, +@@ -599,7 +599,7 @@ static void dpcd_set_lane_settings( + dpcd_lane[0].bits.MAX_SWING_REACHED, + dpcd_lane[0].bits.MAX_PRE_EMPHASIS_REACHED); + +- link->ln_setting = link_training_setting->lane_settings[0]; ++ link->public.ln_setting = link_training_setting->lane_settings[0]; + + } + +@@ -1142,7 +1142,7 @@ bool dp_hbr_verify_link_cap( + } + + if (success) +- link->verified_link_cap = *cur; ++ link->public.verified_link_cap = *cur; + + /* always disable the link before trying another + * setting or before returning we'll enable it later +@@ -1158,14 +1158,14 @@ bool dp_hbr_verify_link_cap( + /* If all LT fails for all settings, + * set verified = failed safe (1 lane low) + */ +- link->verified_link_cap.lane_count = LANE_COUNT_ONE; +- link->verified_link_cap.link_rate = LINK_RATE_LOW; ++ link->public.verified_link_cap.lane_count = LANE_COUNT_ONE; ++ link->public.verified_link_cap.link_rate = LINK_RATE_LOW; + +- link->verified_link_cap.link_spread = ++ link->public.verified_link_cap.link_spread = + LINK_SPREAD_DISABLED; + } + +- link->max_link_setting = link->verified_link_cap; ++ link->public.max_link_setting = link->public.verified_link_cap; + + return success; + } +@@ -1244,12 +1244,12 @@ bool dp_validate_mode_timing( + /* For static validation we always use reported + * link settings for other cases, when no modelist + * changed we can use verified link setting*/ +- link_setting = &link->reported_link_cap; ++ link_setting = &link->public.reported_link_cap; + + /* TODO: DYNAMIC_VALIDATION needs to be implemented */ + /*if (flags.DYNAMIC_VALIDATION == 1 && +- link->verified_link_cap.lane_count != LANE_COUNT_UNKNOWN) +- link_setting = &link->verified_link_cap; ++ link->public.verified_link_cap.lane_count != LANE_COUNT_UNKNOWN) ++ link_setting = &link->public.verified_link_cap; + */ + + req_bw = bandwidth_in_kbps_from_timing(timing); +@@ -1292,15 +1292,15 @@ void decide_link_settings(struct core_stream *stream, + */ + link = stream->sink->link; + +- if ((link->reported_link_cap.lane_count != LANE_COUNT_UNKNOWN) && +- (link->reported_link_cap.link_rate <= +- link->verified_link_cap.link_rate)) { ++ if ((link->public.reported_link_cap.lane_count != LANE_COUNT_UNKNOWN) && ++ (link->public.reported_link_cap.link_rate <= ++ link->public.verified_link_cap.link_rate)) { + + link_bw = bandwidth_in_kbps_from_link_settings( +- &link->reported_link_cap); ++ &link->public.reported_link_cap); + + if (req_bw < link_bw) { +- *link_setting = link->reported_link_cap; ++ *link_setting = link->public.reported_link_cap; + return; + } + } +@@ -1319,7 +1319,7 @@ void decide_link_settings(struct core_stream *stream, + if (req_bw < link_bw) { + if (is_link_setting_supported( + cur_ls, +- &link->max_link_setting)) { ++ &link->public.max_link_setting)) { + *link_setting = *cur_ls; + return; + } +@@ -1327,10 +1327,10 @@ void decide_link_settings(struct core_stream *stream, + } + + BREAK_TO_DEBUGGER(); +- ASSERT(link->verified_link_cap.lane_count != ++ ASSERT(link->public.verified_link_cap.lane_count != + LANE_COUNT_UNKNOWN); + +- *link_setting = link->verified_link_cap; ++ *link_setting = link->public.verified_link_cap; + } + + /*************************Short Pulse IRQ***************************/ +@@ -1349,7 +1349,7 @@ static bool hpd_rx_irq_check_link_loss_status( + sink_status_changed = false; + return_code = false; + +- if (link->cur_link_settings.lane_count == 0) ++ if (link->public.cur_link_settings.lane_count == 0) + return return_code; + /*1. Check that we can handle interrupt: Not in FS DOS, + * Not in "Display Timeout" state, Link is trained. +@@ -1375,7 +1375,7 @@ static bool hpd_rx_irq_check_link_loss_status( + + /*parse lane status*/ + for (lane = 0; +- lane < link->cur_link_settings.lane_count; ++ lane < link->public.cur_link_settings.lane_count; + lane++) { + + /* check status of lanes 0,1 +@@ -1441,7 +1441,7 @@ static bool allow_hpd_rx_irq(const struct core_link *link) + * 3) We know we're dealing with an active dongle + */ + +- if ((link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) || ++ if ((link->public.cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) || + (link->public.type == dc_connection_mst_branch) || + is_dp_active_dongle(link)) + return true; +@@ -1502,7 +1502,8 @@ bool dc_link_handle_hpd_rx_irq(const struct dc_link *dc_link) + if (hpd_rx_irq_check_link_loss_status( + link, + &hpd_irq_dpcd_data)) { +- perform_link_training(link, &link->cur_link_settings, true); ++ perform_link_training(link, ++ &link->public.cur_link_settings, true); + status = false; + } + +@@ -1708,11 +1709,11 @@ static void retrieve_link_cap(struct core_link *link) + link->dpcd_caps.max_down_spread.raw = dpcd_data[ + DPCD_ADDRESS_MAX_DOWNSPREAD - DPCD_ADDRESS_DPCD_REV]; + +- link->reported_link_cap.lane_count = ++ link->public.reported_link_cap.lane_count = + link->dpcd_caps.max_ln_count.bits.MAX_LANE_COUNT; +- link->reported_link_cap.link_rate = dpcd_data[ ++ link->public.reported_link_cap.link_rate = dpcd_data[ + DPCD_ADDRESS_MAX_LINK_RATE - DPCD_ADDRESS_DPCD_REV]; +- link->reported_link_cap.link_spread = ++ link->public.reported_link_cap.link_spread = + link->dpcd_caps.max_down_spread.bits.MAX_DOWN_SPREAD ? + LINK_SPREAD_05_DOWNSPREAD_30KHZ : LINK_SPREAD_DISABLED; + +@@ -1753,10 +1754,10 @@ void detect_dp_sink_caps(struct core_link *link) + */ + + if (is_mst_supported(link)) { +- link->verified_link_cap = link->reported_link_cap; ++ link->public.verified_link_cap = link->public.reported_link_cap; + } else { + dp_hbr_verify_link_cap(link, +- &link->reported_link_cap); ++ &link->public.reported_link_cap); + } + /* TODO save sink caps in link->sink */ + } +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c +index e8f4ec8..2d78e52 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c +@@ -89,8 +89,8 @@ void dp_disable_link_phy(struct core_link *link, enum signal_type signal) + link->link_enc->funcs->disable_output(link->link_enc, signal); + + /* Clear current link setting.*/ +- dm_memset(&link->cur_link_settings, 0, +- sizeof(link->cur_link_settings)); ++ dm_memset(&link->public.cur_link_settings, 0, ++ sizeof(link->public.cur_link_settings)); + } + + void dp_disable_link_phy_mst(struct core_link *link, struct core_stream *stream) +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c +index 8cb756e..6375678 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_resource.c +@@ -500,7 +500,7 @@ static void fill_display_configs( + cfg->transmitter = + stream->sink->link->link_enc->transmitter; + cfg->link_settings = +- stream->sink->link->cur_link_settings; ++ stream->sink->link->public.cur_link_settings; + cfg->sym_clock = stream->public.timing.pix_clk_khz; + switch (stream->public.timing.display_color_depth) { + case COLOR_DEPTH_101010: +diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h +index 70fd7d2..45d39c7 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc.h +@@ -31,6 +31,7 @@ + #include "audio_types.h" + #include "logger_types.h" + #include "gpio_types.h" ++#include "link_service_types.h" + + #define MAX_SINKS_PER_LINK 4 + +@@ -280,6 +281,14 @@ struct dc_link { + enum signal_type connector_signal; + enum dc_irq_source irq_source_hpd; + enum dc_irq_source irq_source_hpd_rx;/* aka DP Short Pulse */ ++ /* caps is the same as reported_link_cap. link_traing use ++ * reported_link_cap. Will clean up. TODO ++ */ ++ struct link_settings reported_link_cap; ++ struct link_settings verified_link_cap; ++ struct link_settings max_link_setting; ++ struct link_settings cur_link_settings; ++ struct lane_settings ln_setting; + }; + + /* +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +index 6ae14d9..e721398 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +@@ -617,7 +617,7 @@ static void update_info_frame(struct core_stream *stream) + static void enable_stream(struct core_stream *stream) + { + enum lane_count lane_count = +- stream->sink->link->cur_link_settings.lane_count; ++ stream->sink->link->public.cur_link_settings.lane_count; + + struct dc_crtc_timing *timing = &stream->public.timing; + struct core_link *link = stream->sink->link; +@@ -869,7 +869,8 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx, + core_link_enable_stream(stream->sink->link, stream); + + if (dc_is_dp_signal(stream->signal)) +- unblank_stream(stream, &stream->sink->link->cur_link_settings); ++ unblank_stream(stream, ++ &stream->sink->link->public.cur_link_settings); + + return DC_OK; + } +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h +index 17155e3..6a81518 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h +@@ -232,13 +232,6 @@ struct core_link { + struct graphics_object_id link_id; + union ddi_channel_mapping ddi_channel_mapping; + struct connector_device_tag_info device_tag; +- /* caps is the same as reported_link_cap. link_traing use +- * reported_link_cap. Will clean up. TODO */ +- struct link_settings reported_link_cap; +- struct link_settings verified_link_cap; +- struct link_settings max_link_setting; +- struct link_settings cur_link_settings; +- struct lane_settings ln_setting; + struct dpcd_caps dpcd_caps; + unsigned int dpcd_sink_count; + +-- +2.7.4 + |