1 |
From 2d5bd3e7dfa89a691941ffb5a047ca094b654fc9 Mon Sep 17 00:00:00 2001 |
2 |
From: Dorian Stoll <dorian.stoll@tmsp.io> |
3 |
Date: Sun, 11 Dec 2022 12:03:38 +0100 |
4 |
Subject: [PATCH] iommu: intel: Disable source id verification for ITHC |
5 |
|
6 |
Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io> |
7 |
Patchset: ithc |
8 |
--- |
9 |
drivers/iommu/intel/irq_remapping.c | 16 ++++++++++++++++ |
10 |
1 file changed, 16 insertions(+) |
11 |
|
12 |
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c |
13 |
index 5962bb5027d06..86fa129d10d40 100644 |
14 |
--- a/drivers/iommu/intel/irq_remapping.c |
15 |
+++ b/drivers/iommu/intel/irq_remapping.c |
16 |
@@ -396,6 +396,22 @@ static int set_msi_sid(struct irte *irte, struct pci_dev *dev) |
17 |
data.busmatch_count = 0; |
18 |
pci_for_each_dma_alias(dev, set_msi_sid_cb, &data); |
19 |
|
20 |
+ /* |
21 |
+ * The Intel Touch Host Controller is at 00:10.6, but for some reason |
22 |
+ * the MSI interrupts have request id 01:05.0. |
23 |
+ * Disable id verification to work around this. |
24 |
+ * FIXME Find proper fix or turn this into a quirk. |
25 |
+ */ |
26 |
+ if (dev->vendor == PCI_VENDOR_ID_INTEL && (dev->class >> 8) == PCI_CLASS_INPUT_PEN) { |
27 |
+ switch(dev->device) { |
28 |
+ case 0x98d0: case 0x98d1: // LKF |
29 |
+ case 0xa0d0: case 0xa0d1: // TGL LP |
30 |
+ case 0x43d0: case 0x43d1: // TGL H |
31 |
+ set_irte_sid(irte, SVT_NO_VERIFY, SQ_ALL_16, 0); |
32 |
+ return 0; |
33 |
+ } |
34 |
+ } |
35 |
+ |
36 |
/* |
37 |
* DMA alias provides us with a PCI device and alias. The only case |
38 |
* where the it will return an alias on a different bus than the |