The WD22TB4 Thunderbolt dock at least will revert its DP_MAX_LINK_RATE
from HBR3 to HBR2 after system suspend/resume if the DP_DP13_DPCD_REV
registers are not read subsequently also as required.

Fix this by reading DP_DP13_DPCD_REV registers as well, matching what is
done during connector detection. While at it also fix up the same call
in drm_dp_mst_dump_topology().

Cc: Lyude Paul <ly...@redhat.com>
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/5292
Signed-off-by: Imre Deak <imre.d...@intel.com>
---
 drivers/gpu/drm/display/drm_dp_mst_topology.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index 67b3b9697da7f..18f2b6075b780 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -3860,9 +3860,7 @@ int drm_dp_mst_topology_mgr_resume(struct 
drm_dp_mst_topology_mgr *mgr,
        if (!mgr->mst_primary)
                goto out_fail;
 
-       ret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, mgr->dpcd,
-                              DP_RECEIVER_CAP_SIZE);
-       if (ret != DP_RECEIVER_CAP_SIZE) {
+       if (drm_dp_read_dpcd_caps(mgr->aux, mgr->dpcd) < 0) {
                drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during 
suspend?\n");
                goto out_fail;
        }
@@ -4911,8 +4909,7 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
                u8 buf[DP_PAYLOAD_TABLE_SIZE];
                int ret;
 
-               ret = drm_dp_dpcd_read(mgr->aux, DP_DPCD_REV, buf, 
DP_RECEIVER_CAP_SIZE);
-               if (ret) {
+               if (drm_dp_read_dpcd_caps(mgr->aux, buf) < 0) {
                        seq_printf(m, "dpcd read failed\n");
                        goto out;
                }
-- 
2.30.2

Reply via email to