aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch
new file mode 100644
index 00000000..948a172e
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3059-drm-amd-display-Set-FEC_READY-always-before-link-tra.patch
@@ -0,0 +1,109 @@
+From 874da5622bc0da927a23a2a80cbecd9ccd7ff771 Mon Sep 17 00:00:00 2001
+From: Nikola Cornij <nikola.cornij@amd.com>
+Date: Mon, 24 Jun 2019 15:44:42 -0400
+Subject: [PATCH 3059/4256] drm/amd/display: Set FEC_READY always before link
+ training
+
+[why]
+Right now we FEC_READY is set only before the final link training,
+i.e. at mode set time. This means FEC_READY won't be set when doing
+link training as a response to HPD. It also fails UCD400 FEC test in
+DP compliance.
+
+[how]
+Move FEC_READY setup to link training.
+
+Signed-off-by: Nikola Cornij <nikola.cornij@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Abdoulaye Berthe <Abdoulaye.Berthe@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 14 +++++---------
+ .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 18 +++++++++++++++---
+ 2 files changed, 20 insertions(+), 12 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 64a8586a8476..e2f86fd07790 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -1521,15 +1521,6 @@ static enum dc_status enable_link_dp(
+ if (link_settings.link_rate == LINK_RATE_LOW)
+ skip_video_pattern = false;
+
+-#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
+- if (link->preferred_training_settings.fec_enable != NULL)
+- fec_enable = *link->preferred_training_settings.fec_enable;
+- else
+- fec_enable = true;
+-
+- dp_set_fec_ready(link, fec_enable);
+-#endif
+-
+ if (link->aux_access_disabled) {
+ dc_link_dp_perform_link_training_skip_aux(link, &link_settings);
+
+@@ -1547,6 +1538,11 @@ static enum dc_status enable_link_dp(
+ status = DC_FAIL_DP_LINK_TRAINING;
+
+ #ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
++ if (link->preferred_training_settings.fec_enable != NULL)
++ fec_enable = *link->preferred_training_settings.fec_enable;
++ else
++ fec_enable = true;
++
+ dp_set_fec_enable(link, fec_enable);
+ #endif
+ return status;
+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 4442e7b1e5b5..5c8e3318239c 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
+@@ -1179,14 +1179,26 @@ enum link_training_result dc_link_dp_perform_link_training(
+ bool skip_video_pattern)
+ {
+ enum link_training_result status = LINK_TRAINING_SUCCESS;
+-
+ struct link_training_settings lt_settings;
++#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
++ bool fec_enable;
++#endif
+
+ initialize_training_settings(link, link_setting, &lt_settings);
+
+ /* 1. set link rate, lane count and spread. */
+ dpcd_set_link_settings(link, &lt_settings);
+
++#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
++ if (link->preferred_training_settings.fec_enable != NULL)
++ fec_enable = *link->preferred_training_settings.fec_enable;
++ else
++ fec_enable = true;
++
++ dp_set_fec_ready(link, fec_enable);
++#endif
++
++
+ /* 2. perform link training (set link training done
+ * to false is done as well)
+ */
+@@ -3153,7 +3165,7 @@ void dp_set_fec_ready(struct dc_link *link, bool ready)
+
+ if (link_enc->funcs->fec_set_ready &&
+ link->dpcd_caps.fec_cap.bits.FEC_CAPABLE) {
+- if (link->fec_state == dc_link_fec_not_ready && ready) {
++ if (ready) {
+ fec_config = 1;
+ if (core_link_write_dpcd(link,
+ DP_FEC_CONFIGURATION,
+@@ -3164,7 +3176,7 @@ void dp_set_fec_ready(struct dc_link *link, bool ready)
+ } else {
+ dm_error("dpcd write failed to set fec_ready");
+ }
+- } else if (link->fec_state == dc_link_fec_ready && !ready) {
++ } else if (link->fec_state == dc_link_fec_ready) {
+ fec_config = 0;
+ core_link_write_dpcd(link,
+ DP_FEC_CONFIGURATION,
+--
+2.17.1
+