From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: linux-usb@vger.kernel.org
Cc: Andreas Noever <andreas.noever@gmail.com>,
Michael Jamet <michael.jamet@intel.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Yehezkel Bernat <YehezkelShB@gmail.com>,
Rajmohan Mani <rajmohan.mani@intel.com>,
Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>,
Lukas Wunner <lukas@wunner.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alan Stern <stern@rowland.harvard.edu>,
Mario.Limonciello@dell.com,
Anthony Wong <anthony.wong@canonical.com>,
Oliver Neukum <oneukum@suse.com>,
Christian Kellner <ckellner@redhat.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH 14/25] thunderbolt: Add Display Port CM handshake for Titan Ridge devices
Date: Wed, 23 Oct 2019 14:21:43 +0300 [thread overview]
Message-ID: <20191023112154.64235-15-mika.westerberg@linux.intel.com> (raw)
In-Reply-To: <20191023112154.64235-1-mika.westerberg@linux.intel.com>
Titan Ridge needs an additional connection manager handshake in order to
do proper Display Port tunneling so implement it here.
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
drivers/thunderbolt/tb_regs.h | 3 +++
drivers/thunderbolt/tunnel.c | 45 +++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/drivers/thunderbolt/tb_regs.h b/drivers/thunderbolt/tb_regs.h
index 3a39490a954b..8d11b4a2d552 100644
--- a/drivers/thunderbolt/tb_regs.h
+++ b/drivers/thunderbolt/tb_regs.h
@@ -252,6 +252,9 @@ struct tb_regs_port_header {
#define ADP_DP_CS_3_HDPC BIT(9)
#define DP_LOCAL_CAP 0x04
#define DP_REMOTE_CAP 0x05
+#define DP_STATUS_CTRL 0x06
+#define DP_STATUS_CTRL_CMHS BIT(25)
+#define DP_STATUS_CTRL_UF BIT(26)
/* PCIe adapter registers */
#define ADP_PCIE_CS_0 0x00
diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c
index 3353396e0806..009c2683a386 100644
--- a/drivers/thunderbolt/tunnel.c
+++ b/drivers/thunderbolt/tunnel.c
@@ -6,6 +6,7 @@
* Copyright (C) 2019, Intel Corporation
*/
+#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/list.h>
@@ -242,6 +243,42 @@ struct tb_tunnel *tb_tunnel_alloc_pci(struct tb *tb, struct tb_port *up,
return tunnel;
}
+static int tb_dp_cm_handshake(struct tb_port *in, struct tb_port *out)
+{
+ int timeout = 10;
+ u32 val;
+ int ret;
+
+ /* Both ends need to support this */
+ if (!tb_switch_is_titan_ridge(in->sw) ||
+ !tb_switch_is_titan_ridge(out->sw))
+ return 0;
+
+ ret = tb_port_read(out, &val, TB_CFG_PORT,
+ out->cap_adap + DP_STATUS_CTRL, 1);
+ if (ret)
+ return ret;
+
+ val |= DP_STATUS_CTRL_UF | DP_STATUS_CTRL_CMHS;
+
+ ret = tb_port_write(out, &val, TB_CFG_PORT,
+ out->cap_adap + DP_STATUS_CTRL, 1);
+ if (ret)
+ return ret;
+
+ do {
+ ret = tb_port_read(out, &val, TB_CFG_PORT,
+ out->cap_adap + DP_STATUS_CTRL, 1);
+ if (ret)
+ return ret;
+ if (!(val & DP_STATUS_CTRL_CMHS))
+ return 0;
+ usleep_range(10, 100);
+ } while (timeout--);
+
+ return -ETIMEDOUT;
+}
+
static int tb_dp_xchg_caps(struct tb_tunnel *tunnel)
{
struct tb_port *out = tunnel->dst_port;
@@ -256,6 +293,14 @@ static int tb_dp_xchg_caps(struct tb_tunnel *tunnel)
if (in->sw->generation < 2 || out->sw->generation < 2)
return 0;
+ /*
+ * Perform connection manager handshake between IN and OUT ports
+ * before capabilities exchange can take place.
+ */
+ ret = tb_dp_cm_handshake(in, out);
+ if (ret)
+ return ret;
+
/* Read both DP_LOCAL_CAP registers */
ret = tb_port_read(in, &in_dp_cap, TB_CFG_PORT,
in->cap_adap + DP_LOCAL_CAP, 1);
--
2.23.0
next prev parent reply other threads:[~2019-10-23 11:23 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-23 11:21 [PATCH 00/25] thunderbolt: Add support for USB4 Mika Westerberg
2019-10-23 11:21 ` [PATCH 01/25] thunderbolt: Introduce tb_switch_is_icm() Mika Westerberg
2019-10-23 11:21 ` [PATCH 02/25] thunderbolt: Log switch route string on config read/write timeout Mika Westerberg
2019-10-23 11:21 ` [PATCH 03/25] thunderbolt: Log error if adding switch fails Mika Westerberg
2019-10-23 11:21 ` [PATCH 04/25] thunderbolt: Convert basic adapter register names to follow the USB4 spec Mika Westerberg
2019-10-23 11:21 ` [PATCH 05/25] thunderbolt: Convert PCIe " Mika Westerberg
2019-10-23 11:21 ` [PATCH 06/25] thunderbolt: Convert DP " Mika Westerberg
2019-10-23 11:21 ` [PATCH 07/25] thunderbolt: Make tb_sw_write() take const parameter Mika Westerberg
2019-10-23 11:21 ` [PATCH 08/25] thunderbolt: Add helper macro to iterate over switch ports Mika Westerberg
2019-10-23 11:21 ` [PATCH 09/25] thunderbolt: Refactor add_switch() into two functions Mika Westerberg
2019-10-23 11:21 ` [PATCH 10/25] thunderbolt: Add support for lane bonding Mika Westerberg
2019-10-23 11:21 ` [PATCH 11/25] thunderbolt: Add default linking between lane adapters if not provided by DROM Mika Westerberg
2019-10-23 11:21 ` [PATCH 12/25] thunderbolt: Expand controller name in tb_switch_is_xy() Mika Westerberg
2019-10-23 11:21 ` [PATCH 13/25] thunderbolt: Add downstream PCIe port mappings for Alpine and Titan Ridge Mika Westerberg
2019-10-23 11:21 ` Mika Westerberg [this message]
2019-10-23 11:21 ` [PATCH 15/25] thunderbolt: Add Display Port adapter pairing and resource management Mika Westerberg
2019-10-23 11:21 ` [PATCH 16/25] thunderbolt: Add bandwidth management for Display Port tunnels Mika Westerberg
2019-10-23 11:21 ` [PATCH 17/25] thunderbolt: Do not start firmware unless asked by the user Mika Westerberg
2019-10-23 11:21 ` [PATCH 18/25] thunderbolt: Make tb_find_port() available to other files Mika Westerberg
2019-10-23 11:21 ` [PATCH 19/25] thunderbolt: Call tb_eeprom_get_drom_offset() from tb_eeprom_read_n() Mika Westerberg
2019-10-23 11:21 ` [PATCH 20/25] thunderbolt: Add initial support for USB4 Mika Westerberg
2019-10-23 11:21 ` [PATCH 21/25] thunderbolt: Update Kconfig entry to USB4 Mika Westerberg
2019-10-23 11:21 ` [PATCH 22/25] thunderbolt: Make tb_switch_find_cap() available to other files Mika Westerberg
2019-10-23 11:21 ` [PATCH 23/25] thunderbolt: Add support for Time Management Unit Mika Westerberg
2019-10-23 11:21 ` [PATCH 24/25] thunderbolt: Add support for USB 3.x tunnels Mika Westerberg
2019-10-23 11:21 ` [PATCH 25/25] thunderbolt: Update documentation with the USB4 information Mika Westerberg
2019-10-23 15:55 ` [PATCH 00/25] thunderbolt: Add support for USB4 Mario.Limonciello
2019-10-23 16:18 ` Mika Westerberg
2019-11-01 11:43 ` Mika Westerberg
2019-11-04 14:31 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191023112154.64235-15-mika.westerberg@linux.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=Mario.Limonciello@dell.com \
--cc=YehezkelShB@gmail.com \
--cc=andreas.noever@gmail.com \
--cc=anthony.wong@canonical.com \
--cc=ckellner@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=michael.jamet@intel.com \
--cc=nicholas.johnson-opensource@outlook.com.au \
--cc=oneukum@suse.com \
--cc=rajmohan.mani@intel.com \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.