Linux USB
 help / color / mirror / Atom feed
* [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc
@ 2023-01-04  8:05 Mika Westerberg
  2023-01-04  8:05 ` [PATCH 1/3] thunderbolt: Do not call PM runtime functions in tb_retimer_scan() Mika Westerberg
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Mika Westerberg @ 2023-01-04  8:05 UTC (permalink / raw)
  To: linux-usb
  Cc: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel, Mika Westerberg

Hi all,

This series includes a couple of fixes for issues found/reported.

Mika Westerberg (3):
  thunderbolt: Do not call PM runtime functions in tb_retimer_scan()
  thunderbolt: Use correct function to calculate maximum USB3 link rate
  thunderbolt: Disable XDomain lane 1 only in software connection manager

 drivers/thunderbolt/retimer.c | 17 +++--------------
 drivers/thunderbolt/tb.c      | 20 +++++++++++++++-----
 drivers/thunderbolt/tunnel.c  |  2 +-
 drivers/thunderbolt/xdomain.c | 17 ++++++++++++-----
 4 files changed, 31 insertions(+), 25 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] thunderbolt: Do not call PM runtime functions in tb_retimer_scan()
  2023-01-04  8:05 [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Mika Westerberg
@ 2023-01-04  8:05 ` Mika Westerberg
  2023-01-04  8:06 ` [PATCH 2/3] thunderbolt: Use correct function to calculate maximum USB3 link rate Mika Westerberg
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Mika Westerberg @ 2023-01-04  8:05 UTC (permalink / raw)
  To: linux-usb
  Cc: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel, Mika Westerberg

We cannot call PM runtime functions in tb_retimer_scan() because it will
also be called when retimers are scanned from userspace (happens when
there is no device connected on ChromeOS for instance) and at the same
USB4 port runtime resume hook. This leads to hang because neither can
proceed.

Fix this by runtime resuming USB4 ports in tb_scan_port() instead. This
makes sure the ports are runtime PM active when retimers are added under
it while avoiding the reported hang as well.

Reported-by: Utkarsh Patel <utkarsh.h.patel@intel.com>
Fixes: 1e56c88adecc ("thunderbolt: Runtime resume USB4 port when retimers are scanned")
Cc: stable@vger.kernel.org
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/thunderbolt/retimer.c | 17 +++--------------
 drivers/thunderbolt/tb.c      | 20 +++++++++++++++-----
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c
index 6ebe7a2886ec..56008eb91e2e 100644
--- a/drivers/thunderbolt/retimer.c
+++ b/drivers/thunderbolt/retimer.c
@@ -427,13 +427,6 @@ int tb_retimer_scan(struct tb_port *port, bool add)
 {
 	u32 status[TB_MAX_RETIMER_INDEX + 1] = {};
 	int ret, i, last_idx = 0;
-	struct usb4_port *usb4;
-
-	usb4 = port->usb4;
-	if (!usb4)
-		return 0;
-
-	pm_runtime_get_sync(&usb4->dev);
 
 	/*
 	 * Send broadcast RT to make sure retimer indices facing this
@@ -441,7 +434,7 @@ int tb_retimer_scan(struct tb_port *port, bool add)
 	 */
 	ret = usb4_port_enumerate_retimers(port);
 	if (ret)
-		goto out;
+		return ret;
 
 	/*
 	 * Enable sideband channel for each retimer. We can do this
@@ -471,11 +464,11 @@ int tb_retimer_scan(struct tb_port *port, bool add)
 			break;
 	}
 
-	ret = 0;
 	if (!last_idx)
-		goto out;
+		return 0;
 
 	/* Add on-board retimers if they do not exist already */
+	ret = 0;
 	for (i = 1; i <= last_idx; i++) {
 		struct tb_retimer *rt;
 
@@ -489,10 +482,6 @@ int tb_retimer_scan(struct tb_port *port, bool add)
 		}
 	}
 
-out:
-	pm_runtime_mark_last_busy(&usb4->dev);
-	pm_runtime_put_autosuspend(&usb4->dev);
-
 	return ret;
 }
 
diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
index 462845804427..3f1ab30c4fb1 100644
--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -628,11 +628,15 @@ static void tb_scan_port(struct tb_port *port)
 			 * Downstream switch is reachable through two ports.
 			 * Only scan on the primary port (link_nr == 0).
 			 */
+
+	if (port->usb4)
+		pm_runtime_get_sync(&port->usb4->dev);
+
 	if (tb_wait_for_port(port, false) <= 0)
-		return;
+		goto out_rpm_put;
 	if (port->remote) {
 		tb_port_dbg(port, "port already has a remote\n");
-		return;
+		goto out_rpm_put;
 	}
 
 	tb_retimer_scan(port, true);
@@ -647,12 +651,12 @@ static void tb_scan_port(struct tb_port *port)
 		 */
 		if (PTR_ERR(sw) == -EIO || PTR_ERR(sw) == -EADDRNOTAVAIL)
 			tb_scan_xdomain(port);
-		return;
+		goto out_rpm_put;
 	}
 
 	if (tb_switch_configure(sw)) {
 		tb_switch_put(sw);
-		return;
+		goto out_rpm_put;
 	}
 
 	/*
@@ -681,7 +685,7 @@ static void tb_scan_port(struct tb_port *port)
 
 	if (tb_switch_add(sw)) {
 		tb_switch_put(sw);
-		return;
+		goto out_rpm_put;
 	}
 
 	/* Link the switches using both links if available */
@@ -733,6 +737,12 @@ static void tb_scan_port(struct tb_port *port)
 
 	tb_add_dp_resources(sw);
 	tb_scan_switch(sw);
+
+out_rpm_put:
+	if (port->usb4) {
+		pm_runtime_mark_last_busy(&port->usb4->dev);
+		pm_runtime_put_autosuspend(&port->usb4->dev);
+	}
 }
 
 static void tb_deactivate_and_free_tunnel(struct tb_tunnel *tunnel)
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] thunderbolt: Use correct function to calculate maximum USB3 link rate
  2023-01-04  8:05 [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Mika Westerberg
  2023-01-04  8:05 ` [PATCH 1/3] thunderbolt: Do not call PM runtime functions in tb_retimer_scan() Mika Westerberg
@ 2023-01-04  8:06 ` Mika Westerberg
  2023-01-04  8:06 ` [PATCH 3/3] thunderbolt: Disable XDomain lane 1 only in software connection manager Mika Westerberg
  2023-01-04  8:29 ` [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Yehezkel Bernat
  3 siblings, 0 replies; 6+ messages in thread
From: Mika Westerberg @ 2023-01-04  8:06 UTC (permalink / raw)
  To: linux-usb
  Cc: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel, Mika Westerberg

We need to take minimum of both sides of the USB3 link into consideration,
not just the downstream port. Fix this by calling tb_usb3_max_link_rate()
instead.

Fixes: 0bd680cd900c ("thunderbolt: Add USB3 bandwidth management")
Cc: stable@vger.kernel.org
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/thunderbolt/tunnel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c
index 2c3cf7fc3357..1fc3c29b24f8 100644
--- a/drivers/thunderbolt/tunnel.c
+++ b/drivers/thunderbolt/tunnel.c
@@ -1275,7 +1275,7 @@ static void tb_usb3_reclaim_available_bandwidth(struct tb_tunnel *tunnel,
 		return;
 	} else if (!ret) {
 		/* Use maximum link rate if the link valid is not set */
-		ret = usb4_usb3_port_max_link_rate(tunnel->src_port);
+		ret = tb_usb3_max_link_rate(tunnel->dst_port, tunnel->src_port);
 		if (ret < 0) {
 			tb_tunnel_warn(tunnel, "failed to read maximum link rate\n");
 			return;
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] thunderbolt: Disable XDomain lane 1 only in software connection manager
  2023-01-04  8:05 [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Mika Westerberg
  2023-01-04  8:05 ` [PATCH 1/3] thunderbolt: Do not call PM runtime functions in tb_retimer_scan() Mika Westerberg
  2023-01-04  8:06 ` [PATCH 2/3] thunderbolt: Use correct function to calculate maximum USB3 link rate Mika Westerberg
@ 2023-01-04  8:06 ` Mika Westerberg
  2023-01-04  8:29 ` [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Yehezkel Bernat
  3 siblings, 0 replies; 6+ messages in thread
From: Mika Westerberg @ 2023-01-04  8:06 UTC (permalink / raw)
  To: linux-usb
  Cc: Yehezkel Bernat, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel, Mika Westerberg

When firmware connection manager is in use we should not touch the lane
adapter (well or any) configuration space so do this only when we know
that the software connection manager is active.

Fixes: 8e1de7042596 ("thunderbolt: Add support for XDomain lane bonding")
Cc: stable@vger.kernel.org
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/thunderbolt/xdomain.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/thunderbolt/xdomain.c b/drivers/thunderbolt/xdomain.c
index cfa83486c9da..3c51e47dd86b 100644
--- a/drivers/thunderbolt/xdomain.c
+++ b/drivers/thunderbolt/xdomain.c
@@ -1419,12 +1419,19 @@ static int tb_xdomain_get_properties(struct tb_xdomain *xd)
 	 * registered, we notify the userspace that it has changed.
 	 */
 	if (!update) {
-		struct tb_port *port;
+		/*
+		 * Now disable lane 1 if bonding was not enabled. Do
+		 * this only if bonding was possible at the beginning
+		 * (that is we are the connection manager and there are
+		 * two lanes).
+		 */
+		if (xd->bonding_possible) {
+			struct tb_port *port;
 
-		/* Now disable lane 1 if bonding was not enabled */
-		port = tb_port_at(xd->route, tb_xdomain_parent(xd));
-		if (!port->bonded)
-			tb_port_disable(port->dual_link_port);
+			port = tb_port_at(xd->route, tb_xdomain_parent(xd));
+			if (!port->bonded)
+				tb_port_disable(port->dual_link_port);
+		}
 
 		if (device_add(&xd->dev)) {
 			dev_err(&xd->dev, "failed to add XDomain device\n");
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc
  2023-01-04  8:05 [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Mika Westerberg
                   ` (2 preceding siblings ...)
  2023-01-04  8:06 ` [PATCH 3/3] thunderbolt: Disable XDomain lane 1 only in software connection manager Mika Westerberg
@ 2023-01-04  8:29 ` Yehezkel Bernat
  2023-01-09  8:46   ` Mika Westerberg
  3 siblings, 1 reply; 6+ messages in thread
From: Yehezkel Bernat @ 2023-01-04  8:29 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: linux-usb, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel

On Wed, Jan 4, 2023 at 10:07 AM Mika Westerberg
<mika.westerberg@linux.intel.com> wrote:
>
> Hi all,
>
> This series includes a couple of fixes for issues found/reported.
>
> Mika Westerberg (3):
>   thunderbolt: Do not call PM runtime functions in tb_retimer_scan()
>   thunderbolt: Use correct function to calculate maximum USB3 link rate
>   thunderbolt: Disable XDomain lane 1 only in software connection manager
>
>  drivers/thunderbolt/retimer.c | 17 +++--------------
>  drivers/thunderbolt/tb.c      | 20 +++++++++++++++-----
>  drivers/thunderbolt/tunnel.c  |  2 +-
>  drivers/thunderbolt/xdomain.c | 17 ++++++++++++-----
>  4 files changed, 31 insertions(+), 25 deletions(-)
>
> --
> 2.35.1
>

Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc
  2023-01-04  8:29 ` [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Yehezkel Bernat
@ 2023-01-09  8:46   ` Mika Westerberg
  0 siblings, 0 replies; 6+ messages in thread
From: Mika Westerberg @ 2023-01-09  8:46 UTC (permalink / raw)
  To: Yehezkel Bernat
  Cc: linux-usb, Michael Jamet, Lukas Wunner, Andreas Noever,
	Utkarsh Patel

On Wed, Jan 04, 2023 at 10:29:45AM +0200, Yehezkel Bernat wrote:
> On Wed, Jan 4, 2023 at 10:07 AM Mika Westerberg
> <mika.westerberg@linux.intel.com> wrote:
> >
> > Hi all,
> >
> > This series includes a couple of fixes for issues found/reported.
> >
> > Mika Westerberg (3):
> >   thunderbolt: Do not call PM runtime functions in tb_retimer_scan()
> >   thunderbolt: Use correct function to calculate maximum USB3 link rate
> >   thunderbolt: Disable XDomain lane 1 only in software connection manager
> >
> >  drivers/thunderbolt/retimer.c | 17 +++--------------
> >  drivers/thunderbolt/tb.c      | 20 +++++++++++++++-----
> >  drivers/thunderbolt/tunnel.c  |  2 +-
> >  drivers/thunderbolt/xdomain.c | 17 ++++++++++++-----
> >  4 files changed, 31 insertions(+), 25 deletions(-)
> >
> > --
> > 2.35.1
> >
> 
> Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com>

Thanks!

All applied to fixes.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-01-09  8:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-04  8:05 [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Mika Westerberg
2023-01-04  8:05 ` [PATCH 1/3] thunderbolt: Do not call PM runtime functions in tb_retimer_scan() Mika Westerberg
2023-01-04  8:06 ` [PATCH 2/3] thunderbolt: Use correct function to calculate maximum USB3 link rate Mika Westerberg
2023-01-04  8:06 ` [PATCH 3/3] thunderbolt: Disable XDomain lane 1 only in software connection manager Mika Westerberg
2023-01-04  8:29 ` [PATCH 0/3] thunderbolt: A couple of fixes for v6.2-rc Yehezkel Bernat
2023-01-09  8:46   ` Mika Westerberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox