aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch
new file mode 100644
index 00000000..9461b1b8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0806-drm-amd-display-retry-3-times-before-successfully-re.patch
@@ -0,0 +1,59 @@
+From b22141c0736ee943fc013f0f90a14c830875f192 Mon Sep 17 00:00:00 2001
+From: Xiaodong Yan <Xiaodong.Yan@amd.com>
+Date: Wed, 24 Oct 2018 02:08:53 +0800
+Subject: [PATCH 0806/2940] drm/amd/display: retry 3 times before successfully
+ reading
+
+DPCD Extended Receiver Capability Field
+
+[Why]
+1.dpcd extended receiver capability sometimes read fail,
+ and corrupted data leads to sink caps is not correct.
+2.sometimes sink reply ack with fewer data
+
+[How]
+ check the return value of core_link_read_dpcd,
+ try to read again when failure happens
+
+Signed-off-by: Xiaodong Yan <Xiaodong.Yan@amd.com>
+Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+Acked-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+index d91df5ef0cb3..4d1f8ac069c1 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+@@ -2371,11 +2371,22 @@ static bool retrieve_link_cap(struct dc_link *link)
+ dpcd_data[DP_TRAINING_AUX_RD_INTERVAL];
+
+ if (aux_rd_interval.bits.EXT_RECIEVER_CAP_FIELD_PRESENT == 1) {
+- core_link_read_dpcd(
++ uint8_t ext_cap_data[16];
++
++ memset(ext_cap_data, '\0', sizeof(ext_cap_data));
++ for (i = 0; i < read_dpcd_retry_cnt; i++) {
++ status = core_link_read_dpcd(
+ link,
+ DP_DP13_DPCD_REV,
+- dpcd_data,
+- sizeof(dpcd_data));
++ ext_cap_data,
++ sizeof(ext_cap_data));
++ if (status == DC_OK) {
++ memcpy(dpcd_data, ext_cap_data, sizeof(dpcd_data));
++ break;
++ }
++ }
++ if (status != DC_OK)
++ dm_error("%s: Read extend caps data failed, use cap from dpcd 0.\n", __func__);
+ }
+ }
+
+--
+2.17.1
+