Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1450641ybl; Fri, 13 Dec 2019 15:48:25 -0800 (PST) X-Google-Smtp-Source: APXvYqyOVwCT4qhso45l7c2M7o9U2rGOVnwrNK70C8uYfx6kblzPlcD3jNAc9bCYEhfbT68rWo9H X-Received: by 2002:a05:6830:1c90:: with SMTP id v16mr11048342otf.259.1576280905064; Fri, 13 Dec 2019 15:48:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576280905; cv=none; d=google.com; s=arc-20160816; b=hjOB0NBvKg6Debo8Y2NyS2XQ0IdQdxmaP/1jC4Hr2JEmxhgEzWIoATULMH4hLdFNyT nVVFuM5JgM6pzsA86RDMNEkkbMRODjD3NbP7KwfomboGoFQlScAh6Xz8+FahFOrZItFN xlMeIOVdTkYWYsHV/WSfUI/3H44AQ8QgmBZudbP6ix6cQlS1npxdhGQsoR0/w9xzjnDp LEJoPGx929WLMAc0XSpMUc16XLscOz7XUvGnHop0lGDP8Znhwr1H69JdCXj0LolfgFJ6 OcxJQmLXvoE7IRjXDbh5sCmdER0X961Z+hrCcNPk0wsvT+zRhiQCNyxs4q57vo9b80f+ iGIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=cA4UDUHuCTqvlIh454k1CuQ9LBQaRg6FJ8cZd003K1c=; b=rsrLQpNuYO59DXYWAlvXK9pEkFJdXE0T9IGknksFrTw0zS9oz6E7xoKuISuI/wXuw4 2VYu94lgUDqNlzwnxscnOWXoKMLsaKX0lsljbVCy78EdugY8IYRzlwl4yPZvhVA/M/vu 78Am99AD2CddVkGHWhZrYLgnAoBez4MTLbgTAHaxMO9TcxclOFDPVthnW5U0SlWBYvSZ I+Pra5KAlk8kTzqXfpqsuWdEexR/k++efxmR+jJLJj0m0xvl1Z+lvN/9qhnMuy0cnscp ydZpKYzZiW0UpgsGLAjtW5KoQ8clMl+LQUEE4YEq1iFHKYc2wuf0+/mZO4om5aqQfMzu zcTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=F6arw4C7; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h28si7008261otg.63.2019.12.13.15.48.13; Fri, 13 Dec 2019 15:48:25 -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; dkim=pass header.i=@chromium.org header.s=google header.b=F6arw4C7; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726940AbfLMXqY (ORCPT + 99 others); Fri, 13 Dec 2019 18:46:24 -0500 Received: from mail-pf1-f193.google.com ([209.85.210.193]:35400 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726855AbfLMXqM (ORCPT ); Fri, 13 Dec 2019 18:46:12 -0500 Received: by mail-pf1-f193.google.com with SMTP id b19so2300139pfo.2 for ; Fri, 13 Dec 2019 15:46:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cA4UDUHuCTqvlIh454k1CuQ9LBQaRg6FJ8cZd003K1c=; b=F6arw4C77gsnO3MMZuHtdQgaIV/tPDc/9xs0Znpn4zcamJF2EiYYwM5SXXX2RsSfuE e9ArJWGHwqypnETr+1RR9JJD+hpKmoraaTH7+w7y7h9RaBPlrMwoSUhLrOWJq43A75T1 YxoGhGHLaC29Halx1mNtG/A8Ea3eSPKLP/0CI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cA4UDUHuCTqvlIh454k1CuQ9LBQaRg6FJ8cZd003K1c=; b=KPKnaHFSh2Z/Zw63hhKpX4jLrHk3nEdz7YD5Y+RHhg+4wiiMNC8vNJbM1rGuNeopAB llqIXVTVhIkzvxbkYLReLGsDK6HyIbvhlOHSPKLrn7G7opg/vC3188kP/VB1ijHa58r6 J6k97RKu3GQhUrX/L7ALPOnuNYe8Ajmtd6aQTXQ0NSyb74IuTSU1HEW09qeSPzaSQqVL XkZYPjG3RTCGZm8WZl9vxgPOCBA6Kotbxw8C5NJ5+FFybCdufhM1BHnUtDYZrFbjqqLO Vqx/ARiTzqbbzqgiXI6Ubp81BfMRWHnXZ+YYASNawHHt60MajJ1zC5jructVw91oPof+ Z4HA== X-Gm-Message-State: APjAAAU6H4m0okzZuSSGNFqvL059vOcqSl2prjd2pcGt0aeQVh3LNMzL KRT0oL3we3i+1v96fZMYPtoNdg== X-Received: by 2002:a63:5407:: with SMTP id i7mr2453004pgb.330.1576280772173; Fri, 13 Dec 2019 15:46:12 -0800 (PST) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:1:24fa:e766:52c9:e3b2]) by smtp.gmail.com with ESMTPSA id z19sm12282905pfn.49.2019.12.13.15.46.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Dec 2019 15:46:11 -0800 (PST) From: Douglas Anderson To: Andrzej Hajda , Neil Armstrong Cc: robdclark@chromium.org, linux-arm-msm@vger.kernel.org, seanpaul@chromium.org, bjorn.andersson@linaro.org, Douglas Anderson , Jonas Karlman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, David Airlie , Jernej Skrabec , Laurent Pinchart , Daniel Vetter Subject: [PATCH 7/9] drm/bridge: ti-sn65dsi86: Group DP link training bits in a function Date: Fri, 13 Dec 2019 15:45:28 -0800 Message-Id: <20191213154448.7.I1fc75ad11db9048ef08cfe1ab7322753d9a219c7@changeid> X-Mailer: git-send-email 2.24.1.735.g03f4e72817-goog In-Reply-To: <20191213234530.145963-1-dianders@chromium.org> References: <20191213234530.145963-1-dianders@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We'll re-organize the ti_sn_bridge_enable() function a bit to group together all the parts relating to link training and split them into a sub-function. This is not intended to have any functional change and is in preparation for trying link training several times at different rates. One small side effect here is that if link training fails we'll now leave the DP PLL disabled, but that seems like a sane thing to do. Signed-off-by: Douglas Anderson --- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 86 ++++++++++++++++----------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index d5990a0947b9..48fb4dc72e1c 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -530,6 +530,46 @@ static unsigned int ti_sn_get_max_lanes(struct ti_sn_bridge *pdata) return data & DP_LANE_COUNT_MASK; } +static int ti_sn_link_training(struct ti_sn_bridge *pdata) +{ + unsigned int val; + int ret; + + /* set dp clk frequency value */ + ti_sn_bridge_set_dp_rate(pdata); + + /* enable DP PLL */ + regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1); + + ret = regmap_read_poll_timeout(pdata->regmap, SN_DPPLL_SRC_REG, val, + val & DPPLL_SRC_DP_PLL_LOCK, 1000, + 50 * 1000); + if (ret) { + DRM_ERROR("DP_PLL_LOCK polling failed (%d)\n", ret); + goto exit; + } + + /* Semi auto link training mode */ + regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0x0A); + ret = regmap_read_poll_timeout(pdata->regmap, SN_ML_TX_MODE_REG, val, + val == ML_TX_MAIN_LINK_OFF || + val == ML_TX_NORMAL_MODE, 1000, + 500 * 1000); + if (ret) { + DRM_ERROR("Training complete polling failed (%d)\n", ret); + } else if (val == ML_TX_MAIN_LINK_OFF) { + DRM_ERROR("Link training failed, link is off\n"); + ret = -EIO; + } + +exit: + /* Disable the PLL if we failed */ + if (ret) + regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0); + + return ret; +} + static void ti_sn_bridge_enable(struct drm_bridge *bridge) { struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); @@ -555,29 +595,8 @@ static void ti_sn_bridge_enable(struct drm_bridge *bridge) regmap_update_bits(pdata->regmap, SN_DSI_LANES_REG, CHA_DSI_LANES_MASK, val); - /* Set the DP output format (18 bpp or 24 bpp) */ - val = (ti_sn_bridge_get_bpp(pdata) == 18) ? BPP_18_RGB : 0; - regmap_update_bits(pdata->regmap, SN_DATA_FORMAT_REG, BPP_18_RGB, val); - - /* DP lane config */ - val = DP_NUM_LANES(min(pdata->dp_lanes, 3)); - regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK, - val); - - /* set dsi/dp clk frequency value */ + /* set dsi clk frequency value */ ti_sn_bridge_set_dsi_rate(pdata); - ti_sn_bridge_set_dp_rate(pdata); - - /* enable DP PLL */ - regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1); - - ret = regmap_read_poll_timeout(pdata->regmap, SN_DPPLL_SRC_REG, val, - val & DPPLL_SRC_DP_PLL_LOCK, 1000, - 50 * 1000); - if (ret) { - DRM_ERROR("DP_PLL_LOCK polling failed (%d)\n", ret); - return; - } /** * The SN65DSI86 only supports ASSR Display Authentication method and @@ -588,19 +607,18 @@ static void ti_sn_bridge_enable(struct drm_bridge *bridge) drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET, DP_ALTERNATE_SCRAMBLER_RESET_ENABLE); - /* Semi auto link training mode */ - regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0x0A); - ret = regmap_read_poll_timeout(pdata->regmap, SN_ML_TX_MODE_REG, val, - val == ML_TX_MAIN_LINK_OFF || - val == ML_TX_NORMAL_MODE, 1000, - 500 * 1000); - if (ret) { - DRM_ERROR("Training complete polling failed (%d)\n", ret); - return; - } else if (val == ML_TX_MAIN_LINK_OFF) { - DRM_ERROR("Link training failed, link is off\n"); + /* Set the DP output format (18 bpp or 24 bpp) */ + val = (ti_sn_bridge_get_bpp(pdata) == 18) ? BPP_18_RGB : 0; + regmap_update_bits(pdata->regmap, SN_DATA_FORMAT_REG, BPP_18_RGB, val); + + /* DP lane config */ + val = DP_NUM_LANES(min(pdata->dp_lanes, 3)); + regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK, + val); + + ret = ti_sn_link_training(pdata); + if (ret) return; - } /* config video parameters */ ti_sn_bridge_set_video_timings(pdata); -- 2.24.1.735.g03f4e72817-goog