diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2509-drm-amd-display-disconnect-on-HPD-low-even-if-edid-i.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2509-drm-amd-display-disconnect-on-HPD-low-even-if-edid-i.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2509-drm-amd-display-disconnect-on-HPD-low-even-if-edid-i.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2509-drm-amd-display-disconnect-on-HPD-low-even-if-edid-i.patch new file mode 100644 index 00000000..5ada761d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2509-drm-amd-display-disconnect-on-HPD-low-even-if-edid-i.patch @@ -0,0 +1,104 @@ +From 70c8d7b4a0899c1ccb029b7a68bda9abe696d0f2 Mon Sep 17 00:00:00 2001 +From: Wenjing Liu <Wenjing.Liu@amd.com> +Date: Mon, 25 Sep 2017 14:53:14 -0400 +Subject: [PATCH 2509/4131] drm/amd/display: disconnect on HPD low even if edid + is the same + +[Description] +There are many occasions we need to retrieve sink capability and +notify connectivity change to os even if edid is not changed +on a HPD toggle. +(HDMI2.0 display needs re-enable link on every hpd, +display changes other capability outside from edid + need to be queried again and possibly reset the mode, etc.) + +In these cases we cannot keep the same sink without letting DM know. + +Signed-off-by: Wenjing Liu <Wenjing.Liu@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_link.c | 42 ++++++--------------------- + 1 file changed, 9 insertions(+), 33 deletions(-) + +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 feb10be..e414e47 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +@@ -566,6 +566,8 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) + link->local_sink) + return true; + ++ link_disconnect_sink(link); ++ + if (new_connection_type != dc_connection_none) { + link->type = new_connection_type; + +@@ -656,28 +658,15 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) + return false; + } + +- if (link->local_sink) { +- edid_status = dm_helpers_read_local_edid( +- link->ctx, +- link, +- sink); ++ sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; ++ sink->converter_disable_audio = converter_disable_audio; + +- if (edid_status == EDID_OK) { +- // Edid is not the same, to update the local sink with new sink. +- sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; +- sink->converter_disable_audio = converter_disable_audio; +- link->local_sink = sink; +- } +- } else { +- sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock; +- sink->converter_disable_audio = converter_disable_audio; +- link->local_sink = sink; ++ link->local_sink = sink; + +- edid_status = dm_helpers_read_local_edid( ++ edid_status = dm_helpers_read_local_edid( + link->ctx, + link, + sink); +- } + + switch (edid_status) { + case EDID_BAD_CHECKSUM: +@@ -758,28 +747,15 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) + if (link->type == dc_connection_mst_branch) { + LINK_INFO("link=%d, mst branch is now Disconnected\n", + link->link_index); ++ + dm_helpers_dp_mst_stop_top_mgr(link->ctx, link); + + link->mst_stream_alloc_table.stream_count = 0; + memset(link->mst_stream_alloc_table.stream_allocations, 0, sizeof(link->mst_stream_alloc_table.stream_allocations)); + } + +- if (link->local_sink) { +- sink = link->local_sink; +- edid_status = dm_helpers_read_local_edid( +- link->ctx, +- link, +- sink); +- if (edid_status != EDID_OK && edid_status != EDID_THE_SAME) { +- link_disconnect_sink(link); +- link->type = dc_connection_none; +- sink_caps.signal = SIGNAL_TYPE_NONE; +- } +- } else { +- link_disconnect_sink(link); +- link->type = dc_connection_none; +- sink_caps.signal = SIGNAL_TYPE_NONE; +- } ++ link->type = dc_connection_none; ++ sink_caps.signal = SIGNAL_TYPE_NONE; + } + + LINK_INFO("link=%d, dc_sink_in=%p is now %s\n", +-- +2.7.4 + |