From: Andrey Grodzovsky <[email protected]>

Keep 1:1 relation between MST sink and it's MST connector.

Change-Id: Iff663ecfe738886b2f96400a1798e7533eb64378
Signed-off-by: Andrey Grodzovsky <[email protected]>
Reviewed-by: Tony Cheng <[email protected]>
Reviewed-by: Harry Wentland <[email protected]>
---
 .../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

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to