diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1012-drm-amd-display-Fix-MST-downstream-display-not-light.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1012-drm-amd-display-Fix-MST-downstream-display-not-light.patch | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1012-drm-amd-display-Fix-MST-downstream-display-not-light.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1012-drm-amd-display-Fix-MST-downstream-display-not-light.patch new file mode 100644 index 00000000..94cc0e73 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1012-drm-amd-display-Fix-MST-downstream-display-not-light.patch @@ -0,0 +1,119 @@ +From 96605307317a66eb4fb63cd69cd772ba183a95bc Mon Sep 17 00:00:00 2001 +From: Jerry Zuo <Jerry.Zuo@amd.com> +Date: Thu, 24 Aug 2017 16:03:02 -0400 +Subject: [PATCH 1012/4131] drm/amd/display: Fix MST downstream display not + light up regression + +The fix is for the scenario: MST+SST chain together, and hook up +to the card. + +Regression: Per stream validate_context build v2 +Before dc_add_stream_to_ctx(), need to update/reset +stream signal type to SIGNAL_TYPE_DISPLAY_PORT_MST. Otherwise, +downstream device cannot be added to ctx due to the lack of signal +type info (SIGNAL_TYPE_NONE). +update_stream_signal() needs to be done after stream is created. + +Change-Id: I02430c362e3394b5a450a4609d7bcf10b9573995 +Signed-off-by: Jerry Zuo <Jerry.Zuo@amd.com> +Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 25 ----------------------- + drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 24 ++++++++++++++++++++++ + 2 files changed, 24 insertions(+), 25 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +index d21e8d3..2ee3399 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +@@ -1323,7 +1323,6 @@ bool dc_is_stream_unchanged( + + /* Maximum TMDS single link pixel clock 165MHz */ + #define TMDS_MAX_PIXEL_CLOCK_IN_KHZ 165000 +-#define TMDS_MAX_PIXEL_CLOCK_IN_KHZ_UPMOST 297000 + + static void update_stream_engine_usage( + struct resource_context *res_ctx, +@@ -1434,28 +1433,6 @@ static struct audio *find_first_free_audio( + return 0; + } + +-static void update_stream_signal(struct dc_stream_state *stream) +-{ +- if (stream->output_signal == SIGNAL_TYPE_NONE) { +- struct dc_sink *dc_sink = stream->sink; +- +- if (dc_sink->sink_signal == SIGNAL_TYPE_NONE) +- stream->signal = stream->sink->link->connector_signal; +- else +- stream->signal = dc_sink->sink_signal; +- } else { +- stream->signal = stream->output_signal; +- } +- +- if (dc_is_dvi_signal(stream->signal)) { +- if (stream->timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK_IN_KHZ_UPMOST && +- stream->sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK) +- stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; +- else +- stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK; +- } +-} +- + bool resource_is_stream_unchanged( + struct validate_context *old_context, struct dc_stream_state *stream) + { +@@ -1627,8 +1604,6 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing) + + static void calculate_phy_pix_clks(struct dc_stream_state *stream) + { +- update_stream_signal(stream); +- + /* update actual pixel clock on all streams */ + if (dc_is_hdmi_signal(stream->signal)) + stream->phy_pix_clk = get_norm_pix_clk( +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +index aaa6d23..0e7cc29 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +@@ -33,6 +33,28 @@ + /******************************************************************************* + * Private functions + ******************************************************************************/ ++#define TMDS_MAX_PIXEL_CLOCK_IN_KHZ_UPMOST 297000 ++static void update_stream_signal(struct dc_stream_state *stream) ++{ ++ if (stream->output_signal == SIGNAL_TYPE_NONE) { ++ struct dc_sink *dc_sink = stream->sink; ++ ++ if (dc_sink->sink_signal == SIGNAL_TYPE_NONE) ++ stream->signal = stream->sink->link->connector_signal; ++ else ++ stream->signal = dc_sink->sink_signal; ++ } else { ++ stream->signal = stream->output_signal; ++ } ++ ++ if (dc_is_dvi_signal(stream->signal)) { ++ if (stream->timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK_IN_KHZ_UPMOST && ++ stream->sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK) ++ stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK; ++ else ++ stream->signal = SIGNAL_TYPE_DVI_SINGLE_LINK; ++ } ++} + + static bool construct(struct dc_stream_state *stream, + struct dc_sink *dc_sink_data) +@@ -80,6 +102,8 @@ static bool construct(struct dc_stream_state *stream, + stream->timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble; + + stream->status.link = stream->sink->link; ++ ++ update_stream_signal(stream); + return true; + } + +-- +2.7.4 + |