aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch
new file mode 100644
index 00000000..ded35e4a
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3925-drm-amd-display-Don-t-read-EDID-in-atomic_check.patch
@@ -0,0 +1,98 @@
+From e304b0a7cc2dd06070cdbd99c3efc3f85daca477 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Thu, 8 Mar 2018 22:05:35 -0500
+Subject: [PATCH 3925/4131] drm/amd/display: Don't read EDID in atomic_check
+
+We shouldn't attempt to read EDID in atomic_check. We really shouldn't
+even be modifying the connector object, or any other non-state object,
+but this is a start at least.
+
+Moving EDID cleanup to dm_dp_mst_connector_destroy from
+dm_dp_destroy_mst_connector to ensure the EDID is still available for
+headless mode.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 32 +++++++---------------
+ 1 file changed, 10 insertions(+), 22 deletions(-)
+
+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 8467541..850c5d7 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
+@@ -160,6 +160,11 @@ dm_dp_mst_connector_destroy(struct drm_connector *connector)
+ struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
+ struct amdgpu_encoder *amdgpu_encoder = amdgpu_dm_connector->mst_encoder;
+
++ if (amdgpu_dm_connector->edid) {
++ kfree(amdgpu_dm_connector->edid);
++ amdgpu_dm_connector->edid = NULL;
++ }
++
+ drm_encoder_cleanup(&amdgpu_encoder->base);
+ kfree(amdgpu_encoder);
+ drm_connector_cleanup(connector);
+@@ -191,28 +196,22 @@ static int dm_connector_update_modes(struct drm_connector *connector,
+ void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
+ {
+ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+- struct edid *edid;
+ 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;
+
+- edid = drm_dp_mst_get_edid(connector, &aconnector->mst_port->mst_mgr, aconnector->port);
+-
+- if (!edid) {
+- drm_mode_connector_update_edid_property(
+- &aconnector->base,
+- NULL);
+- return;
+- }
+-
+- aconnector->edid = edid;
++ ASSERT(aconnector->edid);
+
+ dc_sink = dc_link_add_remote_sink(
+ aconnector->dc_link,
+@@ -225,9 +224,6 @@ void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
+
+ amdgpu_dm_add_sink_to_freesync_module(
+ connector, aconnector->edid);
+-
+- drm_mode_connector_update_edid_property(
+- &aconnector->base, aconnector->edid);
+ }
+
+ static int dm_dp_mst_get_modes(struct drm_connector *connector)
+@@ -434,14 +430,6 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
+ dc_sink_release(aconnector->dc_sink);
+ aconnector->dc_sink = NULL;
+ }
+- if (aconnector->edid) {
+- kfree(aconnector->edid);
+- aconnector->edid = NULL;
+- }
+-
+- drm_mode_connector_update_edid_property(
+- &aconnector->base,
+- NULL);
+
+ aconnector->mst_connected = false;
+ }
+--
+2.7.4
+