aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch
new file mode 100644
index 00000000..9ea22e04
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4907-drm-amd-display-Serialize-is_dp_sink_present.patch
@@ -0,0 +1,103 @@
+From 2568a1debc878028f531ab57094dbce565d3771f Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Tue, 29 May 2018 13:11:55 -0400
+Subject: [PATCH 4907/5725] drm/amd/display: Serialize is_dp_sink_present
+
+Access to GPIO needs to be serialized. Aux transactions are already
+serialized in DRM but we also need to serialize access to the GPIO pin
+for purposes of DP dongle detection.
+
+Call is_dp_sink_present through DM so we can lock correctly. This
+follows the same pattern used for DPCD transactions.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Reviewed-by: Jun Lei <Jun.Lei@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 16 ++++++++++++++++
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 4 ++--
+ drivers/gpu/drm/amd/display/dc/dc_link.h | 2 ++
+ drivers/gpu/drm/amd/display/dc/dm_helpers.h | 3 +++
+ 4 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+index dea49dc..0193bc5 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+@@ -454,6 +454,22 @@ bool dm_helpers_submit_i2c(
+ return result;
+ }
+
++bool dm_helpers_is_dp_sink_present(struct dc_link *link)
++{
++ bool dp_sink_present;
++ struct amdgpu_dm_connector *aconnector = link->priv;
++
++ if (!aconnector) {
++ BUG_ON("Failed to found connector for link!");
++ return true;
++ }
++
++ mutex_lock(&aconnector->dm_dp_aux.aux.hw_mutex);
++ dp_sink_present = dc_link_is_dp_sink_present(link);
++ mutex_unlock(&aconnector->dm_dp_aux.aux.hw_mutex);
++ return dp_sink_present;
++}
++
+ enum dc_edid_status dm_helpers_read_local_edid(
+ struct dc_context *ctx,
+ struct dc_link *link,
+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 9d5ccb6..f058620 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -313,7 +313,7 @@ static enum signal_type get_basic_signal_type(
+ * @brief
+ * Check whether there is a dongle on DP connector
+ */
+-static bool is_dp_sink_present(struct dc_link *link)
++bool dc_link_is_dp_sink_present(struct dc_link *link)
+ {
+ enum gpio_result gpio_result;
+ uint32_t clock_pin = 0;
+@@ -406,7 +406,7 @@ static enum signal_type link_detect_sink(
+ * we assume signal is DVI; it could be corrected
+ * to HDMI after dongle detection
+ */
+- if (!is_dp_sink_present(link))
++ if (!dm_helpers_is_dp_sink_present(link))
+ result = SIGNAL_TYPE_DVI_SINGLE_LINK;
+ }
+ }
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_link.h b/drivers/gpu/drm/amd/display/dc/dc_link.h
+index db92387..795a8f0 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_link.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_link.h
+@@ -210,6 +210,8 @@ bool dc_link_dp_set_test_pattern(
+
+ void dc_link_enable_hpd_filter(struct dc_link *link, bool enable);
+
++bool dc_link_is_dp_sink_present(struct dc_link *link);
++
+ bool dc_link_detect_sink(struct dc_link *link, enum dc_connection_type *type);
+
+ /*
+diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/amd/display/dc/dm_helpers.h
+index 034369f..7e6b9f5 100644
+--- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h
++++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h
+@@ -103,6 +103,9 @@ bool dm_helpers_submit_i2c(
+ const struct dc_link *link,
+ struct i2c_command *cmd);
+
++bool dm_helpers_is_dp_sink_present(
++ struct dc_link *link);
++
+ enum dc_edid_status dm_helpers_read_local_edid(
+ struct dc_context *ctx,
+ struct dc_link *link,
+--
+2.7.4
+