From: Andrey Grodzovsky <Andrey.Grodzovsky@xxxxxxx> Keep 1:1 relation between MST sink and it's MST connector. Change-Id: Iff663ecfe738886b2f96400a1798e7533eb64378 Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com> Reviewed-by: Tony Cheng <Tony.Cheng at amd.com> Reviewed-by: Harry Wentland <Harry.Wentland at amd.com> --- .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 27 +++------------------- .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 7 +++++- drivers/gpu/drm/amd/display/dc/dc.h | 1 + 3 files changed, 10 insertions(+), 25 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 961d8d13d725..5d45c0fe3643 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 @@ -133,21 +133,6 @@ enum dc_edid_status dm_helpers_parse_edid_caps( return result; } -static struct amdgpu_connector *get_connector_for_sink( - struct drm_device *dev, - const struct dc_sink *sink) -{ - struct drm_connector *connector; - - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { - struct amdgpu_connector *aconnector = to_amdgpu_connector(connector); - if (aconnector->dc_sink == sink) - return aconnector; - } - - return NULL; -} - static void get_payload_table( struct amdgpu_connector *aconnector, struct dp_mst_stream_allocation_table *proposed_table) @@ -194,8 +179,6 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( struct dp_mst_stream_allocation_table *proposed_table, bool enable) { - struct amdgpu_device *adev = ctx->driver_context; - struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_port *mst_port; @@ -205,7 +188,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( int bpp = 0; int pbn = 0; - aconnector = get_connector_for_sink(dev, stream->sink); + aconnector = stream->sink->priv; if (!aconnector || !aconnector->mst_port) return false; @@ -283,13 +266,11 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger( struct dc_context *ctx, const struct dc_stream *stream) { - struct amdgpu_device *adev = ctx->driver_context; - struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; struct drm_dp_mst_topology_mgr *mst_mgr; int ret; - aconnector = get_connector_for_sink(dev, stream->sink); + aconnector = stream->sink->priv; if (!aconnector || !aconnector->mst_port) return false; @@ -312,14 +293,12 @@ bool dm_helpers_dp_mst_send_payload_allocation( const struct dc_stream *stream, bool enable) { - struct amdgpu_device *adev = ctx->driver_context; - struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_port *mst_port; int ret; - aconnector = get_connector_for_sink(dev, stream->sink); + aconnector = stream->sink->priv; if (!aconnector || !aconnector->mst_port) return false; 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 937558d1d7f4..91b3610a3654 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 @@ -327,6 +327,7 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) struct drm_connector *connector; struct amdgpu_connector *aconnector; struct edid *edid; + struct dc_sink *dc_sink; drm_modeset_lock_all(dev); list_for_each_entry(connector, &dev->mode_config.connector_list, head) { @@ -354,11 +355,15 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) aconnector->edid = edid; - aconnector->dc_sink = dc_link_add_remote_sink( + dc_sink = dc_link_add_remote_sink( aconnector->dc_link, (uint8_t *)edid, (edid->extensions + 1) * EDID_LENGTH, &init_params); + + dc_sink->priv = aconnector; + aconnector->dc_sink = dc_sink; + if (aconnector->dc_sink) amdgpu_dm_add_sink_to_freesync_module( connector, diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index 6bb6ad23b31b..d2960552c78e 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -719,6 +719,7 @@ struct dc_sink { struct dc_container_id *dc_container_id; uint32_t dongle_max_pix_clk; bool converter_disable_audio; + void *priv; }; void dc_sink_retain(const struct dc_sink *sink); -- 2.11.0