From 2fdd468ba1083379c60a917fd60ed2d328534540 Mon Sep 17 00:00:00 2001 From: Justin M. Forbes Date: Apr 28 2020 15:25:56 +0000 Subject: Fix drm_dp_send_dpcd_write() return code --- diff --git a/drm-dp_mst-Fix-drm_dp_send_dpcd_write-return-code.patch b/drm-dp_mst-Fix-drm_dp_send_dpcd_write-return-code.patch new file mode 100644 index 0000000..d5b7f00 --- /dev/null +++ b/drm-dp_mst-Fix-drm_dp_send_dpcd_write-return-code.patch @@ -0,0 +1,47 @@ +From: Lyude Paul +Date: Fri, 24 Apr 2020 15:07:22 -0400 +Subject: drm/dp_mst: Fix drm_dp_send_dpcd_write() return code + +drm_dp_mst_wait_tx_reply() returns > 1 if time elapsed in +wait_event_timeout() before check_txmsg_state(mgr, txmsg) evaluated to +true. However, we make the mistake of returning this time from +drm_dp_send_dpcd_write() on success instead of returning the number of +bytes written - causing spontaneous failures during link probing: + +[drm:drm_dp_send_link_address [drm_kms_helper]] *ERROR* GUID check on +10:01 failed: 3975 + +Yikes! So, fix this by returning the number of bytes written on success +instead. + +Signed-off-by: Lyude Paul +Fixes: cb897542c6d2 ("drm/dp_mst: Fix W=1 warnings") +Cc: Benjamin Gaignard +Cc: Sean Paul +Acked-by: Alex Deucher +Reviewed-by: Sean Paul +Link: https://patchwork.freedesktop.org/patch/msgid/20200424190722.775284-1-lyude@redhat.com +--- + drivers/gpu/drm/drm_dp_mst_topology.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + + +diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c +index 03a1496f6120..21dc78cb4ba6 100644 +--- a/drivers/gpu/drm/drm_dp_mst_topology.c ++++ b/drivers/gpu/drm/drm_dp_mst_topology.c +@@ -3436,8 +3436,12 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr, + drm_dp_queue_down_tx(mgr, txmsg); + + ret = drm_dp_mst_wait_tx_reply(mstb, txmsg); +- if (ret > 0 && txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) +- ret = -EIO; ++ if (ret > 0) { ++ if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) ++ ret = -EIO; ++ else ++ ret = size; ++ } + + kfree(txmsg); + fail_put: diff --git a/kernel.spec b/kernel.spec index 4e6dc43..8e52721 100644 --- a/kernel.spec +++ b/kernel.spec @@ -896,6 +896,8 @@ Patch509: drm-i915-backports.patch # https://patchwork.ozlabs.org/patch/1260523/ Patch511: e1000e-bump-up-timeout-to-wait-when-ME-un-configure-ULP-mode.patch +Patch512: drm-dp_mst-Fix-drm_dp_send_dpcd_write-return-code.patch + # END OF PATCH DEFINITIONS %endif @@ -2925,6 +2927,9 @@ fi # # %changelog +* Tue Apr 28 2020 Justin M. Forbes +- MST Fix from Lyude Paul + * Thu Apr 23 2020 Justin M. Forbes - 5.6.7-200 - Linux v5.6.7