diff options
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-.patch | 90 |
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 + |