|
@@ -2121,6 +2121,8 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr)
|
|
|
|
|
|
if (mgr->mst_primary) {
|
|
|
int sret;
|
|
|
+ u8 guid[16];
|
|
|
+
|
|
|
sret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, mgr->dpcd, DP_RECEIVER_CAP_SIZE);
|
|
|
if (sret != DP_RECEIVER_CAP_SIZE) {
|
|
|
DRM_DEBUG_KMS("dpcd read failed - undocked during suspend?\n");
|
|
@@ -2135,6 +2137,16 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr)
|
|
|
ret = -1;
|
|
|
goto out_unlock;
|
|
|
}
|
|
|
+
|
|
|
+ /* Some hubs forget their guids after they resume */
|
|
|
+ sret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
|
|
|
+ if (sret != 16) {
|
|
|
+ DRM_DEBUG_KMS("dpcd read failed - undocked during suspend?\n");
|
|
|
+ ret = -1;
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+ drm_dp_check_mstb_guid(mgr->mst_primary, guid);
|
|
|
+
|
|
|
ret = 0;
|
|
|
} else
|
|
|
ret = -1;
|