Received: by 10.223.185.116 with SMTP id b49csp3113546wrg; Mon, 5 Mar 2018 14:28:37 -0800 (PST) X-Google-Smtp-Source: AG47ELufFIYJb48x+ZtttC/ulqE6jmBAWi2X2xjFmxLo3JyCs6HqQvBPnDdHizE15i6Kmn1rbPMx X-Received: by 2002:a17:902:7046:: with SMTP id h6-v6mr13970682plt.301.1520288916929; Mon, 05 Mar 2018 14:28:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520288916; cv=none; d=google.com; s=arc-20160816; b=fcdCeL9zZyOpliOElNlb7C0yiTZY7XzOUMVVJtPM3hL1WMqx/yCxT+iBCZsXnge737 JOLl0cqLZKp55WvucgHiRpG559m8JKr/6L7UiHgNOa5kN0JayXKk0ccNEyyBrPq4D1KD Vexf7Kn/vTUKlaHEVxzqzzdv2FBSbVh0b1fMMAdaffvG4KI97ot3cwtszq3kBYjXJ5Nl N5f4SyFC/e8EM8bejhecQqmF8rmGN6yPCql49r/kXZ+cl321SOccoyGf+bIj8DoCqxr8 aTy+G6rZyPFepO1/j1azLIkv1f5c1/D1fQg/dHlLdzqUzni8e9yhycUO8fFvN7NO5M+t JiQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=l0NOnU8wszNquq+F84oFk0FK1wTAUSx/C6gBa1IgCsk=; b=ne+YWgC9xPlk3M+c3moUtR80v9eLvDku6eU3j5yekXk6pmvL2HIlHSfCL+s0RZ6LgX BAKG2pztawH5zWJloKotVzbQ78wNvedCe4mDgf7FbxaeFONVCQpAt9vsixO7kdR6MSqn RjOLyINHYlY/CsOgvZQOivGfiCfZIdAK1t/i7P3j4EWtObofV4SwlPw/l3IiM1FQeN79 NhyaTE1LcHPABCMgQS9Yxl9+oSuiiazyi1hSVVcJJ75L8YBh7Zc0dmG4oOib5TBzdfRd arxvy2KtsDI/RSFDKrtPTM81VEWt1sSj4CXR4xs6MtPLyQhoMLlqlSJZymayfloJmhEY Mkug== 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 bd8-v6si1012364plb.288.2018.03.05.14.28.23; Mon, 05 Mar 2018 14:28:36 -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 S1753578AbeCEWYs (ORCPT + 99 others); Mon, 5 Mar 2018 17:24:48 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37668 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753492AbeCEWYn (ORCPT ); Mon, 5 Mar 2018 17:24:43 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 701D6273340 From: Enric Balletbo i Serra To: architt@codeaurora.org, inki.dae@samsung.com, thierry.reding@gmail.com, hjc@rock-chips.com, seanpaul@chromium.org, airlied@linux.ie, tfiga@chromium.org, heiko@sntech.de Cc: hshi@chromium.org, wzz@rock-chips.com, hl@rock-chips.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, dianders@chromium.org, linux-rockchip@lists.infradead.org, orjan.eide@arm.com, m.szyprowski@samsung.com, Enric Balletbo i Serra Subject: [PATCH v4 25/38] drm/bridge: analogix_dp: Move fast link training detect to set_bridge Date: Mon, 5 Mar 2018 23:23:17 +0100 Message-Id: <20180305222324.5872-26-enric.balletbo@collabora.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180305222324.5872-1-enric.balletbo@collabora.com> References: <20180305222324.5872-1-enric.balletbo@collabora.com> 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 Signed-off-by: Enric Balletbo i Serra --- 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 2493a580e655..e0f96ad4c700 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; @@ -996,6 +982,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; @@ -1038,8 +1040,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.16.1