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