lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 693/779] drm/dp/mst: Read the extended DPCD capabilities during system resume
    Date
    From: Imre Deak <imre.deak@intel.com>

    [ Upstream commit 7a710a8bc909313951eb9252d8419924c771d7c2 ]

    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 <lyude@redhat.com>
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/5292
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Cc: <stable@vger.kernel.org> # v5.14+
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220614094537.885472-1-imre.deak@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/drm_dp_mst_topology.c | 7 ++-----
    1 file changed, 2 insertions(+), 5 deletions(-)

    diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
    index b3e3babe18c0..2a586e6489da 100644
    --- a/drivers/gpu/drm/drm_dp_mst_topology.c
    +++ b/drivers/gpu/drm/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;
    }
    @@ -4894,8 +4892,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.35.1


    \
     
     \ /
      Last update: 2022-08-15 21:50    [W:4.071 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site