]> git.proxmox.com Git - pve-kernel.git/commitdiff
fix thunderbolt ring-interrupt not being masked on suspend
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 20 Sep 2023 04:33:03 +0000 (06:33 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 20 Sep 2023 04:36:01 +0000 (06:36 +0200)
Originally for v6.4-rc7 and now it also got already into some stable
trees, but not yet into a (released) ubuntu tag – so backport it
already.

Link: https://forum.proxmox.com/threads/133104/post-590457
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
patches/kernel/0017-thunderbolt-Mask-ring-interrupt-on-Intel-hardware-as.patch [new file with mode: 0644]

diff --git a/patches/kernel/0017-thunderbolt-Mask-ring-interrupt-on-Intel-hardware-as.patch b/patches/kernel/0017-thunderbolt-Mask-ring-interrupt-on-Intel-hardware-as.patch
new file mode 100644 (file)
index 0000000..65563c2
--- /dev/null
@@ -0,0 +1,49 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Tue, 30 May 2023 08:48:29 +0300
+Subject: [PATCH] thunderbolt: Mask ring interrupt on Intel hardware as well
+
+When resuming from system sleep states the driver issues following
+warning on Intel hardware:
+
+  thunderbolt 0000:07:00.0: interrupt for TX ring 0 is already enabled
+
+The reason for this is that the commit in question did not mask the ring
+interrupt on Intel hardware leaving the interrupt active. Fix this by
+masking it also in Intel hardware.
+
+Reported-by: beld zhang <beldzhang@gmail.com>
+Tested-by: beld zhang <beldzhang@gmail.com>
+Closes: https://lore.kernel.org/linux-usb/ZHKW5NeabmfhgLbY@debian.me/
+Fixes: c4af8e3fecd0 ("thunderbolt: Clear registers properly when auto clear isn't in use")
+Cc: stable@vger.kernel.org
+Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
+Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+(cherry picked from commit 9f9666e65359d5047089aef97ac87c50f624ecb0)
+Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+---
+ drivers/thunderbolt/nhi.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c
+index 0a525f44ea31..4a6a3802d7e5 100644
+--- a/drivers/thunderbolt/nhi.c
++++ b/drivers/thunderbolt/nhi.c
+@@ -56,9 +56,14 @@ static int ring_interrupt_index(const struct tb_ring *ring)
+ static void nhi_mask_interrupt(struct tb_nhi *nhi, int mask, int ring)
+ {
+-      if (nhi->quirks & QUIRK_AUTO_CLEAR_INT)
+-              return;
+-      iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring);
++      if (nhi->quirks & QUIRK_AUTO_CLEAR_INT) {
++              u32 val;
++
++              val = ioread32(nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
++              iowrite32(val & ~mask, nhi->iobase + REG_RING_INTERRUPT_BASE + ring);
++      } else {
++              iowrite32(mask, nhi->iobase + REG_RING_INTERRUPT_MASK_CLEAR_BASE + ring);
++      }
+ }
+ static void nhi_clear_interrupt(struct tb_nhi *nhi, int ring)