diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1025-drm-amd-dal-Remove-registration-of-Poll-for-connecto.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1025-drm-amd-dal-Remove-registration-of-Poll-for-connecto.patch | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1025-drm-amd-dal-Remove-registration-of-Poll-for-connecto.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1025-drm-amd-dal-Remove-registration-of-Poll-for-connecto.patch new file mode 100644 index 00000000..c3f50514 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1025-drm-amd-dal-Remove-registration-of-Poll-for-connecto.patch @@ -0,0 +1,147 @@ +From 1e76242282ff50c0e2c2fb548248b9e8ce7782d5 Mon Sep 17 00:00:00 2001 +From: David Rokhvarg <David.Rokhvarg@amd.com> +Date: Tue, 22 Dec 2015 17:57:28 -0500 +Subject: [PATCH 1025/1050] drm/amd/dal: Remove registration of Poll for + connector. + +Our display detection is interrupt-driven, no need to register for +Poll from DRM. + +Also this results in: +- less notifications from kernel to user mode about hpd events. +- less contention on MST state is triggered from user-mode. + +Change-Id: I35ce7d0cdc9edce850a41b92f55751d65c03e01f +Signed-off-by: David Rokhvarg <David.Rokhvarg@amd.com> +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c | 29 +++++++++++++++++++--- + drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 7 ++---- + .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 20 +++++---------- + 3 files changed, 34 insertions(+), 22 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c +index 0a05774..e856f0c 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dc_helpers.c +@@ -471,6 +471,30 @@ void dc_helpers_dp_mst_handle_mst_hpd_rx_irq(void *param) + } + } + ++/* Depending on Root connector state, update MST state of all connectors ++ * belonging to it. */ ++static void set_mst_topology_state(struct drm_device *dev) ++{ ++ struct drm_connector *connector; ++ struct amdgpu_connector *aconnector = NULL; ++ ++ mutex_lock(&dev->mode_config.mutex); ++ ++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { ++ mutex_unlock(&dev->mode_config.mutex); ++ ++ aconnector = to_amdgpu_connector(connector); ++ ++ if (aconnector->is_mst_connector) ++ drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, ++ aconnector->is_mst_connector); ++ ++ mutex_lock(&dev->mode_config.mutex); ++ } ++ ++ mutex_unlock(&dev->mode_config.mutex); ++} ++ + bool dc_helpers_dp_mst_start_top_mgr( + struct dc_context *ctx, + const struct dc_link *link) +@@ -480,7 +504,7 @@ bool dc_helpers_dp_mst_start_top_mgr( + struct amdgpu_connector *aconnector = get_connector_for_link(dev, link); + + aconnector->is_mst_connector = true; +- ++ set_mst_topology_state(dev); + return true; + } + +@@ -492,9 +516,8 @@ void dc_helpers_dp_mst_stop_top_mgr( + struct drm_device *dev = adev->ddev; + struct amdgpu_connector *aconnector = get_connector_for_link(dev, link); + +- drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, false); +- + aconnector->is_mst_connector = false; ++ set_mst_topology_state(dev); + } + + bool dc_helper_dp_read_dpcd( +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +index 404ce0c..59f968c 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +@@ -793,7 +793,7 @@ static void handle_hpd_irq(void *param) + + dc_link_detect(aconnector->dc_link); + amdgpu_dm_update_connector_after_detect(aconnector); +- drm_helper_hpd_irq_event(dev); ++ drm_kms_helper_hotplug_event(dev); + } + + static void handle_hpd_rx_irq(void *param) +@@ -807,7 +807,7 @@ static void handle_hpd_rx_irq(void *param) + /* Downstream Port status changed. */ + dc_link_detect(aconnector->dc_link); + amdgpu_dm_update_connector_after_detect(aconnector); +- drm_helper_hpd_irq_event(dev); ++ drm_kms_helper_hotplug_event(dev); + } + + if (aconnector->is_mst_connector) { +@@ -930,9 +930,6 @@ static int dce110_register_irq_handlers(struct amdgpu_device *adev) + + register_hpd_handlers(adev); + +- /* This is a part of HPD initialization. */ +- drm_kms_helper_poll_init(adev->ddev); +- + return 0; + } + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c +index 8040b49..22d60d3 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c +@@ -991,23 +991,15 @@ static enum drm_connector_status + amdgpu_dm_connector_detect(struct drm_connector *connector, bool force) + { + bool connected; +- struct amdgpu_connector *aconnector = +- to_amdgpu_connector(connector); +- +- /* +- * TODO: check whether we should lock here for mst_mgr.lock +- */ +- /* set root connector to disconnected */ +- if (aconnector->is_mst_connector) { +- if (!aconnector->mst_mgr.mst_state) +- drm_dp_mst_topology_mgr_set_mst( +- &aconnector->mst_mgr, +- true); ++ struct amdgpu_connector *aconnector = to_amdgpu_connector(connector); + +- return connector_status_disconnected; +- } ++ /* Notes: ++ * 1. This interface is NOT called in context of HPD irq. ++ * 2. This interface *is called* in context of user-mode ioctl. Which ++ * makes it a bad place for *any* MST-related activit. */ + + connected = (NULL != aconnector->dc_sink); ++ + return (connected ? connector_status_connected : + connector_status_disconnected); + } +-- +1.9.1 + |