fix thunderbolt ring-interrupt not being masked on suspend
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>
This commit is contained in:
parent
ea64c38da4
commit
d772676031
@ -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)
|
Loading…
Reference in New Issue
Block a user