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