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)
                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;
        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;
                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;
                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;
 
        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) {
 
                                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,