aboutsummaryrefslogtreecommitdiffstats
path: root/queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch
diff options
context:
space:
mode:
Diffstat (limited to 'queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch')
-rw-r--r--queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch b/queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch
new file mode 100644
index 0000000000..6c48a2f880
--- /dev/null
+++ b/queue-6.6/thunderbolt-reset-only-non-usb4-host-routers-in-resume.patch
@@ -0,0 +1,40 @@
+From 8cf9926c537ce8b0c7783afebe752e084765d553 Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Wed, 31 Jan 2024 11:12:59 +0200
+Subject: thunderbolt: Reset only non-USB4 host routers in resume
+
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+
+commit 8cf9926c537ce8b0c7783afebe752e084765d553 upstream.
+
+There is no need to reset the USB4 host routers on resume because they
+are reset already and this may cause problems if the link does not come
+up soon enough. For this reason limit this to happen in non-USB4 host
+routers only (that's Apple systems with Intel Thunderbolt controllers).
+
+Fixes: 59a54c5f3dbd ("thunderbolt: Reset topology created by the boot firmware")
+Cc: Sanath S <Sanath.S@amd.com>
+Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
+Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/thunderbolt/tb.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/thunderbolt/tb.c
++++ b/drivers/thunderbolt/tb.c
+@@ -2259,8 +2259,12 @@ static int tb_resume_noirq(struct tb *tb
+
+ tb_dbg(tb, "resuming...\n");
+
+- /* remove any pci devices the firmware might have setup */
+- tb_switch_reset(tb->root_switch);
++ /*
++ * For non-USB4 hosts (Apple systems) remove any PCIe devices
++ * the firmware might have setup.
++ */
++ if (!tb_switch_is_usb4(tb->root_switch))
++ tb_switch_reset(tb->root_switch);
+
+ tb_switch_resume(tb->root_switch, false);
+ tb_free_invalid_tunnels(tb);