From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753219AbcDMUud (ORCPT ); Wed, 13 Apr 2016 16:50:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56143 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753161AbcDMUuc (ORCPT ); Wed, 13 Apr 2016 16:50:32 -0400 From: Lyude To: dri-devel@lists.freedesktop.org Cc: Lyude , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] drm/dp/mst: Restore primary hub guid on resume Date: Wed, 13 Apr 2016 16:50:18 -0400 Message-Id: <1460580618-7421-1-git-send-email-cpaul@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some hubs are forgetful, and end up forgetting whatever GUID we set previously after we do a suspend/resume cycle. This can lead to hotplugging breaking (along with probably other things) since the hub will start sending connection notifications with the wrong GUID. As such, we need to check on resume whether or not the GUID the hub is giving us is valid. Signed-off-by: Lyude Signed-off-by: Dave Airlie --- drivers/gpu/drm/drm_dp_mst_topology.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 27fbd79..d2efd78 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -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; -- 2.5.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH] drm/dp/mst: Restore primary hub guid on resume Date: Wed, 13 Apr 2016 16:50:18 -0400 Message-ID: <1460580618-7421-1-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B1346E9A9 for ; Wed, 13 Apr 2016 20:50:32 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Lyude , open list List-Id: dri-devel@lists.freedesktop.org U29tZSBodWJzIGFyZSBmb3JnZXRmdWwsIGFuZCBlbmQgdXAgZm9yZ2V0dGluZyB3aGF0ZXZlciBH VUlEIHdlIHNldApwcmV2aW91c2x5IGFmdGVyIHdlIGRvIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUu IFRoaXMgY2FuIGxlYWQgdG8KaG90cGx1Z2dpbmcgYnJlYWtpbmcgKGFsb25nIHdpdGggcHJvYmFi bHkgb3RoZXIgdGhpbmdzKSBzaW5jZSB0aGUgaHViCndpbGwgc3RhcnQgc2VuZGluZyBjb25uZWN0 aW9uIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgd3JvbmcgR1VJRC4gQXMKc3VjaCwgd2UgbmVlZCB0 byBjaGVjayBvbiByZXN1bWUgd2hldGhlciBvciBub3QgdGhlIEdVSUQgdGhlIGh1YiBpcwpnaXZp bmcgdXMgaXMgdmFsaWQuCgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSA8Y3BhdWxAcmVkaGF0LmNvbT4K U2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMTIgKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3Bv bG9neS5jCmluZGV4IDI3ZmJkNzkuLmQyZWZkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3Rf dG9wb2xvZ3kuYwpAQCAtMjEyMSw2ICsyMTIxLDggQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikKIAogCWlmICht Z3ItPm1zdF9wcmltYXJ5KSB7CiAJCWludCBzcmV0OworCQl1OCBndWlkWzE2XTsKKwogCQlzcmV0 ID0gZHJtX2RwX2RwY2RfcmVhZChtZ3ItPmF1eCwgRFBfRFBDRF9SRVYsIG1nci0+ZHBjZCwgRFBf UkVDRUlWRVJfQ0FQX1NJWkUpOwogCQlpZiAoc3JldCAhPSBEUF9SRUNFSVZFUl9DQVBfU0laRSkg ewogCQkJRFJNX0RFQlVHX0tNUygiZHBjZCByZWFkIGZhaWxlZCAtIHVuZG9ja2VkIGR1cmluZyBz dXNwZW5kP1xuIik7CkBAIC0yMTM1LDYgKzIxMzcsMTYgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikKIAkJCXJl dCA9IC0xOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisKKwkJLyogU29tZSBodWJzIGZvcmdl dCB0aGVpciBndWlkcyBhZnRlciB0aGV5IHJlc3VtZSAqLworCQlzcmV0ID0gZHJtX2RwX2RwY2Rf cmVhZChtZ3ItPmF1eCwgRFBfR1VJRCwgZ3VpZCwgMTYpOworCQlpZiAoc3JldCAhPSAxNikgewor CQkJRFJNX0RFQlVHX0tNUygiZHBjZCByZWFkIGZhaWxlZCAtIHVuZG9ja2VkIGR1cmluZyBzdXNw ZW5kP1xuIik7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQlkcm1f ZHBfY2hlY2tfbXN0Yl9ndWlkKG1nci0+bXN0X3ByaW1hcnksIGd1aWQpOworCiAJCXJldCA9IDA7 CiAJfSBlbHNlCiAJCXJldCA9IC0xOwotLSAKMi41LjUKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=