aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch108
1 files changed, 108 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch
new file mode 100644
index 00000000..cfdf508d
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0775-drm-amd-display-Cleanup-MST-non-atomic-code-workarou.patch
@@ -0,0 +1,108 @@
+From 400a2feb19cb99c7641f57e7adb5d0d4fc36bd24 Mon Sep 17 00:00:00 2001
+From: "Jerry (Fangzhi) Zuo" <Jerry.Zuo@amd.com>
+Date: Tue, 30 Oct 2018 14:28:49 -0400
+Subject: [PATCH 0775/2940] drm/amd/display: Cleanup MST non-atomic code
+ workaround
+
+[why]
+It is not correct to touch aconnector within atomic_check.
+
+[How]
+It was added as workaround before, and no longer needed.
+
+Signed-off-by: Jerry (Fangzhi) Zuo <Jerry.Zuo@amd.com>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Reviewed-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 +++-----
+ .../display/amdgpu_dm/amdgpu_dm_mst_types.c | 34 -------------------
+ .../display/amdgpu_dm/amdgpu_dm_mst_types.h | 1 -
+ 3 files changed, 4 insertions(+), 46 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index fe169553e884..8cfb90110dd6 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -2782,18 +2782,11 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ drm_connector = &aconnector->base;
+
+ if (!aconnector->dc_sink) {
+- /*
+- * Create dc_sink when necessary to MST
+- * Don't apply fake_sink to MST
+- */
+- if (aconnector->mst_port) {
+- dm_dp_mst_dc_sink_create(drm_connector);
+- return stream;
++ if (!aconnector->mst_port) {
++ sink = create_fake_sink(aconnector);
++ if (!sink)
++ return stream;
+ }
+-
+- sink = create_fake_sink(aconnector);
+- if (!sink)
+- return stream;
+ } else {
+ sink = aconnector->dc_sink;
+ }
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+index a4bc29f83c4b..0cca1809fdcd 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+@@ -205,40 +205,6 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
+ .atomic_get_property = amdgpu_dm_connector_atomic_get_property
+ };
+
+-void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
+-{
+- struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+- struct dc_sink *dc_sink;
+- struct dc_sink_init_data init_params = {
+- .link = aconnector->dc_link,
+- .sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST };
+-
+- /* FIXME none of this is safe. we shouldn't touch aconnector here in
+- * atomic_check
+- */
+-
+- /*
+- * TODO: Need to further figure out why ddc.algo is NULL while MST port exists
+- */
+- if (!aconnector->port || !aconnector->port->aux.ddc.algo)
+- return;
+-
+- ASSERT(aconnector->edid);
+-
+- dc_sink = dc_link_add_remote_sink(
+- aconnector->dc_link,
+- (uint8_t *)aconnector->edid,
+- (aconnector->edid->extensions + 1) * EDID_LENGTH,
+- &init_params);
+-
+- dc_sink->priv = aconnector;
+- aconnector->dc_sink = dc_sink;
+-
+- if (aconnector->dc_sink)
+- amdgpu_dm_update_freesync_caps(
+- connector, aconnector->edid);
+-}
+-
+ static int dm_dp_mst_get_modes(struct drm_connector *connector)
+ {
+ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
+index 8cf51da26657..2da851b40042 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
+@@ -31,6 +31,5 @@ struct amdgpu_dm_connector;
+
+ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
+ struct amdgpu_dm_connector *aconnector);
+-void dm_dp_mst_dc_sink_create(struct drm_connector *connector);
+
+ #endif
+--
+2.17.1
+