diff options
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.patch | 40 |
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); |