From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759813AbcDMO7g (ORCPT ); Wed, 13 Apr 2016 10:59:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49773 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754526AbcDMO7L (ORCPT ); Wed, 13 Apr 2016 10:59:11 -0400 From: Lyude To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Jani Nikula , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Cc: Lyude , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v5 3/4] drm/dp_helper: Perform throw-away read before actual read in drm_dp_dpcd_read() Date: Wed, 13 Apr 2016 10:58:32 -0400 Message-Id: <1460559513-32280-4-git-send-email-cpaul@redhat.com> In-Reply-To: <1460559513-32280-1-git-send-email-cpaul@redhat.com> References: <87d1pvt9ka.fsf@intel.com> <1460559513-32280-1-git-send-email-cpaul@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is part of a patch series to migrate all of the workarounds for commonly seen behavior from bad sinks in intel_dp_dpcd_read_wake() to drm's DP helper. Some sinks will just return garbage for the first aux tranaction they receive when coming out of sleep mode, so we need to perform an additional read before the actual read to workaround this. Changes since v5 - If the throwaway read in drm_dp_dpcd_read() fails, return the error from that instead of continuing. This follows the same logic we do in drm_dp_dpcd_access() (e.g. the error from the first transaction may differ from the errors that proceeding attempts might return). Signed-off-by: Lyude --- drivers/gpu/drm/drm_dp_helper.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 540c3e4..aa80702 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -248,6 +248,18 @@ unlock: ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, void *buffer, size_t size) { + int ret; + + /* + * Sometimes we just get the same incorrect byte repeated over the + * entire buffer. Doing one throw away read initially seems to "solve" + * it. + */ + ret = drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, DP_DPCD_REV, buffer, + 1); + if (ret != 1) + return ret; + return drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, offset, buffer, size); } -- 2.5.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [PATCH v5 3/4] drm/dp_helper: Perform throw-away read before actual read in drm_dp_dpcd_read() Date: Wed, 13 Apr 2016 10:58:32 -0400 Message-ID: <1460559513-32280-4-git-send-email-cpaul@redhat.com> References: <87d1pvt9ka.fsf@intel.com> <1460559513-32280-1-git-send-email-cpaul@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460559513-32280-1-git-send-email-cpaul@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Jani Nikula , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Cc: David Airlie , open list List-Id: dri-devel@lists.freedesktop.org VGhpcyBpcyBwYXJ0IG9mIGEgcGF0Y2ggc2VyaWVzIHRvIG1pZ3JhdGUgYWxsIG9mIHRoZSB3b3Jr YXJvdW5kcyBmb3IKY29tbW9ubHkgc2VlbiBiZWhhdmlvciBmcm9tIGJhZCBzaW5rcyBpbiBpbnRl bF9kcF9kcGNkX3JlYWRfd2FrZSgpIHRvIGRybSdzCkRQIGhlbHBlci4KClNvbWUgc2lua3Mgd2ls bCBqdXN0IHJldHVybiBnYXJiYWdlIGZvciB0aGUgZmlyc3QgYXV4IHRyYW5hY3Rpb24gdGhleQpy ZWNlaXZlIHdoZW4gY29taW5nIG91dCBvZiBzbGVlcCBtb2RlLCBzbyB3ZSBuZWVkIHRvIHBlcmZv cm0gYW4gYWRkaXRpb25hbApyZWFkIGJlZm9yZSB0aGUgYWN0dWFsIHJlYWQgdG8gd29ya2Fyb3Vu ZCB0aGlzLgoKCQkJICAgIENoYW5nZXMgc2luY2UgdjUKLSBJZiB0aGUgdGhyb3dhd2F5IHJlYWQg aW4gZHJtX2RwX2RwY2RfcmVhZCgpIGZhaWxzLCByZXR1cm4gdGhlIGVycm9yCiAgZnJvbSB0aGF0 IGluc3RlYWQgb2YgY29udGludWluZy4gVGhpcyBmb2xsb3dzIHRoZSBzYW1lIGxvZ2ljIHdlIGRv IGluCiAgZHJtX2RwX2RwY2RfYWNjZXNzKCkgKGUuZy4gdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0 IHRyYW5zYWN0aW9uIG1heQogIGRpZmZlciBmcm9tIHRoZSBlcnJvcnMgdGhhdCBwcm9jZWVkaW5n IGF0dGVtcHRzIG1pZ2h0IHJldHVybikuCgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSA8Y3BhdWxAcmVk aGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIHwgMTIgKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hl bHBlci5jCmluZGV4IDU0MGMzZTQuLmFhODA3MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwpA QCAtMjQ4LDYgKzI0OCwxOCBAQCB1bmxvY2s6CiBzc2l6ZV90IGRybV9kcF9kcGNkX3JlYWQoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCwgdW5zaWduZWQgaW50IG9mZnNldCwKIAkJCSB2b2lkICpidWZm ZXIsIHNpemVfdCBzaXplKQogeworCWludCByZXQ7CisKKwkvKgorCSAqIFNvbWV0aW1lcyB3ZSBq dXN0IGdldCB0aGUgc2FtZSBpbmNvcnJlY3QgYnl0ZSByZXBlYXRlZCBvdmVyIHRoZQorCSAqIGVu dGlyZSBidWZmZXIuIERvaW5nIG9uZSB0aHJvdyBhd2F5IHJlYWQgaW5pdGlhbGx5IHNlZW1zIHRv ICJzb2x2ZSIKKwkgKiBpdC4KKwkgKi8KKwlyZXQgPSBkcm1fZHBfZHBjZF9hY2Nlc3MoYXV4LCBE UF9BVVhfTkFUSVZFX1JFQUQsIERQX0RQQ0RfUkVWLCBidWZmZXIsCisJCQkJIDEpOworCWlmIChy ZXQgIT0gMSkKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiBkcm1fZHBfZHBjZF9hY2Nlc3MoYXV4 LCBEUF9BVVhfTkFUSVZFX1JFQUQsIG9mZnNldCwgYnVmZmVyLAogCQkJCSAgc2l6ZSk7CiB9Ci0t IAoyLjUuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==