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>, linux-kernel@vger.kernel.org Subject: [RFC PATCH 07/22] thunderbolt: Add default linking between ports if not provided by DROM Date: Tue, 1 Oct 2019 14:38:15 +0300 Message-ID: <20191001113830.13028-8-mika.westerberg@linux.intel.com> (raw) In-Reply-To: <20191001113830.13028-1-mika.westerberg@linux.intel.com> Some cases the DROM information is not correct or is simply missing. This prevents establishing lane bonding even if it would be possible otherwise. To make this work better provide default linking between ports if DROM has not provided that information. This works with legacy devices where ports 1 and 2, and 3 and 4 are linked together and also with USB4. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/thunderbolt/eeprom.c | 11 ----------- drivers/thunderbolt/switch.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/drivers/thunderbolt/eeprom.c b/drivers/thunderbolt/eeprom.c index ee5196479854..8dd7de0cc826 100644 --- a/drivers/thunderbolt/eeprom.c +++ b/drivers/thunderbolt/eeprom.c @@ -514,17 +514,6 @@ int tb_drom_read(struct tb_switch *sw) * no entries). Hardcode the configuration here. */ tb_drom_read_uid_only(sw, &sw->uid); - - sw->ports[1].link_nr = 0; - sw->ports[2].link_nr = 1; - sw->ports[1].dual_link_port = &sw->ports[2]; - sw->ports[2].dual_link_port = &sw->ports[1]; - - sw->ports[3].link_nr = 0; - sw->ports[4].link_nr = 1; - sw->ports[3].dual_link_port = &sw->ports[4]; - sw->ports[4].dual_link_port = &sw->ports[3]; - return 0; } diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c index 2b00ea7a979a..f7547287be68 100644 --- a/drivers/thunderbolt/switch.c +++ b/drivers/thunderbolt/switch.c @@ -1904,6 +1904,36 @@ static int tb_switch_add_dma_port(struct tb_switch *sw) return -ESHUTDOWN; } +static void tb_switch_default_link_ports(struct tb_switch *sw) +{ + int i; + + for (i = 1; i <= sw->config.max_port_number; i += 2) { + struct tb_port *port = &sw->ports[i]; + struct tb_port *subordinate; + + if (!tb_port_is_null(port)) + continue; + + /* Check for the subordinate port */ + if (i == sw->config.max_port_number || + !tb_port_is_null(&sw->ports[i + 1])) + continue; + + /* Link them if not already done so (by DROM) */ + subordinate = &sw->ports[i + 1]; + if (!port->dual_link_port && !subordinate->dual_link_port) { + port->link_nr = 0; + port->dual_link_port = subordinate; + subordinate->link_nr = 1; + subordinate->dual_link_port = port; + + tb_sw_dbg(sw, "linked ports %d <-> %d\n", + port->port, subordinate->port); + } + } +} + static bool tb_switch_lane_bonding_possible(struct tb_switch *sw) { const struct tb_port *up = tb_upstream_port(sw); @@ -2071,6 +2101,8 @@ int tb_switch_add(struct tb_switch *sw) return ret; } + tb_switch_default_link_ports(sw); + ret = tb_switch_update_link_attributes(sw); if (ret) return ret; -- 2.23.0
next prev parent reply index Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-10-01 11:38 [RFC PATCH 00/22] thunderbolt: Add support for USB4 Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 01/22] thunderbolt: Introduce tb_switch_is_icm() Mika Westerberg 2019-10-01 12:10 ` Greg Kroah-Hartman 2019-10-01 12:46 ` Mika Westerberg 2019-10-01 13:36 ` Mario.Limonciello 2019-10-01 13:48 ` Mika Westerberg 2019-10-01 13:50 ` Mario.Limonciello 2019-10-01 13:52 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 02/22] thunderbolt: Log switch route string on config read/write timeout Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 03/22] thunderbolt: Log warning if adding switch fails Mika Westerberg 2019-10-01 12:18 ` Greg Kroah-Hartman 2019-10-01 12:48 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 04/22] thunderbolt: Make tb_sw_write() take const parameter Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 05/22] thunderbolt: Add helper macros to iterate over switch ports Mika Westerberg 2019-10-02 14:17 ` Oliver Neukum 2019-10-02 14:28 ` Mika Westerberg 2019-10-06 12:15 ` Lukas Wunner 2019-10-01 11:38 ` [RFC PATCH 06/22] thunderbolt: Add support for lane bonding Mika Westerberg 2019-10-01 12:38 ` Greg Kroah-Hartman 2019-10-01 12:53 ` Mika Westerberg 2019-10-02 14:21 ` Oliver Neukum 2019-10-02 14:30 ` Mika Westerberg 2019-10-03 8:25 ` Oliver Neukum 2019-10-03 8:53 ` Mika Westerberg 2019-10-01 11:38 ` Mika Westerberg [this message] 2019-10-01 12:39 ` [RFC PATCH 07/22] thunderbolt: Add default linking between ports if not provided by DROM Greg Kroah-Hartman 2019-10-01 13:14 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 08/22] thunderbolt: Add downstream PCIe port mappings for Alpine and Titan Ridge Mika Westerberg 2019-10-01 12:40 ` Greg Kroah-Hartman 2019-10-01 13:27 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 09/22] thunderbolt: Convert basic adapter register names to follow the USB4 spec Mika Westerberg 2019-10-01 12:41 ` Greg Kroah-Hartman 2019-10-01 13:28 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 10/22] thunderbolt: Convert PCIe adapter register names to use USB4 names Mika Westerberg 2019-10-01 12:42 ` Greg Kroah-Hartman 2019-10-01 11:38 ` [RFC PATCH 11/22] thunderbolt: Convert DP adapter register names to follow the USB4 spec Mika Westerberg 2019-10-01 12:42 ` Greg Kroah-Hartman 2019-10-01 11:38 ` [RFC PATCH 12/22] thunderbolt: Add Display Port CM handshake for Titan Ridge devices Mika Westerberg 2019-10-01 12:44 ` Greg Kroah-Hartman 2019-10-01 13:30 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 13/22] thunderbolt: Add Display Port adapter pairing and resource management Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 14/22] thunderbolt: Add bandwidth management for Display Port tunnels Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 15/22] thunderbolt: Make tb_find_port() available to other files Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 16/22] thunderbolt: Call tb_eeprom_get_drom_offset() from tb_eeprom_read_n() Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 17/22] thunderbolt: Add initial support for USB4 Mika Westerberg 2019-10-01 12:47 ` Greg Kroah-Hartman 2019-10-01 13:09 ` Mika Westerberg 2019-10-01 14:53 ` Greg Kroah-Hartman 2019-10-01 14:59 ` Mario.Limonciello 2019-10-01 15:13 ` Mika Westerberg 2019-10-01 15:22 ` Greg KH 2019-10-01 15:32 ` Mika Westerberg 2019-10-01 15:07 ` Mika Westerberg 2019-10-01 15:19 ` Greg Kroah-Hartman 2019-10-01 15:26 ` Mika Westerberg 2019-10-01 16:27 ` Oliver Neukum 2019-10-02 8:30 ` Mika Westerberg 2019-10-02 8:39 ` Greg Kroah-Hartman 2019-10-02 8:49 ` Mika Westerberg 2019-10-01 17:05 ` Mario.Limonciello 2019-10-01 18:14 ` Mario.Limonciello 2019-10-02 8:39 ` Mika Westerberg 2019-10-02 15:09 ` Mario.Limonciello 2019-10-02 15:36 ` Yehezkel Bernat 2019-10-02 16:00 ` Mario.Limonciello 2019-10-03 8:00 ` Mika Westerberg 2019-10-03 14:41 ` Mario.Limonciello 2019-10-04 7:54 ` Mika Westerberg 2019-10-04 8:07 ` Yehezkel Bernat 2019-10-04 8:19 ` Mika Westerberg 2019-10-04 11:19 ` Yehezkel Bernat 2019-10-04 14:05 ` Mario.Limonciello 2019-10-04 14:19 ` Mario.Limonciello 2019-10-04 14:21 ` Mika Westerberg [not found] ` <1570201357.2.0@kellner.me> 2019-10-04 15:16 ` Mika Westerberg 2019-10-04 15:22 ` Christian Kellner 2019-10-02 8:34 ` Mika Westerberg 2019-10-02 15:04 ` Mario.Limonciello 2019-10-01 11:38 ` [RFC PATCH 18/22] thunderbolt: Make tb_switch_find_cap() available to other files Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 19/22] thunderbolt: Add support for Time Management Unit Mika Westerberg 2019-10-02 16:52 ` Mani, Rajmohan 2019-10-03 8:01 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 20/22] thunderbolt: Add support for USB tunnels Mika Westerberg 2019-10-03 8:42 ` Oliver Neukum 2019-10-03 8:52 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 21/22] thunderbolt: Update documentation with the USB4 information Mika Westerberg 2019-10-01 14:17 ` Mario.Limonciello 2019-10-01 14:21 ` Mika Westerberg 2019-10-01 11:38 ` [RFC PATCH 22/22] thunderbolt: Do not start firmware unless asked by the user Mika Westerberg 2019-10-01 14:43 ` Mario.Limonciello 2019-10-01 14:58 ` Mika Westerberg 2019-10-01 16:53 ` Mario.Limonciello 2019-10-02 8:48 ` Mika Westerberg 2019-10-01 12:49 ` [RFC PATCH 00/22] thunderbolt: Add support for USB4 Greg Kroah-Hartman 2019-10-01 13:42 ` Mika Westerberg
Reply instructions: You may reply publically 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=20191001113830.13028-8-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=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=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
Linux-USB Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-usb/0 linux-usb/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-usb linux-usb/ https://lore.kernel.org/linux-usb \ linux-usb@vger.kernel.org public-inbox-index linux-usb Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-usb AGPL code for this site: git clone https://public-inbox.org/public-inbox.git