]> Git Repo - J-linux.git/blobdiff - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
Merge tag 'sched-urgent-2022-08-06' of git://git.kernel.org/pub/scm/linux/kernel...
[J-linux.git] / drivers / gpu / drm / amd / display / amdgpu_dm / amdgpu_dm_helpers.c
index 7c799ddc1d27857414c84e781288bf85259d1336..a0154a5f718327f4812f5b4d8ddd96426401731e 100644 (file)
@@ -312,6 +312,8 @@ bool dm_helpers_dp_mst_send_payload_allocation(
        struct amdgpu_dm_connector *aconnector;
        struct drm_dp_mst_topology_mgr *mst_mgr;
        struct drm_dp_mst_port *mst_port;
+       enum mst_progress_status set_flag = MST_ALLOCATE_NEW_PAYLOAD;
+       enum mst_progress_status clr_flag = MST_CLEAR_ALLOCATED_PAYLOAD;
 
        aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;
 
@@ -325,8 +327,20 @@ bool dm_helpers_dp_mst_send_payload_allocation(
        if (!mst_mgr->mst_state)
                return false;
 
-       /* It's OK for this to fail */
-       drm_dp_update_payload_part2(mst_mgr);
+       if (!enable) {
+               set_flag = MST_CLEAR_ALLOCATED_PAYLOAD;
+               clr_flag = MST_ALLOCATE_NEW_PAYLOAD;
+       }
+
+       if (drm_dp_update_payload_part2(mst_mgr)) {
+               amdgpu_dm_set_mst_status(&aconnector->mst_status,
+                       set_flag, false);
+       } else {
+               amdgpu_dm_set_mst_status(&aconnector->mst_status,
+                       set_flag, true);
+               amdgpu_dm_set_mst_status(&aconnector->mst_status,
+                       clr_flag, false);
+       }
 
        if (!enable)
                drm_dp_mst_deallocate_vcpi(mst_mgr, mst_port);
@@ -451,7 +465,6 @@ bool dm_helpers_dp_mst_stop_top_mgr(
                struct dc_link *link)
 {
        struct amdgpu_dm_connector *aconnector = link->priv;
-       uint8_t i;
 
        if (!aconnector) {
                DRM_ERROR("Failed to find connector for link!");
@@ -463,22 +476,7 @@ bool dm_helpers_dp_mst_stop_top_mgr(
 
        if (aconnector->mst_mgr.mst_state == true) {
                drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, false);
-
-               for (i = 0; i < MAX_SINKS_PER_LINK; i++) {
-                       if (link->remote_sinks[i] == NULL)
-                               continue;
-
-                       if (link->remote_sinks[i]->sink_signal ==
-                           SIGNAL_TYPE_DISPLAY_PORT_MST) {
-                               dc_link_remove_remote_sink(link, link->remote_sinks[i]);
-
-                               if (aconnector->dc_sink) {
-                                       dc_sink_release(aconnector->dc_sink);
-                                       aconnector->dc_sink = NULL;
-                                       aconnector->dc_link->cur_link_settings.lane_count = 0;
-                               }
-                       }
-               }
+               link->cur_link_settings.lane_count = 0;
        }
 
        return false;
@@ -571,7 +569,7 @@ static bool execute_synaptics_rc_command(struct drm_dp_aux *aux,
        unsigned char rc_cmd = 0;
        unsigned char rc_result = 0xFF;
        unsigned char i = 0;
-       uint8_t ret = 0;
+       int ret;
 
        if (is_write_cmd) {
                // write rc data
This page took 0.029591 seconds and 4 git commands to generate.