From patchwork Mon Oct 21 14:34:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202343 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A55E4112B for ; Mon, 21 Oct 2019 14:34:52 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8D22120640 for ; Mon, 21 Oct 2019 14:34:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8D22120640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F6686E11B; Mon, 21 Oct 2019 14:34:49 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id CD83E6E111 for ; Mon, 21 Oct 2019 14:34:45 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id i16so13606216wmd.3 for ; Mon, 21 Oct 2019 07:34:45 -0700 (PDT) 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=NaQbxwX1q2SG+oqlG4d0ur59jdppQEFsuKLrKODmKFA=; b=ULHpyUX5vn3pLDc3doKLexF/oKK76Os5XSIzGxC8hYDPEkl5aIFhBxYIv4YI0kVzyX 3HUzEUTS9JVrFSlPOBYHK7cZjSAejdSoteUyyCj40urbdzbE9fj5/hWXIhTf+viE7gkD RGjZi5V8yn8LCYlNEyMMBG+MepEweW+G1G6MSta/zuvpClB4NUXaJl1g04HjEtGkN+Wy xYotM71bteeVpIJZWLzqRkXqbbddcYmt9Jjn8dRYzFU2ldPAMs5U0O8DKlJzhiC3T/+x Yq9O1CkViMl16hZz7ytMtQwCETeFBiOsOVMHBJGtFvR5JV22O4oKjNYCCL6mkXyQNVJi OK5g== X-Gm-Message-State: APjAAAUFbCuPuZqaAU1BL/ObblP2YFlVRJdfFAC7LcF7ELdOfDcmMLYs izw4T2XtgBlos7MFZZvrzHYtpGQt X-Google-Smtp-Source: APXvYqzqh6QauJusnvhtQuEv3ffypURDrhwxWSwLYaqxYzSJi0TYjqRMOm5/gs7Sk+EIF+zYVIhbQA== X-Received: by 2002:a05:600c:1051:: with SMTP id 17mr6013007wmx.149.1571668483862; Mon, 21 Oct 2019 07:34:43 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id q124sm27892145wma.5.2019.10.21.07.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:42 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 01/13] drm/dp: Sort includes alphabetically Date: Mon, 21 Oct 2019 16:34:25 +0200 Message-Id: <20191021143437.1477719-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NaQbxwX1q2SG+oqlG4d0ur59jdppQEFsuKLrKODmKFA=; b=jbstdwCfJP6LtewryExcAl3fKFh6OYEMa/RFPH8Oa1a+zJEKZSXUsMHqxhY3BnABF1 QJWAc519GVJNO+jHloYhBQ8LEGdGXDTw3soe78Te/yF3szLrt7dx9E7IowbzgmuSa6L6 1X7c9eG7MYuWfT+ZurxOjTl5sm6tkYo5d7qj67CZj4djBbffBZwULjjr20lJuk3cG/oV M2Azler/aHVBpnQwoVnqAHkvtsLlFwfLELU8W7GiBoLh0wdkQ5pXdKbo4oGWzWWTPAfO ICnH6I8uxX3KVJjSHRhK8j3+kzXBCwMbdfeQs1d4OyT3YXYNfq/TDP495q6zey6urcDX vFkQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding Keeping the list sorted alphabetically makes it much easier to determine where to add new includes. Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- include/drm/drm_dp_helper.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index cfadeeef8492..e0e76f7634a9 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -23,9 +23,9 @@ #ifndef _DRM_DP_HELPER_H_ #define _DRM_DP_HELPER_H_ -#include -#include #include +#include +#include /* * Unless otherwise noted, all values are from the DP 1.1a spec. Note that From patchwork Mon Oct 21 14:34:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202341 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6DE3D112B for ; Mon, 21 Oct 2019 14:34:50 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5643920640 for ; Mon, 21 Oct 2019 14:34:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5643920640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A0F4C6E111; Mon, 21 Oct 2019 14:34:48 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id E811A6E111 for ; Mon, 21 Oct 2019 14:34:47 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id p4so14273082wrm.8 for ; Mon, 21 Oct 2019 07:34:47 -0700 (PDT) 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=op0Fm5qRWoebHt7vgXu8fI5ezBgXMcotXParKTZ7ztA=; b=HvIyMU1KFaaorw011TzJPntPXJFCtbGS0nP9ZlTorKdskZnu00ZvOwmLERt0bYYRx9 XPxk8EjVvOrVXEX7hI/ANjYY9pObl3H6QRmI6NDNgCKtORYsncvwLsud1PNbIME5nzhW niETyKytXC0nyBG3tq1GdShH+2WA2Rrgdk/sE8La75QiE9V5LRgyxJJg7m+O8XtNJHhs KYSDLUraZ5dSDa8T20MLpyLrud5dnBoA32vz3IB+wi9mGKNM4A+any8iYRAD//Gg05Ax 039L82r6SuTGG+E3TnuaexGS22nTkfcQ7KLcGb3AMr2rfL5XWOiQeKIAEnsSNOFE82Yt zYPQ== X-Gm-Message-State: APjAAAVF2ziCL6+ZmTL+FrIx1Avh2gezUMkC1GA71jeK1PW3DgfppvFM P1UM3I3fKfPyt8hFF5QORHIqCS91 X-Google-Smtp-Source: APXvYqwofj3WqPmwCIt30ZG2IZx4UFfPuf7Rs4nJz5JAUSfrunEvfjN/TAF1qhysYS4MpQ8Qq5xNXg== X-Received: by 2002:a05:6000:11cd:: with SMTP id i13mr19461330wrx.197.1571668486189; Mon, 21 Oct 2019 07:34:46 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id 200sm4710350wme.32.2019.10.21.07.34.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:44 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 02/13] drm/dp: Remove a gratuituous blank line Date: Mon, 21 Oct 2019 16:34:26 +0200 Message-Id: <20191021143437.1477719-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=op0Fm5qRWoebHt7vgXu8fI5ezBgXMcotXParKTZ7ztA=; b=hYStQrimxzno4LaI9vndM8Y9V/3HIA22aDdIqpIyeAcglfsMG6WjPmVcvU8ovRbFew VvgK5+DA0v/5RM3SWlv9y8M4AT3rJlhgpRiLYqSKUxHx6j+E0yivUGaiqdY8iv/q3nSu rfBQ76s1aSBACJWxwsPHpLJWO9joW5laJ+M63I/iH0mIB7EESy1qbUebYbnCOrMw8cA2 nLhWntQ/mplqZUMQin37LCTK7jlSTT22TBhtn8h3jG7IBk32o73S28Qg7CO13bEkTzoD XNIN+KvuzqbwRubcYc89eKu3sBUIPC4PdPrttxV9KLUK96F/FwSkvRpjURSHhKWXiJZ8 X1VQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding It's idiomatic to check the return value of a function call immediately after the function call, without any blank lines in between, to make it more obvious that the two lines belong together. Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- drivers/gpu/drm/drm_dp_helper.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index f373798d82f6..8f2d7c4850ca 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -220,7 +220,6 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, } ret = aux->transfer(aux, &msg); - if (ret >= 0) { native_reply = msg.reply & DP_AUX_NATIVE_REPLY_MASK; if (native_reply == DP_AUX_NATIVE_REPLY_ACK) { From patchwork Mon Oct 21 14:34:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202345 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6C3D0112B for ; Mon, 21 Oct 2019 14:34:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 54D6620656 for ; Mon, 21 Oct 2019 14:34:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 54D6620656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9CD846E11D; Mon, 21 Oct 2019 14:34:54 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 78CE06E11A for ; Mon, 21 Oct 2019 14:34:50 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id g24so4427946wmh.5 for ; Mon, 21 Oct 2019 07:34:50 -0700 (PDT) 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=46GAsIYP4qs2QOk9IyZbTEBdF4khhbTUFGaQ2NMA/kI=; b=iLY3+NMvjH5UI10wNXLAe/lVDP/WkWqnYI5SmEOlmkxUmhEb+5TCdvzEdscUMCFQb7 I2Z9a3+HQL/3hyuyx1FFJAi/w4G9Wfbvj34tZofduUdKOTAsUBYkAgBocfgRUERdd7ps tYVkkTj1OSXsDl0jrUIfsVznhUnvsuhRx2K7nY0IbOplthYREGGrCDpdo3CXH1NH2ilw NdkPVQgr6QM8Z27SESyeDx3kc9CCJTVJ2m92EX6BvzBXhwta46mzyoC95h0akwkNmGcx 6z3Y0neaDm3wbChdWMMwZ8oC1UV6QVsrhoavKNWLvUDPNIVcpdl97bzcvMRLu0ArFaSO FXZQ== X-Gm-Message-State: APjAAAXLJvAz6FbudLzZFv0owcrvXj1N0cpkfWtsMvzMDR0425p3iZjc TfHKjtVMTTqvRQ+eHpL3fwk2rWbf X-Google-Smtp-Source: APXvYqyP2nxeWLGHi1/RM7GKUuYuCc3bo4H/Qygc+AtCH0Ok9lCX8w3cwYNtN24zdiJN80A8/FEY8g== X-Received: by 2002:a05:600c:2948:: with SMTP id n8mr6647578wmd.128.1571668488486; Mon, 21 Oct 2019 07:34:48 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id a5sm15092wrm.78.2019.10.21.07.34.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:47 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 03/13] drm/dp: Add drm_dp_fast_training_cap() helper Date: Mon, 21 Oct 2019 16:34:27 +0200 Message-Id: <20191021143437.1477719-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=46GAsIYP4qs2QOk9IyZbTEBdF4khhbTUFGaQ2NMA/kI=; b=PvwB+m9lr2axSZwb3RtKhrcrLDPn9jSEPtdpaI3B4CmSkfKwphR2CFnMlkAUylQVZs MpGz+42GPx8W80YmtCc8JZiFbD3N1OTC+1uwQ1FdbEsXqKOE3XwmTwsEkHZYlsX87Aad Qx61JergDdsXPsxuUHvnYYvlU3e1fWik5KcguuHTHDPIvEvg2Sobe8wD21yjGQz0FKak 2+xrx4d1n6GnufVaegLz1zwuUaznOXvGGdp1h1tqtvPPXcoGjwdLJXZsB0xCix7wMkAC 2kx2iCnUpoZfqHdFVh9ejct0yWG1YWSVwBLqC1Nk/jU9IWrDjMZ0SKNc3qiMfZ4FhFXL KL3g== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding Add a helper that checks for the fast training capability given the DPCD receiver capabilities blob. Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- include/drm/drm_dp_helper.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index e0e76f7634a9..1179d3f2ba7c 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1215,6 +1215,13 @@ drm_dp_enhanced_frame_cap(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) (dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP); } +static inline bool +drm_dp_fast_training_cap(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) +{ + return dpcd[DP_DPCD_REV] >= 0x11 && + (dpcd[DP_MAX_DOWNSPREAD] & DP_NO_AUX_HANDSHAKE_LINK_TRAINING); +} + static inline bool drm_dp_tps3_supported(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { From patchwork Mon Oct 21 14:34:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202349 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C6111112B for ; Mon, 21 Oct 2019 14:35:03 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AE58D20656 for ; Mon, 21 Oct 2019 14:35:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE58D20656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5251E6E11E; Mon, 21 Oct 2019 14:35:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id A7F9B6E11A for ; Mon, 21 Oct 2019 14:34:53 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id 3so13066671wmi.3 for ; Mon, 21 Oct 2019 07:34:53 -0700 (PDT) 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=WL8rjnEQq3AKtO0OuAJyWbWJ+TqdvseXel9igOT1T8c=; b=R5zJF1rq6KC7aYDWlMzRx/a0kisGNLCHE6kAv/zu5HTsKgls3WhskRpFKoPDSyuWNY YThKmYzKFqV9A5y4Nlqw6j4t1169RP0dpYatYrkwdx7X8mnj9BgTdDrIOALgHibDCxS4 rQ1g7tb5ehhK2+/7GzJiekMNEH0Zf4cG7e90Km7DDe+65ffAXHawVXmpLzyvwS0TD1Ji KdifPokbnsghpLZIFojNIMkfpWPsen2TPs1mrV9qUdXnEB90Pnux4KIArpeenoS4K+uc pVdOqV6x8NwlkbsLXxi+KMjltnnYQY40srhmsc4zvfye4/36ky8qsQLIDifjljBADrkO afBg== X-Gm-Message-State: APjAAAVHsDpcqghjEMf5EdJ+mXZlcy+KWCaLDFvbVf4zRBwNYkDuX8ih AqWRfAqPasgNNut5m90GtKrpn/lw X-Google-Smtp-Source: APXvYqxNdjp8P4SQ/fYf6Ic4SF9Sj4BL4b2ocdZ0VaSFNdjQ8TIJyOH6rj9SSvt9hoNq4E2Ar1rvDA== X-Received: by 2002:a05:600c:294b:: with SMTP id n11mr3670596wmd.70.1571668491524; Mon, 21 Oct 2019 07:34:51 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id 26sm2562906wmf.20.2019.10.21.07.34.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:49 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 04/13] drm/dp: Add drm_dp_channel_coding_supported() helper Date: Mon, 21 Oct 2019 16:34:28 +0200 Message-Id: <20191021143437.1477719-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WL8rjnEQq3AKtO0OuAJyWbWJ+TqdvseXel9igOT1T8c=; b=PK+6gNF2iJKSik8OPHUngYM+G+hu1qONFnDgnSni/1WH/tqsHFwLYbFrtIgvbGUCAw sp0iE2rnxak56F4q/kknFmDUVtpanRONdtERtOrvBFddZDcBX6IS5559KCYRKlNo0Qm/ R++g5VNVDZ6aLqIcuGnRtuk6WqhNCdAQkOtO7QUV6trTQQrtYdzXkUIv7Y14trl8gXIA 7DoY6el/RTei2waT8CGr1IpSgYLlSHvGuDmMezbhpollWjhyAtWxySczN0PpEp3UdQrm mdPBeO8wAMVUL6nxSQk4vkNds1aljzOxq8KcoMHfKpOlYlag75rYi5xnlflOr1BfqYXF NvbA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding Add a helper to check whether the sink supports ANSI 8B/10B channel coding capability as specified in ANSI X3.230-1994, clause 11. Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- include/drm/drm_dp_helper.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index 1179d3f2ba7c..bc276c80b927 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -137,6 +137,7 @@ # define DP_DETAILED_CAP_INFO_AVAILABLE (1 << 4) /* DPI */ #define DP_MAIN_LINK_CHANNEL_CODING 0x006 +# define DP_CAP_ANSI_8B10B (1 << 0) #define DP_DOWN_STREAM_PORT_COUNT 0x007 # define DP_PORT_COUNT_MASK 0x0f @@ -1287,6 +1288,12 @@ drm_dp_sink_supports_fec(const u8 fec_capable) return fec_capable & DP_FEC_CAPABLE; } +static inline bool +drm_dp_channel_coding_supported(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) +{ + return dpcd[DP_MAIN_LINK_CHANNEL_CODING] & DP_CAP_ANSI_8B10B; +} + /* * DisplayPort AUX channel */ From patchwork Mon Oct 21 14:34:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202347 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3298913 for ; Mon, 21 Oct 2019 14:34:58 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DB70020656 for ; Mon, 21 Oct 2019 14:34:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB70020656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1752E6E11A; Mon, 21 Oct 2019 14:34:58 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5DC6E6E11A for ; Mon, 21 Oct 2019 14:34:56 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id p7so13621534wmp.4 for ; Mon, 21 Oct 2019 07:34:56 -0700 (PDT) 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=W5H5qyGGsziM/i5CH5bmShvYIYxFUgq6AWdyID/nnnI=; b=grCc1EW54xo2bNo6xPpPHnXb1aqiDbbEpkPgn6cAHF8klvyY32Q3Js5iXswkVZZgsP aHf19R/PBCIhaUkS2emdOYdsLF8ztIfaZo3R7Zx/YYaklyVd1vzuTDFEd1FGtbmiuxBg Bq1dp6RGS6M11913g102RAmnUk2+nzmPQo/x1UDm8VKOdOnK2y5CjZoRlMcpPF/vXilL OSn1zUx9Rae8OIOivr2LSKTiNXgmgPluIVm/26J/NKNmmvVEcyGMpOTQVjAi1izaf1xe +CWF3n70xZB/TR2jN8VDgwzR8P2dxuEDRrvfDEySgdFZYPmf+bpSvunqI8eiG+3GA9oS SEXQ== X-Gm-Message-State: APjAAAXzvN3KUOpQq9PMZkrZ0x0NroUq73DOZTGqACdFodUSncN+3WFL B/gzy7STmB59wW+vNiyU2I1601ou X-Google-Smtp-Source: APXvYqxUDgecEBruDwIvLvTHhx82ZguGsnjS986ILGmbdOVIwc6Ei4A7xZssIylwXJtq3jrAD0w3Og== X-Received: by 2002:a05:600c:1088:: with SMTP id e8mr20088814wmd.27.1571668494007; Mon, 21 Oct 2019 07:34:54 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id u68sm18864529wmu.12.2019.10.21.07.34.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:52 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 05/13] drm/dp: Add drm_dp_alternate_scrambler_reset_cap() helper Date: Mon, 21 Oct 2019 16:34:29 +0200 Message-Id: <20191021143437.1477719-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W5H5qyGGsziM/i5CH5bmShvYIYxFUgq6AWdyID/nnnI=; b=kFlA85SVcDXZov3Sb7FYc3pBhj5ZcKbsuGUVE8/9FYhuNzif/Jc1aUl5kaiTgpbeZC X8KyWPeNTJBMgS3OQAyWqRVmQfce66ErO2WPtbQTHN9Vf8Ul6HTxX8zwqAL+n4PEUMA8 HaolGr8yKGikB6v5VRZFVA4uKxQC6pWbUX0XX/bjFTkrc6GScMZy3v9B57OBKwOLOQBc pSjyY4WaDYiop/HFhnxeYDQJDlXutqqwnTNXzPfr8wzgluTpahRR5+/NYP7apK3GyAkr OIsqNpGbnWtN9z8Oe8SKN7Y430EuvXlK3ldjm6tp8xDBKcz1D12O+1AYjAJpx5JVYPJX yZkg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding Add a helper to check if the sink supports the eDP alternate scrambler reset value of 0xfffe. Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- include/drm/drm_dp_helper.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index bc276c80b927..b3402cb186a4 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1294,6 +1294,13 @@ drm_dp_channel_coding_supported(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) return dpcd[DP_MAIN_LINK_CHANNEL_CODING] & DP_CAP_ANSI_8B10B; } +static inline bool +drm_dp_alternate_scrambler_reset_cap(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) +{ + return dpcd[DP_EDP_CONFIGURATION_CAP] & + DP_ALTERNATE_SCRAMBLER_RESET_CAP; +} + /* * DisplayPort AUX channel */ From patchwork Mon Oct 21 14:34:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202351 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F21EE913 for ; Mon, 21 Oct 2019 14:35:05 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DADCF20640 for ; Mon, 21 Oct 2019 14:35:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DADCF20640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 92EAA6E120; Mon, 21 Oct 2019 14:35:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8DE696E11E for ; Mon, 21 Oct 2019 14:34:59 +0000 (UTC) Received: by mail-wr1-x444.google.com with SMTP id w18so13734860wrt.3 for ; Mon, 21 Oct 2019 07:34:59 -0700 (PDT) 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=UNDgx7cjyxqkkLW8q+71KCs/V3rFLUKy8VZglzOSx8Y=; b=fMHWGN8YW4PuwafecKMiqKWZ1TukEjSxZc1vraG7x1yBeJyhRZWMIHUB+M9Yq1gl/I xFTueyrcHSMgpKXblgHOOY4FUkIvdkJCCsbXObFZvcX2kD8at3Jn6UEizFB40rhkXCY5 G+R8O2/X5vP/w6EJZ1ymPMkot+2nqxHx3doLPQyIpYEAVOsVwSwof8hYIFQFp/YbhuKR Y0MfjjODljY/FNJj5GU5jRqmKYwBk9jkZSfUvqBiKoPPridtB40DTT4E5ZKNJX1XTEMY tEZk1cm9ymD2a5NHAe/PY2Z/S1Td0ASkzGHEK+7re3gzpAPuYq7Pky6+OFMU2cJWpFwa i5VQ== X-Gm-Message-State: APjAAAXfX1wvqwI02QCVPUKaZgqVEI66qzY7AfbE2X2avkzH7DEeY1QY 35DE3MCupyHpCR6a6UJADBd7I9tR X-Google-Smtp-Source: APXvYqz8Px1L4kuQPUBzY6G45JfwjcNvlHQyufdHgHbP4S/kWFsgaGRB6dZsX5sdz3w7p8dpBsI1Ew== X-Received: by 2002:adf:db0e:: with SMTP id s14mr16375639wri.341.1571668496649; Mon, 21 Oct 2019 07:34:56 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id z9sm15796191wrl.35.2019.10.21.07.34.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:55 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 06/13] drm/dp: Do not busy-loop during link training Date: Mon, 21 Oct 2019 16:34:30 +0200 Message-Id: <20191021143437.1477719-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UNDgx7cjyxqkkLW8q+71KCs/V3rFLUKy8VZglzOSx8Y=; b=RrJdon9e1E7+XC5kGwZols0LkctAbCa7+dS+6kmz5GZenNfX879IZ9reBx0Zy/PjOq rxb1Q6fkdFNMy2fE9fZKR+hCRRP2/xAOqBOgHVUyXG5T7yT9T308wZwPFgZab4HhZJOF mHQS4YJTpRkEDW9Beac0fPxc/ogRBA4ICbboADVgaXL+H7HbHizqPsQS7gCe033Nxz1U oO+R2fdvJqGyrIWyPKQN1qDpq2JEv9DpJ6g/WMsHKTuX/uAoBS/V0MShTcV9Sxtt0tGs xz0C3y1eByhDKnSRLo9TQhjMOVOjrwCE1mUMtlIirjrDaPiDFyWYzg0UQTprjSpkSWCs LZCA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding Use microsecond sleeps for the clock recovery and channel equalization delays during link training. The duration of these delays can be from 100 us up to 16 ms. It is rude to busy-loop for that amount of time. While at it, also convert to standard coding style by putting the opening braces in a function definition on a new line. Also switch to using an unsigned int for the AUX read interval to match the data type of the parameters to usleep_range(). v2: use correct multiplier for training delays (Philipp Zabel) v3: clarify data type change in commit message Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/drm_dp_helper.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 8f2d7c4850ca..ac802b04f120 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -120,33 +120,39 @@ u8 drm_dp_get_adjust_request_pre_emphasis(const u8 link_status[DP_LINK_STATUS_SI } EXPORT_SYMBOL(drm_dp_get_adjust_request_pre_emphasis); -void drm_dp_link_train_clock_recovery_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { - int rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & - DP_TRAINING_AUX_RD_MASK; +void drm_dp_link_train_clock_recovery_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) +{ + unsigned long rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & + DP_TRAINING_AUX_RD_MASK; if (rd_interval > 4) - DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", + DRM_DEBUG_KMS("AUX interval %lu, out of range (max 4)\n", rd_interval); if (rd_interval == 0 || dpcd[DP_DPCD_REV] >= DP_DPCD_REV_14) - udelay(100); + rd_interval = 100; else - mdelay(rd_interval * 4); + rd_interval *= 4 * USEC_PER_MSEC; + + usleep_range(rd_interval, rd_interval * 2); } EXPORT_SYMBOL(drm_dp_link_train_clock_recovery_delay); -void drm_dp_link_train_channel_eq_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { - int rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & - DP_TRAINING_AUX_RD_MASK; +void drm_dp_link_train_channel_eq_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) +{ + unsigned long rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & + DP_TRAINING_AUX_RD_MASK; if (rd_interval > 4) - DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", + DRM_DEBUG_KMS("AUX interval %lu, out of range (max 4)\n", rd_interval); if (rd_interval == 0) - udelay(400); + rd_interval = 400; else - mdelay(rd_interval * 4); + rd_interval *= 4 * USEC_PER_MSEC; + + usleep_range(rd_interval, rd_interval * 2); } EXPORT_SYMBOL(drm_dp_link_train_channel_eq_delay); From patchwork Mon Oct 21 14:34:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202353 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7EBDC913 for ; Mon, 21 Oct 2019 14:35:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6750520882 for ; Mon, 21 Oct 2019 14:35:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6750520882 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 88BE06E126; Mon, 21 Oct 2019 14:35:08 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 80C6B6E126 for ; Mon, 21 Oct 2019 14:35:03 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id p4so14274091wrm.8 for ; Mon, 21 Oct 2019 07:35:03 -0700 (PDT) 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=IMYgg0BskdWGAR55+ZNhsclFgQuE/wNcVY9wbsuF1iY=; b=f+/aVJT/PblERx1l/tZOLxIdDbeBfIR37kcH6LC9lVN8bH5ylOBe+QQViKt2wb8TYQ Tl+Wm5BVyHhvsHVVaP46hH+RlEAjWDRkn/xFI7WeGia8T1sj4dnf24NGof4SqlnoBSWa FfionE0VByDpg8ZhvPZH3BtlA521JjsO6KMTezJ9qmlRW8nP4o9gIgK63XRPJSyibQ6r 4bzfg4Ssosx0eswOFwNZh5g/8JADW+fzC/2q3B0okd4HemG3hlHYq6ECS2LLIA4bMRMX 3iRXudziFHmyEd3dff62atYphqYX6J/CygEu8gpLEeGVGbKUcOTs5X2ITq6gIp1mkjru pVVQ== X-Gm-Message-State: APjAAAVHDX29WobAbCIW62XjtZWvJ04ohwuaorE0bkgkHAA4YnzirkV8 WPGvW4sFy2h0UHMfhQORNt5wlgtH X-Google-Smtp-Source: APXvYqwDGO07CGtoK0ipIRv8qNH9KLBfbRbzKR+JrdanB35nGbcZ7hGbl057gtXiBZLhsCRV+euOQQ== X-Received: by 2002:a5d:6a91:: with SMTP id s17mr13226599wru.224.1571668500801; Mon, 21 Oct 2019 07:35:00 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id o25sm5865199wro.21.2019.10.21.07.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:34:58 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 07/13] drm/dp: Add helper to get post-cursor adjustments Date: Mon, 21 Oct 2019 16:34:31 +0200 Message-Id: <20191021143437.1477719-8-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IMYgg0BskdWGAR55+ZNhsclFgQuE/wNcVY9wbsuF1iY=; b=eQcjQaLuEyrp0CBPn1+l9XkTvV+T/E19fkaprwsIUlCuSAF7lZVOGi4U+HiuF/prUd cWPznvdpfxkMqO/Qhh6AZ/Tf57XfBhlL4asyB6tAxWxPd9JUQ0zNKs4HXFPevAycZpqs lvS6keeOqsItRzUSgudthaHRbCmpmrT/H4gAy3x/Xnfqa1gYEafWZsg8hPP8iDHujRKE 53cDnQTY3Pz6+ZH+hPelXqcI921TLk7iZ9Yp4OKrfSlFVa0dCL0KBvpyepooelN/ZItT F+8pfG4pAJtXFPDaTQZ+G/u3ZwrB1XDXzpW2Io3Jhy0GeVbsEB92fBTY98TvoWwpSO85 d06Q== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding If the transmitter supports pre-emphasis post cursor2 the sink will request adjustments in a similar way to how it requests adjustments to the voltage swing and pre-emphasis settings. Add a helper to extract these adjustments on a per-lane basis from the DPCD link status. Reviewed-by: Philipp Zabel Reviewed-by: Lyude Paul Signed-off-by: Thierry Reding --- drivers/gpu/drm/drm_dp_helper.c | 10 ++++++++++ include/drm/drm_dp_helper.h | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index ac802b04f120..f567141aff54 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -120,6 +120,16 @@ u8 drm_dp_get_adjust_request_pre_emphasis(const u8 link_status[DP_LINK_STATUS_SI } EXPORT_SYMBOL(drm_dp_get_adjust_request_pre_emphasis); +u8 drm_dp_get_adjust_request_post_cursor(const u8 link_status[DP_LINK_STATUS_SIZE], + unsigned int lane) +{ + unsigned int offset = DP_ADJUST_REQUEST_POST_CURSOR2; + u8 value = dp_link_status(link_status, offset); + + return (value >> (lane << 1)) & 0x3; +} +EXPORT_SYMBOL(drm_dp_get_adjust_request_post_cursor); + void drm_dp_link_train_clock_recovery_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { unsigned long rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index b3402cb186a4..04f6c0bb0274 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -605,6 +605,14 @@ # define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT 6 #define DP_ADJUST_REQUEST_POST_CURSOR2 0x20c +# define DP_ADJUST_POST_CURSOR2_LANE0_MASK 0x03 +# define DP_ADJUST_POST_CURSOR2_LANE0_SHIFT 0 +# define DP_ADJUST_POST_CURSOR2_LANE1_MASK 0x0c +# define DP_ADJUST_POST_CURSOR2_LANE1_SHIFT 2 +# define DP_ADJUST_POST_CURSOR2_LANE2_MASK 0x30 +# define DP_ADJUST_POST_CURSOR2_LANE2_SHIFT 4 +# define DP_ADJUST_POST_CURSOR2_LANE3_MASK 0xc0 +# define DP_ADJUST_POST_CURSOR2_LANE3_SHIFT 6 #define DP_TEST_REQUEST 0x218 # define DP_TEST_LINK_TRAINING (1 << 0) @@ -1122,6 +1130,8 @@ u8 drm_dp_get_adjust_request_voltage(const u8 link_status[DP_LINK_STATUS_SIZE], int lane); u8 drm_dp_get_adjust_request_pre_emphasis(const u8 link_status[DP_LINK_STATUS_SIZE], int lane); +u8 drm_dp_get_adjust_request_post_cursor(const u8 link_status[DP_LINK_STATUS_SIZE], + unsigned int lane); #define DP_BRANCH_OUI_HEADER_SIZE 0xc #define DP_RECEIVER_CAP_SIZE 0xf From patchwork Mon Oct 21 14:34:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202355 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3A8D2913 for ; Mon, 21 Oct 2019 14:35:12 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 22DF820656 for ; Mon, 21 Oct 2019 14:35:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 22DF820656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6610D6E125; Mon, 21 Oct 2019 14:35:11 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5AE316E125 for ; Mon, 21 Oct 2019 14:35:08 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id t16so9143874wrr.1 for ; Mon, 21 Oct 2019 07:35:08 -0700 (PDT) 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=smHuP98hnItXx3nPkO6BcOavNsPfzi47REjCYpDwWro=; b=We2lzeQnKKpHjHy0TDQqUgqCSrU/CYn+H0GKhfxJKxylcug5P+MpW4+BlyIIMO56AZ HmX0r72Y0LayWbg3wLOZQt/n5IXYkpurKKoCQeoEr1Nk+I9N0fZe66eqKzibAgTE9Ec/ UGa7iKFpQdKDx4jZmoSGCXKt/CfKah8JpEKsx1wy6xtj7I0yiiG4AWRmdgt/x0ohkII4 cIyNBqk3gAtyMtYe2s/9xOYBqRMU2Chk505WrbJ4eOFvgj+dQof0mx14R6KPb/K6wTdi Xn1JCDrVkv3r2eU7ZTBwKJNeZ9J8CMdb+4RHmpXD7bfhZMo5Cmr8L3/XmFuDajhugAtp hkFQ== X-Gm-Message-State: APjAAAVvtP6eF2LOiIxXi5nLqIZVrMnn1y+FQyzOrRPhqZn9p0c9jf0t urS9yMHzRvv73vT95CH7Do19Y5d8 X-Google-Smtp-Source: APXvYqxnMd5wIll8RIKkE+NSbkFnEddVVfsC2L21Olo2f12neNOpKMwOK6c9lWXD+qnr4hbHkBsOpA== X-Received: by 2002:adf:f7c6:: with SMTP id a6mr19536437wrq.272.1571668504250; Mon, 21 Oct 2019 07:35:04 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id o11sm8796392wmh.28.2019.10.21.07.35.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:02 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 08/13] drm/bridge: analogix-anx78xx: Avoid drm_dp_link helpers Date: Mon, 21 Oct 2019 16:34:32 +0200 Message-Id: <20191021143437.1477719-9-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=smHuP98hnItXx3nPkO6BcOavNsPfzi47REjCYpDwWro=; b=l8o/9ovmDJybUqDcyK1yTJPqkvdLgfKtKX6XcK69t/k37PEX66CQpynsnuVQGlTxxb ofcrGDsWSSae64331nRnarxfKQ/afPvdG++kfnsl2TgDuf73Vq6/k5N/FPq5AqbWL6PY ryDCCyKNS9VFjDWaEllxg7q9pMCU7gNCxJikrIQg1ZsRbb8wCrWmoc2n/igrdh8bgKYR wrFVAf1Cym2rQBGH7VXQIznT4il0F2WEWKdqo7W2YxuJiCLbIe3CNdZnoPSvijlq4/rU M367tqMETS6t4IUqCDVRue4SZXoWhzSE//HqA1zTDtyKtyuyDleHqCYbFsXBs7rEpwcC S2og== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding During the discussion of patches that enhance the drm_dp_link helpers it was concluded that these helpers aren't very useful to begin with. Start pushing the equivalent code into individual drivers to ultimately remove them. Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/bridge/analogix-anx78xx.c | 57 +++++++++++++++++------ 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c index 9ddc1f3cf841..8bb4793f382b 100644 --- a/drivers/gpu/drm/bridge/analogix-anx78xx.c +++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c @@ -71,7 +71,6 @@ struct anx78xx { struct i2c_client *client; struct edid *edid; struct drm_connector connector; - struct drm_dp_link link; struct anx78xx_platform_data pdata; struct mutex lock; @@ -801,18 +800,34 @@ static int anx78xx_dp_link_training(struct anx78xx *anx78xx) if (err) return err; - /* Check link capabilities */ - err = drm_dp_link_probe(&anx78xx->aux, &anx78xx->link); - if (err < 0) { - DRM_ERROR("Failed to probe link capabilities: %d\n", err); - return err; - } + /* + * Power up the sink (DP_SET_POWER register is only available on DPCD + * v1.1 and later). + */ + if (anx78xx->dpcd[DP_DPCD_REV] >= 0x11) { + err = drm_dp_dpcd_readb(&anx78xx->aux, DP_SET_POWER, &value); + if (err < 0) { + DRM_ERROR("Failed to read DP_SET_POWER register: %d\n", + err); + return err; + } - /* Power up the sink */ - err = drm_dp_link_power_up(&anx78xx->aux, &anx78xx->link); - if (err < 0) { - DRM_ERROR("Failed to power up DisplayPort link: %d\n", err); - return err; + value &= ~DP_SET_POWER_MASK; + value |= DP_SET_POWER_D0; + + err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_SET_POWER, value); + if (err < 0) { + DRM_ERROR("Failed to power up DisplayPort link: %d\n", + err); + return err; + } + + /* + * According to the DP 1.1 specification, a "Sink Device must + * exit the power saving state within 1 ms" (Section 2.5.3.1, + * Table 5-52, "Sink Control Field" (register 0x600). + */ + usleep_range(1000, 2000); } /* Possibly enable downspread on the sink */ @@ -851,15 +866,27 @@ static int anx78xx_dp_link_training(struct anx78xx *anx78xx) if (err) return err; - value = drm_dp_link_rate_to_bw_code(anx78xx->link.rate); + value = drm_dp_max_link_rate(anx78xx->dpcd); + value = drm_dp_link_rate_to_bw_code(value); err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_MAIN_LINK_BW_SET_REG, value); if (err) return err; - err = drm_dp_link_configure(&anx78xx->aux, &anx78xx->link); + err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_LINK_BW_SET, value); + if (err < 0) { + DRM_ERROR("Failed to set link bandwidth: %d\n", err); + return err; + } + + value = drm_dp_max_lane_count(anx78xx->dpcd); + + if (drm_dp_enhanced_frame_cap(anx78xx->dpcd)) + value |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_LANE_COUNT_SET, value); if (err < 0) { - DRM_ERROR("Failed to configure DisplayPort link: %d\n", err); + DRM_ERROR("Failed to set link lane count: %d\n", err); return err; } From patchwork Mon Oct 21 14:34:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202357 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 95487112B for ; Mon, 21 Oct 2019 14:35:16 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7D3F020640 for ; Mon, 21 Oct 2019 14:35:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7D3F020640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5DA9F6E127; Mon, 21 Oct 2019 14:35:15 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 517DA6E127 for ; Mon, 21 Oct 2019 14:35:14 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id c6so2065779wrm.6 for ; Mon, 21 Oct 2019 07:35:14 -0700 (PDT) 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=PDCPRGS2RLuPXXYiGMYa9BjSGsLw/KdPKYLj4sZKA50=; b=Gm0TjAXMaBI4aC53liSUiQLzyTyekn+01TlMQ1eokFOatBNtN9yKoqcG+TZmweHbNu UtU931Ogj3MX7JWUrEa30gevgyKU4lI8KnfjAG5yuoghU6o8x4Anx/QJPjfGxJQcHhi0 F8nkgnXpefhHqwL6SCuTCaiY96h6clwqzMy/YNUMmwcsH/Luy4H1SuAJXuWSmfaNovwX ErAimauloHYBZZIc8aXbRKOL0KQ0pBCLDt2/GB6iqDiresOHLZSjXhbDhoawKRZXq71n 4CEJFdDM3n9qd+8cpb1nKVfSV6coGlfQeeJHpOTMAjMvXtd0D+anTnGuOdFRWEb1w5J7 vemQ== X-Gm-Message-State: APjAAAUXACkLRRkEhElqM3QLeu2kvQYCug1fE4VOHp5uDVUbZQhNnTUD zVdGvjBQpQ4cuyAY6FcYvdQmAxuQ X-Google-Smtp-Source: APXvYqwFT2XPvfw6f2X+5EilL6KApbMh7oGKEuExUoYlNO1CBUPdD/itUd3H/agw0s+s9LyyQI+xtQ== X-Received: by 2002:adf:e747:: with SMTP id c7mr20283020wrn.384.1571668511510; Mon, 21 Oct 2019 07:35:11 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id q124sm27893380wma.5.2019.10.21.07.35.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:09 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 09/13] drm/bridge: tc358767: Avoid drm_dp_link helpers Date: Mon, 21 Oct 2019 16:34:33 +0200 Message-Id: <20191021143437.1477719-10-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PDCPRGS2RLuPXXYiGMYa9BjSGsLw/KdPKYLj4sZKA50=; b=YMmsuxzJUJdY5BSndPXSXacpgZnKhfuxd7zbs/tFZ0bSX77hrhKrS+gAkqVYvNBI7S wxCSys1rLqRlZ75hyu3rjURr3G0aS5LwBeRSAiOnH6mGa3p+CIBydF2dZJQ8yQ+K/OTc 5eIHSppHLHQbklgJXE+4TWuqhgJl6V2dSGQ3pqr3G0KNII5/X65m6xABZ8Vanv3VxA8n N4nfBSO2MpSEM6MPIsMgHNP9VeaiMxz76RMgUN4myNe9YdLHN4w6ByvaL4ZfH4kiaYnk ixSm8uctUH3Dwhwk29kd5p9VO7xA6wfPYGjZU8YyYpKIoBLH0LKGDXel2VvTJ1L9ts6A umtA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding During the discussion of patches that enhance the drm_dp_link helpers it was concluded that these helpers aren't very useful to begin with. Start pushing the equivalent code into individual drivers to ultimately remove them. v3: make link rate unsigned int to avoid overflow Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/bridge/tc358767.c | 63 ++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index da7e35b0893d..9fe4134425a7 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -229,7 +229,9 @@ static bool tc_test_pattern; module_param_named(test, tc_test_pattern, bool, 0644); struct tc_edp_link { - struct drm_dp_link base; + u8 dpcd[DP_RECEIVER_CAP_SIZE]; + unsigned int rate; + u8 num_lanes; u8 assr; bool scrambler_dis; bool spread; @@ -438,9 +440,9 @@ static u32 tc_srcctrl(struct tc_data *tc) reg |= DP0_SRCCTRL_SCRMBLDIS; /* Scrambler Disabled */ if (tc->link.spread) reg |= DP0_SRCCTRL_SSCG; /* Spread Spectrum Enable */ - if (tc->link.base.num_lanes == 2) + if (tc->link.num_lanes == 2) reg |= DP0_SRCCTRL_LANES_2; /* Two Main Channel Lanes */ - if (tc->link.base.rate != 162000) + if (tc->link.rate != 162000) reg |= DP0_SRCCTRL_BW27; /* 2.7 Gbps link */ return reg; } @@ -663,23 +665,35 @@ static int tc_aux_link_setup(struct tc_data *tc) static int tc_get_display_props(struct tc_data *tc) { + u8 revision, num_lanes; + unsigned int rate; int ret; u8 reg; /* Read DP Rx Link Capability */ - ret = drm_dp_link_probe(&tc->aux, &tc->link.base); + ret = drm_dp_dpcd_read(&tc->aux, DP_DPCD_REV, tc->link.dpcd, + DP_RECEIVER_CAP_SIZE); if (ret < 0) goto err_dpcd_read; - if (tc->link.base.rate != 162000 && tc->link.base.rate != 270000) { + + revision = tc->link.dpcd[DP_DPCD_REV]; + rate = drm_dp_max_link_rate(tc->link.dpcd); + num_lanes = drm_dp_max_lane_count(tc->link.dpcd); + + if (rate != 162000 && rate != 270000) { dev_dbg(tc->dev, "Falling to 2.7 Gbps rate\n"); - tc->link.base.rate = 270000; + rate = 270000; } - if (tc->link.base.num_lanes > 2) { + tc->link.rate = rate; + + if (num_lanes > 2) { dev_dbg(tc->dev, "Falling to 2 lanes\n"); - tc->link.base.num_lanes = 2; + num_lanes = 2; } + tc->link.num_lanes = num_lanes; + ret = drm_dp_dpcd_readb(&tc->aux, DP_MAX_DOWNSPREAD, ®); if (ret < 0) goto err_dpcd_read; @@ -697,10 +711,10 @@ static int tc_get_display_props(struct tc_data *tc) tc->link.assr = reg & DP_ALTERNATE_SCRAMBLER_RESET_ENABLE; dev_dbg(tc->dev, "DPCD rev: %d.%d, rate: %s, lanes: %d, framing: %s\n", - tc->link.base.revision >> 4, tc->link.base.revision & 0x0f, - (tc->link.base.rate == 162000) ? "1.62Gbps" : "2.7Gbps", - tc->link.base.num_lanes, - (tc->link.base.capabilities & DP_LINK_CAP_ENHANCED_FRAMING) ? + revision >> 4, revision & 0x0f, + (tc->link.rate == 162000) ? "1.62Gbps" : "2.7Gbps", + tc->link.num_lanes, + drm_dp_enhanced_frame_cap(tc->link.dpcd) ? "enhanced" : "non-enhanced"); dev_dbg(tc->dev, "Downspread: %s, scrambler: %s\n", tc->link.spread ? "0.5%" : "0.0%", @@ -740,7 +754,7 @@ static int tc_set_video_mode(struct tc_data *tc, */ in_bw = mode->clock * bits_per_pixel / 8; - out_bw = tc->link.base.num_lanes * tc->link.base.rate; + out_bw = tc->link.num_lanes * tc->link.rate; max_tu_symbol = DIV_ROUND_UP(in_bw * TU_SIZE_RECOMMENDED, out_bw); dev_dbg(tc->dev, "set mode %dx%d\n", @@ -902,7 +916,7 @@ static int tc_main_link_enable(struct tc_data *tc) /* SSCG and BW27 on DP1 must be set to the same as on DP0 */ ret = regmap_write(tc->regmap, DP1_SRCCTRL, (tc->link.spread ? DP0_SRCCTRL_SSCG : 0) | - ((tc->link.base.rate != 162000) ? DP0_SRCCTRL_BW27 : 0)); + ((tc->link.rate != 162000) ? DP0_SRCCTRL_BW27 : 0)); if (ret) return ret; @@ -912,7 +926,7 @@ static int tc_main_link_enable(struct tc_data *tc) /* Setup Main Link */ dp_phy_ctrl = BGREN | PWR_SW_EN | PHY_A0_EN | PHY_M0_EN; - if (tc->link.base.num_lanes == 2) + if (tc->link.num_lanes == 2) dp_phy_ctrl |= PHY_2LANE; ret = regmap_write(tc->regmap, DP_PHY_CTRL, dp_phy_ctrl); @@ -975,7 +989,13 @@ static int tc_main_link_enable(struct tc_data *tc) } /* Setup Link & DPRx Config for Training */ - ret = drm_dp_link_configure(aux, &tc->link.base); + tmp[0] = drm_dp_link_rate_to_bw_code(tc->link.rate); + tmp[1] = tc->link.num_lanes; + + if (drm_dp_enhanced_frame_cap(tc->link.dpcd)) + tmp[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + ret = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, tmp, 2); if (ret < 0) goto err_dpcd_write; @@ -1019,9 +1039,8 @@ static int tc_main_link_enable(struct tc_data *tc) /* Enable DP0 to start Link Training */ ret = regmap_write(tc->regmap, DP0CTL, - ((tc->link.base.capabilities & - DP_LINK_CAP_ENHANCED_FRAMING) ? EF_EN : 0) | - DP_EN); + (drm_dp_enhanced_frame_cap(tc->link.dpcd) ? + EF_EN : 0) | DP_EN); if (ret) return ret; @@ -1100,7 +1119,7 @@ static int tc_main_link_enable(struct tc_data *tc) ret = -ENODEV; } - if (tc->link.base.num_lanes == 2) { + if (tc->link.num_lanes == 2) { value = (tmp[0] >> 4) & DP_CHANNEL_EQ_BITS; if (value != DP_CHANNEL_EQ_BITS) { @@ -1171,7 +1190,7 @@ static int tc_stream_enable(struct tc_data *tc) return ret; value = VID_MN_GEN | DP_EN; - if (tc->link.base.capabilities & DP_LINK_CAP_ENHANCED_FRAMING) + if (drm_dp_enhanced_frame_cap(tc->link.dpcd)) value |= EF_EN; ret = regmap_write(tc->regmap, DP0CTL, value); if (ret) @@ -1297,7 +1316,7 @@ static enum drm_mode_status tc_mode_valid(struct drm_bridge *bridge, return MODE_CLOCK_HIGH; req = mode->clock * bits_per_pixel / 8; - avail = tc->link.base.num_lanes * tc->link.base.rate; + avail = tc->link.num_lanes * tc->link.rate; if (req > avail) return MODE_BAD; From patchwork Mon Oct 21 14:34:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202359 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B4F29112B for ; Mon, 21 Oct 2019 14:35:20 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9D13420656 for ; Mon, 21 Oct 2019 14:35:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D13420656 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D4AAA6E12A; Mon, 21 Oct 2019 14:35:19 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id B0A506E12A for ; Mon, 21 Oct 2019 14:35:15 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id b24so13042019wmj.5 for ; Mon, 21 Oct 2019 07:35:15 -0700 (PDT) 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=fdncbwDUjQqnY7JtGrVTu3DyZ3SaO9/FVUphVX3LrW8=; b=c334iPp9kJrYNkKuqr2o/KWPameu5nKKp6t3Swci6z6FfNqrdfVgtkFjL37ypnEYpT PYtJ4vC1bDUsw1KcX37g6wLHA7o1nEfL1hYXr4LA3kenKaG7hcskqjCca+fosNno5q2m K3Q0Xo2SOtifsp8Skb+RKQeCWqgNSFEyap/r9DNyO28f3vrn92V1Pc/kbqWKf/yKrZSg LJvuByR+awP4Gf4afgYRw9DNo2L395ZnK5WVbcrzkhWy2j/KAlVgEq052sdgdWs3o3et xhkhmDBBR1qrn7qFST8zO6AabtGUha/doiEeKtIR2bZkRW4ZvIhTui+DH5iz0Mhy5W6N TJHw== X-Gm-Message-State: APjAAAV7wbhx5YudYhxWIOcuatBg3Oxn27/0aR/gLxzxSnSXxNvyvYzx X/7H+vAqz1ZqEEXvXgHPBcCrha4o X-Google-Smtp-Source: APXvYqwoFua8Jr3oXDndS4dXzTUoDFlshNIxcJFrnsEYVPrz2oCEVecVd8js9Do6Jei6MmAutxnvNw== X-Received: by 2002:a1c:7517:: with SMTP id o23mr20511462wmc.34.1571668513687; Mon, 21 Oct 2019 07:35:13 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id w22sm13460246wmc.16.2019.10.21.07.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:12 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 10/13] drm/bridge: tc358767: Use DP nomenclature Date: Mon, 21 Oct 2019 16:34:34 +0200 Message-Id: <20191021143437.1477719-11-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fdncbwDUjQqnY7JtGrVTu3DyZ3SaO9/FVUphVX3LrW8=; b=frekzVW4cW8pyvAi7J8trQHqlbBdm/LLai+3Xx+57EiJlJX1I2YvmhIQy9Dr69H/ZV 3pRpJMrcGzEYjL5RgwzCH7PZLaijXG/MN6QLdXMwpvI2gw6M1Ws1hxvS6tjg2H8XvJRK kVXkbb9PrT8MVSAQBHtavydwaRwYjrYDCbY+6g7YfZwkr33KnwOkTpdVNwXiENg56pOq dVhZICenhIv1CBug4aKrZH9RVtBWUmhV7c+5KpAIao5o7xcI8UlVD7eEfQOfXxeQw0hW LvZ7xgjPcQivtWnmR0DiVQA4jfbXo2CH8WUUz1HCfTNoUi+4vHLIOrCaoToRLsD0r+YE YhDg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding The DP specification uses the term "default framing" instead of "non- enhanced framing". Reviewed-by: Andrzej Hajda Signed-off-by: Thierry Reding --- drivers/gpu/drm/bridge/tc358767.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index 9fe4134425a7..8029478ffebb 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -715,7 +715,7 @@ static int tc_get_display_props(struct tc_data *tc) (tc->link.rate == 162000) ? "1.62Gbps" : "2.7Gbps", tc->link.num_lanes, drm_dp_enhanced_frame_cap(tc->link.dpcd) ? - "enhanced" : "non-enhanced"); + "enhanced" : "default"); dev_dbg(tc->dev, "Downspread: %s, scrambler: %s\n", tc->link.spread ? "0.5%" : "0.0%", tc->link.scrambler_dis ? "disabled" : "enabled"); From patchwork Mon Oct 21 14:34:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202363 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DF82714E5 for ; Mon, 21 Oct 2019 14:35:25 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C7DA920640 for ; Mon, 21 Oct 2019 14:35:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C7DA920640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 203F76E132; Mon, 21 Oct 2019 14:35:23 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id A67E96E12A for ; Mon, 21 Oct 2019 14:35:18 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id q13so9303308wrs.12 for ; Mon, 21 Oct 2019 07:35:18 -0700 (PDT) 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=iEgIQOiFRXnOhiFolzYE+VzbhmktK/jJYS1NZeyLjfU=; b=MZNsqgrCUnrxwNImXdWFBJ6yidXRtT8BqzWDNEIzxEyobd8POndpjKsBcQANFmL6+M CEvRZnaOkTzhhq9Q3LxabmcBiuP3L0sud8UxbkBSPK/meqxeaur54+oZFx0VtGIWc9TC sr00EtTfaj5XLV4xAKuemBA3gc/XwOp11mAoOKpmFJSmHnnx672GPXWwjPFXEwcbgG9Z l96zD3tFrY61CJFO8dcichVsV7rYZ6FExSzSfaiy07fNJX6Qj0sR/n0nYy/4bEg8sNwJ LupYSui1CeSNvudrSAl3tnYziCmA13vKlnWX4VHitNKi3RVFXhAc0ao9MI21Bv5vrGWl /4Ow== X-Gm-Message-State: APjAAAVKW1zlO+h+xLDif37GS14LbgbvlmwMZ2VNy9rgA+k+l3PRZuZD mtJatcHZJId61+WYbabGRLMEzszf X-Google-Smtp-Source: APXvYqzJMm2bnWlZgrPToMsZNsvUBrDacdnomb7x6Ud2KLzgqmADbCfaHZz/xinBF3CMSAzmkyC/8g== X-Received: by 2002:adf:c409:: with SMTP id v9mr6372267wrf.41.1571668515999; Mon, 21 Oct 2019 07:35:15 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id q22sm13185890wmj.5.2019.10.21.07.35.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:14 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 11/13] drm/msm: edp: Avoid drm_dp_link helpers Date: Mon, 21 Oct 2019 16:34:35 +0200 Message-Id: <20191021143437.1477719-12-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iEgIQOiFRXnOhiFolzYE+VzbhmktK/jJYS1NZeyLjfU=; b=NncW5i535yOHUqU9iyC1tqeWMjgAuE/WX0V36Uv02rRjAv57qVY8+pbDXrui7Mej3U +tmpMxmx3G7pqOfggOOzitlSA/bpy1grCz325za947y3IPj2cmpUJxJSXHuGSiNIvzyS naWHMAu6X+JADMguCz3R1w/vMsz2qsfpHtXzFygI+5SEDls140XGGzphvVq/AlpULRxy WktvXt5AZjIFMOYZxVATQZLo+CAnX5NmPuQ0Q6IraRB/Y8ox6Qr5AuOO9UQAcgu0107p dd05YgXzmFafvpouKnSi0sdMYF+JI3WiM+5mxSw1ciMonJJiNessMb59T/eNpFxHVolT Vojw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding During the discussion of patches that enhance the drm_dp_link helpers it was concluded that these helpers aren't very useful to begin with. Start pushing the equivalent code into individual drivers to ultimately remove them. Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/msm/edp/edp_ctrl.c | 70 +++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/msm/edp/edp_ctrl.c b/drivers/gpu/drm/msm/edp/edp_ctrl.c index 7f3dd3ffe2c9..0d9657cc70db 100644 --- a/drivers/gpu/drm/msm/edp/edp_ctrl.c +++ b/drivers/gpu/drm/msm/edp/edp_ctrl.c @@ -89,7 +89,6 @@ struct edp_ctrl { /* edid raw data */ struct edid *edid; - struct drm_dp_link dp_link; struct drm_dp_aux *drm_aux; /* dpcd raw data */ @@ -403,7 +402,7 @@ static void edp_fill_link_cfg(struct edp_ctrl *ctrl) u32 prate; u32 lrate; u32 bpp; - u8 max_lane = ctrl->dp_link.num_lanes; + u8 max_lane = drm_dp_max_lane_count(ctrl->dpcd); u8 lane; prate = ctrl->pixel_rate; @@ -413,7 +412,7 @@ static void edp_fill_link_cfg(struct edp_ctrl *ctrl) * By default, use the maximum link rate and minimum lane count, * so that we can do rate down shift during link training. */ - ctrl->link_rate = drm_dp_link_rate_to_bw_code(ctrl->dp_link.rate); + ctrl->link_rate = ctrl->dpcd[DP_MAX_LINK_RATE]; prate *= bpp; prate /= 8; /* in kByte */ @@ -439,7 +438,7 @@ static void edp_config_ctrl(struct edp_ctrl *ctrl) data = EDP_CONFIGURATION_CTRL_LANES(ctrl->lane_cnt - 1); - if (ctrl->dp_link.capabilities & DP_LINK_CAP_ENHANCED_FRAMING) + if (drm_dp_enhanced_frame_cap(ctrl->dpcd)) data |= EDP_CONFIGURATION_CTRL_ENHANCED_FRAMING; depth = EDP_6BIT; @@ -701,7 +700,7 @@ static int edp_link_rate_down_shift(struct edp_ctrl *ctrl) rate = ctrl->link_rate; lane = ctrl->lane_cnt; - max_lane = ctrl->dp_link.num_lanes; + max_lane = drm_dp_max_lane_count(ctrl->dpcd); bpp = ctrl->color_depth * 3; prate = ctrl->pixel_rate; @@ -751,18 +750,22 @@ static int edp_clear_training_pattern(struct edp_ctrl *ctrl) static int edp_do_link_train(struct edp_ctrl *ctrl) { + u8 values[2]; int ret; - struct drm_dp_link dp_link; DBG(""); /* * Set the current link rate and lane cnt to panel. They may have been * adjusted and the values are different from them in DPCD CAP */ - dp_link.num_lanes = ctrl->lane_cnt; - dp_link.rate = drm_dp_bw_code_to_link_rate(ctrl->link_rate); - dp_link.capabilities = ctrl->dp_link.capabilities; - if (drm_dp_link_configure(ctrl->drm_aux, &dp_link) < 0) + values[0] = ctrl->lane_cnt; + values[1] = ctrl->link_rate; + + if (drm_dp_enhanced_frame_cap(ctrl->dpcd)) + values[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + if (drm_dp_dpcd_write(ctrl->drm_aux, DP_LINK_BW_SET, values, + sizeof(values)) < 0) return EDP_TRAIN_FAIL; ctrl->v_level = 0; /* start from default level */ @@ -952,6 +955,7 @@ static void edp_ctrl_on_worker(struct work_struct *work) { struct edp_ctrl *ctrl = container_of( work, struct edp_ctrl, on_work); + u8 value; int ret; mutex_lock(&ctrl->dev_mutex); @@ -965,9 +969,27 @@ static void edp_ctrl_on_worker(struct work_struct *work) edp_ctrl_link_enable(ctrl, 1); edp_ctrl_irq_enable(ctrl, 1); - ret = drm_dp_link_power_up(ctrl->drm_aux, &ctrl->dp_link); - if (ret) - goto fail; + + /* DP_SET_POWER register is only available on DPCD v1.1 and later */ + if (ctrl->dpcd[DP_DPCD_REV] >= 0x11) { + ret = drm_dp_dpcd_readb(ctrl->drm_aux, DP_SET_POWER, &value); + if (ret < 0) + goto fail; + + value &= ~DP_SET_POWER_MASK; + value |= DP_SET_POWER_D0; + + ret = drm_dp_dpcd_writeb(ctrl->drm_aux, DP_SET_POWER, value); + if (ret < 0) + goto fail; + + /* + * According to the DP 1.1 specification, a "Sink Device must + * exit the power saving state within 1 ms" (Section 2.5.3.1, + * Table 5-52, "Sink Control Field" (register 0x600). + */ + usleep_range(1000, 2000); + } ctrl->power_on = true; @@ -1011,7 +1033,19 @@ static void edp_ctrl_off_worker(struct work_struct *work) edp_state_ctrl(ctrl, 0); - drm_dp_link_power_down(ctrl->drm_aux, &ctrl->dp_link); + /* DP_SET_POWER register is only available on DPCD v1.1 and later */ + if (ctrl->dpcd[DP_DPCD_REV] >= 0x11) { + u8 value; + int ret; + + ret = drm_dp_dpcd_readb(ctrl->drm_aux, DP_SET_POWER, &value); + if (ret > 0) { + value &= ~DP_SET_POWER_MASK; + value |= DP_SET_POWER_D3; + + drm_dp_dpcd_writeb(ctrl->drm_aux, DP_SET_POWER, value); + } + } edp_ctrl_irq_enable(ctrl, 0); @@ -1225,14 +1259,8 @@ int msm_edp_ctrl_get_panel_info(struct edp_ctrl *ctrl, edp_ctrl_irq_enable(ctrl, 1); } - ret = drm_dp_link_probe(ctrl->drm_aux, &ctrl->dp_link); - if (ret) { - pr_err("%s: read dpcd cap failed, %d\n", __func__, ret); - goto disable_ret; - } - /* Initialize link rate as panel max link rate */ - ctrl->link_rate = drm_dp_link_rate_to_bw_code(ctrl->dp_link.rate); + ctrl->link_rate = ctrl->dpcd[DP_MAX_LINK_RATE]; ctrl->edid = drm_get_edid(connector, &ctrl->drm_aux->ddc); if (!ctrl->edid) { From patchwork Mon Oct 21 14:34:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202361 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 984F6913 for ; Mon, 21 Oct 2019 14:35:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 807E720640 for ; Mon, 21 Oct 2019 14:35:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 807E720640 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 697F56E12C; Mon, 21 Oct 2019 14:35:22 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 739076E130 for ; Mon, 21 Oct 2019 14:35:20 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id v9so3025659wrq.5 for ; Mon, 21 Oct 2019 07:35:20 -0700 (PDT) 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=MYQpoMFUcXu3ABoddvpPyKW+Nw7qkyPAu+f3Ok9rxto=; b=cMzuEmFQ575nQU7RXht1AvGrNoB7TUZJISiPLLDOnM0pHNkl8nes6bwlH+CrZGW00Z Jx5M/IIK/cwsSpdQ7j5Aqbr+gLGTFiHSCQXuZTQhzaM+U9FCWDuh1mLfAHttDSkghaCJ 0SxYMPnBSg2x+O4tMF4BwyOTExwqEw4LP7uGTvwT1NeRbMKBqEhLMsgn1Ol9CK+gMfsZ /VApqCuJxIfK4GM6clPoWDiZV22QHYEB8Adk5BLk9ZkoYOaKWW4F7Noqko47iCSAiWaE soShNaNTqBzrmfliWS5r/H6tArMZoyBC0bNPHI41FUq1o3rmRKEFm8eaDDhuV6/IIf9T eH3w== X-Gm-Message-State: APjAAAWaN7LMl80rxM7IK+NMrHTs+Gs/AW1a0gZvTx3fLPDeXL5ynle5 KGAqRta/OYopewhjSOr8h5whfrJH X-Google-Smtp-Source: APXvYqyKNKv+T5H6H2fM7UYYaXaAkga8eEoK6sHNFaQPAi477niDWifmiu/OtJU/1EwPH58+XhVcBQ== X-Received: by 2002:adf:ee10:: with SMTP id y16mr6893034wrn.67.1571668518441; Mon, 21 Oct 2019 07:35:18 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id 200sm4712111wme.32.2019.10.21.07.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:17 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 12/13] drm/rockchip: Avoid drm_dp_link helpers Date: Mon, 21 Oct 2019 16:34:36 +0200 Message-Id: <20191021143437.1477719-13-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MYQpoMFUcXu3ABoddvpPyKW+Nw7qkyPAu+f3Ok9rxto=; b=aiUBfbOWc/VP1KJLz6I8AV4fmLV3NgbP22EsmOhcFMrmeuZeFF0CWunZM1RR8RbMWn wNEvRMzMCoZH9OuuotSu/3Yg5gns8wKZXxl6Y38/8lB0m66kgEbcOTJYgL1gUCktmLK7 WN/DAYQCFQiRrcIItwKBxayhIRLCpmPE40sCc/TRX3af2l/iA46kAawMYT58bGY4ANkj 8tvJN6MduZsDSreWazrXQwcQV1KQfDgmZCQP/aCUR1P7AuNTNnQ5LD+nNOIe918PnKsp XKCINO2nj+F3C1p2UUNTWE+txmkkX45QHBnrsH2qaxj3VW/OqSzdf4gHqxCaTmX0tsqH i4qA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding During the discussion of patches that enhance the drm_dp_link helpers it was concluded that these helpers aren't very useful to begin with. Start pushing the equivalent code into individual drivers to ultimately remove them. Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/rockchip/cdn-dp-core.c | 12 ++++++------ drivers/gpu/drm/rockchip/cdn-dp-core.h | 3 ++- drivers/gpu/drm/rockchip/cdn-dp-reg.c | 19 +++++++++---------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c index d505ea7d5384..eed594bd38d3 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c @@ -477,8 +477,8 @@ static int cdn_dp_disable(struct cdn_dp_device *dp) cdn_dp_set_firmware_active(dp, false); cdn_dp_clk_disable(dp); dp->active = false; - dp->link.rate = 0; - dp->link.num_lanes = 0; + dp->max_lanes = 0; + dp->max_rate = 0; if (!dp->connected) { kfree(dp->edid); dp->edid = NULL; @@ -570,7 +570,7 @@ static bool cdn_dp_check_link_status(struct cdn_dp_device *dp) struct cdn_dp_port *port = cdn_dp_connected_port(dp); u8 sink_lanes = drm_dp_max_lane_count(dp->dpcd); - if (!port || !dp->link.rate || !dp->link.num_lanes) + if (!port || !dp->max_rate || !dp->max_lanes) return false; if (cdn_dp_dpcd_read(dp, DP_LANE0_1_STATUS, link_status, @@ -952,8 +952,8 @@ static void cdn_dp_pd_event_work(struct work_struct *work) /* Enabled and connected with a sink, re-train if requested */ } else if (!cdn_dp_check_link_status(dp)) { - unsigned int rate = dp->link.rate; - unsigned int lanes = dp->link.num_lanes; + unsigned int rate = dp->max_rate; + unsigned int lanes = dp->max_lanes; struct drm_display_mode *mode = &dp->mode; DRM_DEV_INFO(dp->dev, "Connected with sink. Re-train link\n"); @@ -966,7 +966,7 @@ static void cdn_dp_pd_event_work(struct work_struct *work) /* If training result is changed, update the video config */ if (mode->clock && - (rate != dp->link.rate || lanes != dp->link.num_lanes)) { + (rate != dp->max_rate || lanes != dp->max_lanes)) { ret = cdn_dp_config_video(dp); if (ret) { dp->connected = false; diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.h b/drivers/gpu/drm/rockchip/cdn-dp-core.h index b85ea89eb60b..83c4586665b4 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-core.h +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.h @@ -92,9 +92,10 @@ struct cdn_dp_device { struct reset_control *core_rst; struct audio_info audio_info; struct video_info video_info; - struct drm_dp_link link; struct cdn_dp_port *port[MAX_PHY]; u8 ports; + u8 max_lanes; + u8 max_rate; u8 lanes; int active_port; diff --git a/drivers/gpu/drm/rockchip/cdn-dp-reg.c b/drivers/gpu/drm/rockchip/cdn-dp-reg.c index 077c87021908..7361c07cb4a7 100644 --- a/drivers/gpu/drm/rockchip/cdn-dp-reg.c +++ b/drivers/gpu/drm/rockchip/cdn-dp-reg.c @@ -535,8 +535,8 @@ static int cdn_dp_get_training_status(struct cdn_dp_device *dp) if (ret) goto err_get_training_status; - dp->link.rate = drm_dp_bw_code_to_link_rate(status[0]); - dp->link.num_lanes = status[1]; + dp->max_rate = drm_dp_bw_code_to_link_rate(status[0]); + dp->max_lanes = status[1]; err_get_training_status: if (ret) @@ -560,8 +560,8 @@ int cdn_dp_train_link(struct cdn_dp_device *dp) return ret; } - DRM_DEV_DEBUG_KMS(dp->dev, "rate:0x%x, lanes:%d\n", dp->link.rate, - dp->link.num_lanes); + DRM_DEV_DEBUG_KMS(dp->dev, "rate:0x%x, lanes:%d\n", dp->max_rate, + dp->max_lanes); return ret; } @@ -639,7 +639,7 @@ int cdn_dp_config_video(struct cdn_dp_device *dp) bit_per_pix = (video->color_fmt == YCBCR_4_2_2) ? (video->color_depth * 2) : (video->color_depth * 3); - link_rate = dp->link.rate / 1000; + link_rate = dp->max_rate / 1000; ret = cdn_dp_reg_write(dp, BND_HSYNC2VSYNC, VIF_BYPASS_INTERLACE); if (ret) @@ -659,14 +659,13 @@ int cdn_dp_config_video(struct cdn_dp_device *dp) do { tu_size_reg += 2; symbol = tu_size_reg * mode->clock * bit_per_pix; - do_div(symbol, dp->link.num_lanes * link_rate * 8); + do_div(symbol, dp->max_lanes * link_rate * 8); rem = do_div(symbol, 1000); if (tu_size_reg > 64) { ret = -EINVAL; DRM_DEV_ERROR(dp->dev, "tu error, clk:%d, lanes:%d, rate:%d\n", - mode->clock, dp->link.num_lanes, - link_rate); + mode->clock, dp->max_lanes, link_rate); goto err_config_video; } } while ((symbol <= 1) || (tu_size_reg - symbol < 4) || @@ -680,7 +679,7 @@ int cdn_dp_config_video(struct cdn_dp_device *dp) /* set the FIFO Buffer size */ val = div_u64(mode->clock * (symbol + 1), 1000) + link_rate; - val /= (dp->link.num_lanes * link_rate); + val /= (dp->max_lanes * link_rate); val = div_u64(8 * (symbol + 1), bit_per_pix) - val; val += 2; ret = cdn_dp_reg_write(dp, DP_VC_TABLE(15), val); @@ -833,7 +832,7 @@ static void cdn_dp_audio_config_i2s(struct cdn_dp_device *dp, u32 val; if (audio->channels == 2) { - if (dp->link.num_lanes == 1) + if (dp->max_lanes == 1) sub_pckt_num = 2; else sub_pckt_num = 4; From patchwork Mon Oct 21 14:34:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11202365 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0180C112C for ; Mon, 21 Oct 2019 14:35:30 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DDE9D2173B for ; Mon, 21 Oct 2019 14:35:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DDE9D2173B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 17DF189203; Mon, 21 Oct 2019 14:35:29 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 74F816E130 for ; Mon, 21 Oct 2019 14:35:23 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id b24so13042512wmj.5 for ; Mon, 21 Oct 2019 07:35:23 -0700 (PDT) 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=7RqTwp979GSzSXTOWnkQW97XL+wjl8EHNxoH+lrV67c=; b=KZYz6I+0TejfqUnAIMdWpFVWWb9oN5aajF0V1PZb1xYsxMg+Ja0imbbmLmOQiNRABl InCNWlxk1sa7W+Lqz6lu0MD5eSzbLqhFdTjKaKEXN37SHFVoCl8gg/gFnep9XbdXxdqO x9McFe6qBJFAugqvc5qdwIouXdaLNtwd6Nif9Ni7wKmykkRKVqdpwbcP2FmTy9vPAhj1 GjHQStCPFrmzq+O4ANty8U5KiG0OAvhOQT75mO/wSyT+aduJJyAvBRPRI/fIijHjx9dW VhzLI/LGNebwaiMeToVwTSHx7Kd2YHpZC963gFopNfwrVMREMsY6SgFjEh9AbdfLQFz7 Vrxw== X-Gm-Message-State: APjAAAVF0pDFWQUDvZ+Z7fyYzq8Gym+wbxRfP7x0Ua4jXRjXF6wM757E Gse+iAr6BUYGXI37ChyKn5xjGcRr X-Google-Smtp-Source: APXvYqwip30pdwc4XaIvLHZAQJnbK9opXYtTqPXU3dmMOvDzRBMqYdpEoMMYfnSvJq6UvHhzO1Yl2A== X-Received: by 2002:a1c:f201:: with SMTP id s1mr18480541wmc.59.1571668521070; Mon, 21 Oct 2019 07:35:21 -0700 (PDT) Received: from localhost (p2E5BE2CE.dip0.t-ipconnect.de. [46.91.226.206]) by smtp.gmail.com with ESMTPSA id z189sm18131276wmc.25.2019.10.21.07.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 07:35:19 -0700 (PDT) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [PATCH v3 13/13] drm/tegra: Move drm_dp_link helpers to Tegra DRM Date: Mon, 21 Oct 2019 16:34:37 +0200 Message-Id: <20191021143437.1477719-14-thierry.reding@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021143437.1477719-1-thierry.reding@gmail.com> References: <20191021143437.1477719-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7RqTwp979GSzSXTOWnkQW97XL+wjl8EHNxoH+lrV67c=; b=NelyE2MnHHPV552G2Ut0LTswJ7pUAO4HF7lXLjWgcl4ib4rdiQ5btJ0LJDeuSdGNfi 5YmgeGqKCkT6XJ0hgZqRf8D1rfFqxey/20dzlGYm7DCqqHpkc2cjjdwRU76WFtqUBPBL Ah3EEOvp1DChG8W8DhzH3IZMNtJGjzKfBwCTjrKDltO5avHVI4c52eXNcy1tXSLt+i8U TRVexvd0RruI8+6RmWnWxm9jDH1+l/OzwDayElR2H2gXYTfBGE+YL/AkZIR6UYap7O6w BE/lP+bCJb1x3OjOzvZhkarrSedhY83Rc/jsXViA7YNUnimlhdHSvmhY9bLY3acU63ut MtvQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Thierry Reding During the discussion of patches that enhance the drm_dp_link helpers it was concluded that these helpers aren't very useful to begin with. After all other drivers have been converted not to use these helpers anymore, move these helpers into the last remaining user: Tegra DRM. If at some point these helpers are deemed more widely useful, they can be moved out into the DRM DP helpers again. Signed-off-by: Thierry Reding Reviewed-by: Daniel Vetter --- drivers/gpu/drm/drm_dp_helper.c | 128 ------------------------------ drivers/gpu/drm/tegra/Makefile | 1 + drivers/gpu/drm/tegra/dp.c | 133 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/tegra/dp.h | 26 +++++++ drivers/gpu/drm/tegra/dpaux.c | 1 + drivers/gpu/drm/tegra/sor.c | 1 + include/drm/drm_dp_helper.h | 16 ---- 7 files changed, 162 insertions(+), 144 deletions(-) create mode 100644 drivers/gpu/drm/tegra/dp.c create mode 100644 drivers/gpu/drm/tegra/dp.h diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index f567141aff54..2c7870aef469 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -351,134 +351,6 @@ int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, } EXPORT_SYMBOL(drm_dp_dpcd_read_link_status); -/** - * drm_dp_link_probe() - probe a DisplayPort link for capabilities - * @aux: DisplayPort AUX channel - * @link: pointer to structure in which to return link capabilities - * - * The structure filled in by this function can usually be passed directly - * into drm_dp_link_power_up() and drm_dp_link_configure() to power up and - * configure the link based on the link's capabilities. - * - * Returns 0 on success or a negative error code on failure. - */ -int drm_dp_link_probe(struct drm_dp_aux *aux, struct drm_dp_link *link) -{ - u8 values[3]; - int err; - - memset(link, 0, sizeof(*link)); - - err = drm_dp_dpcd_read(aux, DP_DPCD_REV, values, sizeof(values)); - if (err < 0) - return err; - - link->revision = values[0]; - link->rate = drm_dp_bw_code_to_link_rate(values[1]); - link->num_lanes = values[2] & DP_MAX_LANE_COUNT_MASK; - - if (values[2] & DP_ENHANCED_FRAME_CAP) - link->capabilities |= DP_LINK_CAP_ENHANCED_FRAMING; - - return 0; -} -EXPORT_SYMBOL(drm_dp_link_probe); - -/** - * drm_dp_link_power_up() - power up a DisplayPort link - * @aux: DisplayPort AUX channel - * @link: pointer to a structure containing the link configuration - * - * Returns 0 on success or a negative error code on failure. - */ -int drm_dp_link_power_up(struct drm_dp_aux *aux, struct drm_dp_link *link) -{ - u8 value; - int err; - - /* DP_SET_POWER register is only available on DPCD v1.1 and later */ - if (link->revision < 0x11) - return 0; - - err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); - if (err < 0) - return err; - - value &= ~DP_SET_POWER_MASK; - value |= DP_SET_POWER_D0; - - err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); - if (err < 0) - return err; - - /* - * According to the DP 1.1 specification, a "Sink Device must exit the - * power saving state within 1 ms" (Section 2.5.3.1, Table 5-52, "Sink - * Control Field" (register 0x600). - */ - usleep_range(1000, 2000); - - return 0; -} -EXPORT_SYMBOL(drm_dp_link_power_up); - -/** - * drm_dp_link_power_down() - power down a DisplayPort link - * @aux: DisplayPort AUX channel - * @link: pointer to a structure containing the link configuration - * - * Returns 0 on success or a negative error code on failure. - */ -int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link) -{ - u8 value; - int err; - - /* DP_SET_POWER register is only available on DPCD v1.1 and later */ - if (link->revision < 0x11) - return 0; - - err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); - if (err < 0) - return err; - - value &= ~DP_SET_POWER_MASK; - value |= DP_SET_POWER_D3; - - err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); - if (err < 0) - return err; - - return 0; -} -EXPORT_SYMBOL(drm_dp_link_power_down); - -/** - * drm_dp_link_configure() - configure a DisplayPort link - * @aux: DisplayPort AUX channel - * @link: pointer to a structure containing the link configuration - * - * Returns 0 on success or a negative error code on failure. - */ -int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link) -{ - u8 values[2]; - int err; - - values[0] = drm_dp_link_rate_to_bw_code(link->rate); - values[1] = link->num_lanes; - - if (link->capabilities & DP_LINK_CAP_ENHANCED_FRAMING) - values[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; - - err = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, values, sizeof(values)); - if (err < 0) - return err; - - return 0; -} -EXPORT_SYMBOL(drm_dp_link_configure); - /** * drm_dp_downstream_max_clock() - extract branch device max * pixel rate for legacy VGA diff --git a/drivers/gpu/drm/tegra/Makefile b/drivers/gpu/drm/tegra/Makefile index 33c463e8d49f..d6cf202414f0 100644 --- a/drivers/gpu/drm/tegra/Makefile +++ b/drivers/gpu/drm/tegra/Makefile @@ -5,6 +5,7 @@ tegra-drm-y := \ drm.o \ gem.o \ fb.o \ + dp.o \ hub.o \ plane.o \ dc.o \ diff --git a/drivers/gpu/drm/tegra/dp.c b/drivers/gpu/drm/tegra/dp.c new file mode 100644 index 000000000000..50ba967ebcbd --- /dev/null +++ b/drivers/gpu/drm/tegra/dp.c @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright (C) 2013-2019 NVIDIA Corporation + * Copyright (C) 2015 Rob Clark + */ + +#include + +#include "dp.h" + +/** + * drm_dp_link_probe() - probe a DisplayPort link for capabilities + * @aux: DisplayPort AUX channel + * @link: pointer to structure in which to return link capabilities + * + * The structure filled in by this function can usually be passed directly + * into drm_dp_link_power_up() and drm_dp_link_configure() to power up and + * configure the link based on the link's capabilities. + * + * Returns 0 on success or a negative error code on failure. + */ +int drm_dp_link_probe(struct drm_dp_aux *aux, struct drm_dp_link *link) +{ + u8 values[3]; + int err; + + memset(link, 0, sizeof(*link)); + + err = drm_dp_dpcd_read(aux, DP_DPCD_REV, values, sizeof(values)); + if (err < 0) + return err; + + link->revision = values[0]; + link->rate = drm_dp_bw_code_to_link_rate(values[1]); + link->num_lanes = values[2] & DP_MAX_LANE_COUNT_MASK; + + if (values[2] & DP_ENHANCED_FRAME_CAP) + link->capabilities |= DP_LINK_CAP_ENHANCED_FRAMING; + + return 0; +} + +/** + * drm_dp_link_power_up() - power up a DisplayPort link + * @aux: DisplayPort AUX channel + * @link: pointer to a structure containing the link configuration + * + * Returns 0 on success or a negative error code on failure. + */ +int drm_dp_link_power_up(struct drm_dp_aux *aux, struct drm_dp_link *link) +{ + u8 value; + int err; + + /* DP_SET_POWER register is only available on DPCD v1.1 and later */ + if (link->revision < 0x11) + return 0; + + err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); + if (err < 0) + return err; + + value &= ~DP_SET_POWER_MASK; + value |= DP_SET_POWER_D0; + + err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); + if (err < 0) + return err; + + /* + * According to the DP 1.1 specification, a "Sink Device must exit the + * power saving state within 1 ms" (Section 2.5.3.1, Table 5-52, "Sink + * Control Field" (register 0x600). + */ + usleep_range(1000, 2000); + + return 0; +} + +/** + * drm_dp_link_power_down() - power down a DisplayPort link + * @aux: DisplayPort AUX channel + * @link: pointer to a structure containing the link configuration + * + * Returns 0 on success or a negative error code on failure. + */ +int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link) +{ + u8 value; + int err; + + /* DP_SET_POWER register is only available on DPCD v1.1 and later */ + if (link->revision < 0x11) + return 0; + + err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); + if (err < 0) + return err; + + value &= ~DP_SET_POWER_MASK; + value |= DP_SET_POWER_D3; + + err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); + if (err < 0) + return err; + + return 0; +} + +/** + * drm_dp_link_configure() - configure a DisplayPort link + * @aux: DisplayPort AUX channel + * @link: pointer to a structure containing the link configuration + * + * Returns 0 on success or a negative error code on failure. + */ +int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link) +{ + u8 values[2]; + int err; + + values[0] = drm_dp_link_rate_to_bw_code(link->rate); + values[1] = link->num_lanes; + + if (link->capabilities & DP_LINK_CAP_ENHANCED_FRAMING) + values[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + + err = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, values, sizeof(values)); + if (err < 0) + return err; + + return 0; +} diff --git a/drivers/gpu/drm/tegra/dp.h b/drivers/gpu/drm/tegra/dp.h new file mode 100644 index 000000000000..ca99a21d9686 --- /dev/null +++ b/drivers/gpu/drm/tegra/dp.h @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright (C) 2013-2019 NVIDIA Corporation. + * Copyright (C) 2015 Rob Clark + */ + +#ifndef DRM_TEGRA_DP_H +#define DRM_TEGRA_DP_H 1 + +struct drm_dp_aux; + +#define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0) + +struct drm_dp_link { + unsigned char revision; + unsigned int rate; + unsigned int num_lanes; + unsigned long capabilities; +}; + +int drm_dp_link_probe(struct drm_dp_aux *aux, struct drm_dp_link *link); +int drm_dp_link_power_up(struct drm_dp_aux *aux, struct drm_dp_link *link); +int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link); +int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link); + +#endif diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c index a0f6f9b0d258..1144605c9737 100644 --- a/drivers/gpu/drm/tegra/dpaux.c +++ b/drivers/gpu/drm/tegra/dpaux.c @@ -22,6 +22,7 @@ #include #include +#include "dp.h" #include "dpaux.h" #include "drm.h" #include "trace.h" diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index 57693260245e..91d5c5041d2c 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -25,6 +25,7 @@ #include #include "dc.h" +#include "dp.h" #include "drm.h" #include "hda.h" #include "sor.h" diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index 04f6c0bb0274..51ecb5112ef8 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1455,22 +1455,6 @@ static inline ssize_t drm_dp_dpcd_writeb(struct drm_dp_aux *aux, int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, u8 status[DP_LINK_STATUS_SIZE]); -/* - * DisplayPort link - */ -#define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0) - -struct drm_dp_link { - unsigned char revision; - unsigned int rate; - unsigned int num_lanes; - unsigned long capabilities; -}; - -int drm_dp_link_probe(struct drm_dp_aux *aux, struct drm_dp_link *link); -int drm_dp_link_power_up(struct drm_dp_aux *aux, struct drm_dp_link *link); -int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link); -int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link); int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 port_cap[4]); int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],