Commit 3c6a743c authored by Wayne Lin's avatar Wayne Lin Committed by Alex Deucher
Browse files

drm/amd/display: Enable mst when it's detected but yet to be initialized



[Why]
drm_dp_mst_topology_queue_probe() is used under the assumption that
mst is already initialized. If we connect system with SST first
then switch to the mst branch during suspend, we will fail probing
topology by calling the wrong API since the mst manager is yet to
be initialized.

[How]
At dm_resume(), once it's detected as mst branc connected, check if
the mst is initialized already. If not, call
dm_helpers_dp_mst_start_top_mgr() instead to initialize mst

V2: Adjust the commit msg a bit

Fixes: bc068194 ("drm/amd/display: Don't write DP_MSTM_CTRL after LT")
Cc: Fangzhi Zuo <jerry.zuo@amd.com>
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarTom Chung <chiahsuan.chung@amd.com>
Signed-off-by: default avatarWayne Lin <Wayne.Lin@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 62320fb8)
Cc: stable@vger.kernel.org
parent 570a66b4
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -3563,6 +3563,7 @@ static int dm_resume(struct amdgpu_ip_block *ip_block)
	/* Do mst topology probing after resuming cached state*/
	drm_connector_list_iter_begin(ddev, &iter);
	drm_for_each_connector_iter(connector, &iter) {
		bool init = false;

		if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)
			continue;
@@ -3572,6 +3573,13 @@ static int dm_resume(struct amdgpu_ip_block *ip_block)
		    aconnector->mst_root)
			continue;

		scoped_guard(mutex, &aconnector->mst_mgr.lock) {
			init = !aconnector->mst_mgr.mst_primary;
		}
		if (init)
			dm_helpers_dp_mst_start_top_mgr(aconnector->dc_link->ctx,
				aconnector->dc_link, false);
		else
			drm_dp_mst_topology_queue_probe(&aconnector->mst_mgr);
	}
	drm_connector_list_iter_end(&iter);