Received: by 10.223.176.5 with SMTP id f5csp353892wra; Tue, 30 Jan 2018 12:36:31 -0800 (PST) X-Google-Smtp-Source: AH8x2249HDhi2zuQ0RgiWh1OvI9PsB13xHzDQbQ+3nW0DF7hZ9p1ZMRKXeoBFY57BwYbhgf8K0Jf X-Received: by 10.98.68.129 with SMTP id m1mr23171567pfi.171.1517344591755; Tue, 30 Jan 2018 12:36:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517344591; cv=none; d=google.com; s=arc-20160816; b=iDS68MEUmKzuBIlmiRwwfVrKVzXBMbN2kznHrTlrN/fQEwUbZOsmBHKVEtN12Zfj+r g0VcOy1mu7UZSkH1VKeAvLCNUzeiYNMAWQTQ2aE102rHT45XvlA/L8wt9Y4iXdQfgfSD +ctATSz3sgTtqkQJ/tZjC9DxhIlFRKoC0ONfwl1wdzdEh3s1DbRgUbDh1mwaEKGXKmT/ lD93kiIU7rd0pD6HrlACxN0IegsDSKqE5gCVKcXex6vwWSCO6xGeALRuZSeIIZxIgT5h pt5QSeM4APM8/+PMQLq3ckPsg0vKWdSfMsb45Xo3GF0EwR6xk8l8YNQtDRmcVBwpnWYr tkQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfert-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=dhue6ZQFKDOn1qquErpKp59RVEGfXQWOsHbSBmCzTjc=; b=edTyOK1i/fu2y7mQ4rPXe2l7O9JlP9Z0V14SZzY2Ufn4SRclDsxYmuUGuF2NS3wWPe Y03+tkRbg+vt+HPJLChyljxRyGJQxWdYEB+lKQdhdX0Rf3temPbkVXhIX+yAtLL/iWut uytoLvrIIwYX25IEiAo2C6zOVC7usdfTxR3QSo5yPBV4Q4i13mHuMaT5ZLH2Sh3MyK3p DDEQ4F8YjUNjsGNaQ7Iz+1Kl9hl8xUREHYIaEjGp8DMtfgIMM032YT3ljxg3o4q+T8CF DaXvfWYm6POkH0pin7O8jhucPVpb7lW8L8Q7RuzLZpH81+wW4gfPCTF/Z6wtPKR7J2e8 pMqg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bb11-v6si576394plb.554.2018.01.30.12.36.16; Tue, 30 Jan 2018 12:36:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753206AbeA3UeM (ORCPT + 99 others); Tue, 30 Jan 2018 15:34:12 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:56344 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752620AbeA3U3w (ORCPT ); Tue, 30 Jan 2018 15:29:52 -0500 Received: from localhost.localdomain (unknown [IPv6:2a01:e35:8a7e:4790:1865:5d14:35de:d167]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tescande) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 152E6274153; Tue, 30 Jan 2018 20:29:51 +0000 (GMT) From: Thierry Escande To: Archit Taneja , Inki Dae , Thierry Reding , Sandy Huang , Sean Paul , David Airlie , Tomasz Figa , Enric Balletbo i Serra Cc: Haixia Shi , =?UTF-8?q?=C3=98rjan=20Eide?= , Zain Wang , Yakir Yang , Lin Huang , Douglas Anderson , Mark Yao , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 29/43] drm/bridge: analogix_dp: Move fast link training detect to set_bridge Date: Tue, 30 Jan 2018 21:28:59 +0100 Message-Id: <20180130202913.28724-30-thierry.escande@collabora.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180130202913.28724-1-thierry.escande@collabora.com> References: <20180130202913.28724-1-thierry.escande@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset = "utf-8" Content-Transfert-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: zain wang It's too early to detect fast link training, if other step after it failed, we will set fast_link flag to 1, and retry set_bridge again. In this case we will power down and power up panel power supply, and we will do fast link training since we have set fast_link flag to 1. In fact, we should do full link training now, not the fast link training. So we should move the fast link detection at the end of set_bridge. Cc: Tomasz Figa Signed-off-by: zain wang Signed-off-by: Douglas Anderson Signed-off-by: Sean Paul Signed-off-by: Thierry Escande Reviewed-by: Andrzej Hajda --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 42 +++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index a64f0c3e795c..f82e2a3d13bf 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -601,7 +601,7 @@ static int analogix_dp_process_equalizer_training(struct analogix_dp_device *dp) { int lane, lane_count, retval; u32 reg; - u8 link_align, link_status[2], adjust_request[2], spread; + u8 link_align, link_status[2], adjust_request[2]; usleep_range(400, 401); @@ -645,20 +645,6 @@ static int analogix_dp_process_equalizer_training(struct analogix_dp_device *dp) dev_dbg(dp->dev, "final lane count = %.2x\n", dp->link_train.lane_count); - retval = drm_dp_dpcd_readb(&dp->aux, DP_MAX_DOWNSPREAD, - &spread); - if (retval != 1) { - dev_err(dp->dev, "failed to read downspread %d\n", - retval); - dp->fast_train_enable = false; - } else { - dp->fast_train_enable = - (spread & DP_NO_AUX_HANDSHAKE_LINK_TRAINING) ? - true : false; - } - dev_dbg(dp->dev, "fast link training %s\n", - dp->fast_train_enable ? "supported" : "unsupported"); - dp->link_train.lt_state = FINISHED; return 0; @@ -1003,6 +989,22 @@ static irqreturn_t analogix_dp_irq_thread(int irq, void *arg) return IRQ_HANDLED; } +static int analogix_dp_fast_link_train_detection(struct analogix_dp_device *dp) +{ + int ret; + u8 spread; + + ret = drm_dp_dpcd_readb(&dp->aux, DP_MAX_DOWNSPREAD, &spread); + if (ret != 1) { + dev_err(dp->dev, "failed to read downspread %d\n", ret); + return ret; + } + dp->fast_train_enable = !!(spread & DP_NO_AUX_HANDSHAKE_LINK_TRAINING); + dev_dbg(dp->dev, "fast link training %s\n", + dp->fast_train_enable ? "supported" : "unsupported"); + return 0; +} + static int analogix_dp_commit(struct analogix_dp_device *dp) { int ret; @@ -1045,8 +1047,16 @@ static int analogix_dp_commit(struct analogix_dp_device *dp) if (ret) return ret; - if (dp->psr_enable) + if (dp->psr_enable) { ret = analogix_dp_enable_sink_psr(dp); + if (ret) + return ret; + } + + /* Check whether panel supports fast training */ + ret = analogix_dp_fast_link_train_detection(dp); + if (ret) + dp->psr_enable = false; return ret; } -- 2.14.1