From patchwork Fri Apr 10 16:12:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Todd Previte X-Patchwork-Id: 6197981 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id AA9E69F2EC for ; Fri, 10 Apr 2015 16:13:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3D214203E3 for ; Fri, 10 Apr 2015 16:13:14 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 5824C2034F for ; Fri, 10 Apr 2015 16:13:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B353D6E9C6; Fri, 10 Apr 2015 09:13:12 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-pd0-f169.google.com (mail-pd0-f169.google.com [209.85.192.169]) by gabe.freedesktop.org (Postfix) with ESMTP id DA18B6E9C0; Fri, 10 Apr 2015 09:13:11 -0700 (PDT) Received: by pddn5 with SMTP id n5so27056677pdd.2; Fri, 10 Apr 2015 09:13:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FphHzyeQr5YsNmn5u9BISIVOkgfem4AP2pDRsZRcO2Q=; b=RqlBdV8q6UT9MgipXgyus/8HBMKNxWE+SI+1WoSBO0Ut/h79/VhgmwOEcZumo8bh6l MIIBV3DNHysshcA5ouNreQesdrQK/E9ewmrTk6cZj4b3tkge5Sf9RpqQ0hyYDI+cBwwl Wd9Vz3aX3CVoJjrhOzVY/FJkmpzPujhaPJg5+FhPthUVY8cl8HrJEpWdau5+pucz+SK6 JNues7zdTBa+dfvkHZ8EaaG4nWmtsY8XRnJ0OIdo5CiLTZoiULo2lr3tpK0K1gc1gke7 Fzdi0WP57th5aCDDSBY8uOYuyAVR/jtdujzMCRq9LNN41/SS2ao9YOR1RI2kGKx820h9 cYWQ== X-Received: by 10.70.62.97 with SMTP id x1mr3877498pdr.41.1428682391717; Fri, 10 Apr 2015 09:13:11 -0700 (PDT) Received: from localhost.localdomain (ip70-162-72-208.ph.ph.cox.net. [70.162.72.208]) by mx.google.com with ESMTPSA id dk3sm2682849pbb.91.2015.04.10.09.13.10 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 10 Apr 2015 09:13:10 -0700 (PDT) From: Todd Previte To: intel-gfx@lists.freedesktop.org Subject: [PATCH 09/11] drm/i915: Fix for DP CTS test 4.2.2.5 - I2C DEFER handling Date: Fri, 10 Apr 2015 09:12:50 -0700 Message-Id: <1428682372-21586-10-git-send-email-tprevite@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1428682372-21586-1-git-send-email-tprevite@gmail.com> References: <1428682372-21586-1-git-send-email-tprevite@gmail.com> Cc: dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP For test 4.2.2.5 to pass per the Link CTS Core 1.2 rev1.1 spec, the source device must attempt at least 7 times to read the EDID when it receives an I2C defer. The normal DRM code makes only 7 retries, regardless of whether or not the response is a native defer or an I2C defer. Test 4.2.2.5 fails since there are native defers interspersed with the I2C defers which results in less than 7 EDID read attempts. The solution is to decrement the retry counter when an I2C DEFER is returned such that another read attempt will be made. This situation should normally only occur in compliance testing, however, as a worse case real-world scenario, it would result in 13 attempts ( 6 native defers, 7 I2C defers) for a single transaction to complete. The net result is a slightly slower response to an EDID read that shouldn't significantly impact overall performance. V2: - Added a check on the number of I2C Defers to limit the number of times that the retries variable will be decremented. This is to address review feedback regarding possible infinite loops from misbehaving sink devices. V3: - Fixed the limit value to 7 instead of 8 to get the correct retry count. - Combined the increment of the defer count into the if-statement Signed-off-by: Todd Previte Cc: dri-devel@lists.freedesktop.org --- drivers/gpu/drm/drm_dp_helper.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 79968e3..9ecfd27 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -468,7 +468,12 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) case DP_AUX_I2C_REPLY_DEFER: DRM_DEBUG_KMS("I2C defer\n"); - aux->i2c_defer_count++; + /* DP Compliance Test 4.2.2.5 Requirement: + * Must have at least 7 retries for I2C defers on the + * transaction to pass this test + */ + if (++aux->i2c_defer_count < 7) + retry = 0; usleep_range(400, 500); continue;