aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch
new file mode 100644
index 00000000..c455d46f
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1162-drm-amd-display-Poll-pending-down-rep-before-clear-p.patch
@@ -0,0 +1,81 @@
+From eedd5ec026c2564964ce3481cd9f0997d6f3030a Mon Sep 17 00:00:00 2001
+From: Martin Tsai <martin.tsai@amd.com>
+Date: Thu, 10 Jan 2019 13:05:15 +0800
+Subject: [PATCH 1162/2940] drm/amd/display: Poll pending down rep before clear
+ payload allocation table
+
+[Why]
+On current design, driver cannot handle the interrupt for
+down reply when link training is processing. The DOWN REQ
+send before link training will keep in the pending DOWN REP
+state in the queue.
+It makes the next DOWN REQ be queued until time out.
+
+[How]
+To add a polling sequence before clear payload allocation table
+to make sure the pending DOWN REP can be handled.
+
+Signed-off-by: Martin Tsai <martin.tsai@amd.com>
+Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 7 +++++++
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 +++++
+ drivers/gpu/drm/amd/display/dc/dm_helpers.h | 7 +++++++
+ 3 files changed, 19 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+index e6ab0186955c..cae16b6d2344 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+@@ -263,6 +263,13 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
+ return true;
+ }
+
++/*
++ * poll pending down reply before clear payload allocation table
++ */
++void dm_helpers_dp_mst_poll_pending_down_reply(
++ struct dc_context *ctx,
++ const struct dc_link *link)
++{}
+
+ /*
+ * Clear payload allocation table before enable MST DP link.
+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 4bd49aafb5bd..d25174d87f07 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -1467,6 +1467,11 @@ static enum dc_status enable_link_dp_mst(
+ if (link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN)
+ return DC_OK;
+
++ /* to make sure the pending down rep can be processed
++ * before clear payload table
++ */
++ dm_helpers_dp_mst_poll_pending_down_reply(link->ctx, link);
++
+ /* clear payload table */
+ dm_helpers_dp_mst_clear_payload_allocation_table(link->ctx, link);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/amd/display/dc/dm_helpers.h
+index 5d4527d03045..e81b24374bcb 100644
+--- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h
++++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h
+@@ -57,6 +57,13 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
+ struct dp_mst_stream_allocation_table *proposed_table,
+ bool enable);
+
++/*
++ * poll pending down reply before clear payload allocation table
++ */
++void dm_helpers_dp_mst_poll_pending_down_reply(
++ struct dc_context *ctx,
++ const struct dc_link *link);
++
+ /*
+ * Clear payload allocation table before enable MST DP link.
+ */
+--
+2.17.1
+