aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch
new file mode 100644
index 00000000..c8e1defc
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4538-drm-amd-display-Read-DP_SINK_COUNT_ESI-range-on-HPD-.patch
@@ -0,0 +1,90 @@
+From 10b0f3a5fb46eb514cfe7391024fb01ff48c31d3 Mon Sep 17 00:00:00 2001
+From: Nikola Cornij <nikola.cornij@amd.com>
+Date: Wed, 9 May 2018 13:11:35 -0400
+Subject: [PATCH 4538/5725] drm/amd/display: Read DP_SINK_COUNT_ESI range on
+ HPD for DP 1.4
+
+DP 1.4 compliance now requires that registers at DP_SINK_COUNT_ESI range
+(0x2002-0x2003, 0x200c-0x200f) are read instead of DP_SINK_COUNT range
+(0x200-0x2005.
+
+Signed-off-by: Nikola Cornij <nikola.cornij@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 35 ++++++++++++++++++++----
+ include/drm/drm_dp_helper.h | 5 ++++
+ 2 files changed, 35 insertions(+), 5 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 0acc14f..9b66634 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
+@@ -1630,17 +1630,42 @@ static enum dc_status read_hpd_rx_irq_data(
+ struct dc_link *link,
+ union hpd_irq_data *irq_data)
+ {
++ static enum dc_status retval;
++
+ /* The HW reads 16 bytes from 200h on HPD,
+ * but if we get an AUX_DEFER, the HW cannot retry
+ * and this causes the CTS tests 4.3.2.1 - 3.2.4 to
+ * fail, so we now explicitly read 6 bytes which is
+ * the req from the above mentioned test cases.
++ *
++ * For DP 1.4 we need to read those from 2002h range.
+ */
+- return core_link_read_dpcd(
+- link,
+- DP_SINK_COUNT,
+- irq_data->raw,
+- sizeof(union hpd_irq_data));
++ if (link->dpcd_caps.dpcd_rev.raw < DPCD_REV_14)
++ retval = core_link_read_dpcd(
++ link,
++ DP_SINK_COUNT,
++ irq_data->raw,
++ sizeof(union hpd_irq_data));
++ else {
++ /* Read 2 bytes at this location,... */
++ retval = core_link_read_dpcd(
++ link,
++ DP_SINK_COUNT_ESI,
++ irq_data->raw,
++ 2);
++
++ if (retval != DC_OK)
++ return retval;
++
++ /* ... then read remaining 4 at the other location */
++ retval = core_link_read_dpcd(
++ link,
++ DP_LANE0_1_STATUS_ESI,
++ &irq_data->raw[2],
++ 4);
++ }
++
++ return retval;
+ }
+
+ static bool allow_hpd_rx_irq(const struct dc_link *link)
+diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
+index 9a84c32..fb0db0f 100644
+--- a/include/drm/drm_dp_helper.h
++++ b/include/drm/drm_dp_helper.h
+@@ -756,6 +756,11 @@
+ #define DP_RECEIVER_ALPM_STATUS 0x200b /* eDP 1.4 */
+ # define DP_ALPM_LOCK_TIMEOUT_ERROR (1 << 0)
+
++#define DP_LANE0_1_STATUS_ESI 0x200c /* status same as 0x202 */
++#define DP_LANE2_3_STATUS_ESI 0x200d /* status same as 0x203 */
++#define DP_LANE_ALIGN_STATUS_UPDATED_ESI 0x200e /* status same as 0x204 */
++#define DP_SINK_STATUS_ESI 0x200f /* status same as 0x205 */
++
+ #define DP_DP13_DPCD_REV 0x2200
+ #define DP_DP13_MAX_LINK_RATE 0x2201
+
+--
+2.7.4
+