aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch
new file mode 100644
index 00000000..707dd9d7
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2085-drm-amd-display-Do-not-grant-POST_LT_ADJ-when-TPS4-i.patch
@@ -0,0 +1,107 @@
+From a21875d2826b59710f4803d1f32abdd80fc7eac7 Mon Sep 17 00:00:00 2001
+From: abdoulaye berthe <abdoulaye.berthe@amd.com>
+Date: Mon, 27 May 2019 11:38:26 -0400
+Subject: [PATCH 2085/2940] drm/amd/display: Do not grant POST_LT_ADJ when TPS4
+ is used
+
+[Description]
+
+The spec does not allow POST_LT_ADJ_GRANTED to be set when TPS4 is used.
+
+Signed-off-by: abdoulaye berthe <abdoulaye.berthe@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+---
+ .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 56 ++++++++++---------
+ 1 file changed, 31 insertions(+), 25 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 2d519e5fc3ea..a1187274dbed 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
+@@ -89,6 +89,29 @@ static void dpcd_set_training_pattern(
+ dpcd_pattern.v1_4.TRAINING_PATTERN_SET);
+ }
+
++static enum hw_dp_training_pattern get_supported_tp(struct dc_link *link)
++{
++ enum hw_dp_training_pattern highest_tp = HW_DP_TRAINING_PATTERN_2;
++ struct encoder_feature_support *features = &link->link_enc->features;
++ struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
++
++ if (features->flags.bits.IS_TPS3_CAPABLE)
++ highest_tp = HW_DP_TRAINING_PATTERN_3;
++
++ if (features->flags.bits.IS_TPS4_CAPABLE)
++ highest_tp = HW_DP_TRAINING_PATTERN_4;
++
++ if (dpcd_caps->max_down_spread.bits.TPS4_SUPPORTED &&
++ highest_tp >= HW_DP_TRAINING_PATTERN_4)
++ return HW_DP_TRAINING_PATTERN_4;
++
++ if (dpcd_caps->max_ln_count.bits.TPS3_SUPPORTED &&
++ highest_tp >= HW_DP_TRAINING_PATTERN_3)
++ return HW_DP_TRAINING_PATTERN_3;
++
++ return HW_DP_TRAINING_PATTERN_2;
++}
++
+ static void dpcd_set_link_settings(
+ struct dc_link *link,
+ const struct link_training_settings *lt_settings)
+@@ -97,6 +120,7 @@ static void dpcd_set_link_settings(
+
+ union down_spread_ctrl downspread = { {0} };
+ union lane_count_set lane_count_set = { {0} };
++ enum hw_dp_training_pattern hw_tr_pattern;
+
+ downspread.raw = (uint8_t)
+ (lt_settings->link_settings.link_spread);
+@@ -106,8 +130,13 @@ static void dpcd_set_link_settings(
+
+ lane_count_set.bits.ENHANCED_FRAMING = 1;
+
+- lane_count_set.bits.POST_LT_ADJ_REQ_GRANTED =
+- link->dpcd_caps.max_ln_count.bits.POST_LT_ADJ_REQ_SUPPORTED;
++ lane_count_set.bits.POST_LT_ADJ_REQ_GRANTED = 0;
++
++ hw_tr_pattern = get_supported_tp(link);
++ if (hw_tr_pattern != HW_DP_TRAINING_PATTERN_4) {
++ lane_count_set.bits.POST_LT_ADJ_REQ_GRANTED =
++ link->dpcd_caps.max_ln_count.bits.POST_LT_ADJ_REQ_SUPPORTED;
++ }
+
+ core_link_write_dpcd(link, DP_DOWNSPREAD_CTRL,
+ &downspread.raw, sizeof(downspread));
+@@ -698,29 +727,6 @@ static bool perform_post_lt_adj_req_sequence(
+
+ }
+
+-static enum hw_dp_training_pattern get_supported_tp(struct dc_link *link)
+-{
+- enum hw_dp_training_pattern highest_tp = HW_DP_TRAINING_PATTERN_2;
+- struct encoder_feature_support *features = &link->link_enc->features;
+- struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
+-
+- if (features->flags.bits.IS_TPS3_CAPABLE)
+- highest_tp = HW_DP_TRAINING_PATTERN_3;
+-
+- if (features->flags.bits.IS_TPS4_CAPABLE)
+- highest_tp = HW_DP_TRAINING_PATTERN_4;
+-
+- if (dpcd_caps->max_down_spread.bits.TPS4_SUPPORTED &&
+- highest_tp >= HW_DP_TRAINING_PATTERN_4)
+- return HW_DP_TRAINING_PATTERN_4;
+-
+- if (dpcd_caps->max_ln_count.bits.TPS3_SUPPORTED &&
+- highest_tp >= HW_DP_TRAINING_PATTERN_3)
+- return HW_DP_TRAINING_PATTERN_3;
+-
+- return HW_DP_TRAINING_PATTERN_2;
+-}
+-
+ static enum link_training_result get_cr_failure(enum dc_lane_count ln_count,
+ union lane_status *dpcd_lane_status)
+ {
+--
+2.17.1
+