48 lines
1.7 KiB
Diff
48 lines
1.7 KiB
Diff
From 9b44b0b09decfbe388131a345ba780c57240a7a9 Mon Sep 17 00:00:00 2001
|
|
From: Joerg Roedel <jroedel@suse.de>
|
|
Date: Tue, 11 Jul 2017 15:48:00 -0500
|
|
Subject: PCI: Mark AMD Stoney GPU ATS as broken
|
|
|
|
ATS is broken on this hardware and causes IOMMU stalls and system failure.
|
|
Disable ATS on these devices to make them usable again with IOMMU enabled.
|
|
|
|
Note that the commit in the Fixes tag is not buggy; it just uncovers the
|
|
problem in the hardware by increasing the ATS flush rate.
|
|
|
|
Link: https://lists.linuxfoundation.org/pipermail/iommu/2017-March/020836.html
|
|
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1409201
|
|
Fixes: b1516a14657a ("iommu/amd: Implement flush queue")
|
|
Signed-off-by: Joerg Roedel <jroedel@suse.de>
|
|
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
|
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
---
|
|
drivers/pci/quirks.c | 15 +++++++++++++++
|
|
1 file changed, 15 insertions(+)
|
|
|
|
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
|
index 6967c6b..15ee4e9 100644
|
|
--- a/drivers/pci/quirks.c
|
|
+++ b/drivers/pci/quirks.c
|
|
@@ -4681,3 +4681,18 @@ static void quirk_intel_no_flr(struct pci_dev *dev)
|
|
}
|
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1502, quirk_intel_no_flr);
|
|
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1503, quirk_intel_no_flr);
|
|
+
|
|
+#ifdef CONFIG_PCI_ATS
|
|
+/*
|
|
+ * Some devices have a broken ATS implementation causing IOMMU stalls.
|
|
+ * Don't use ATS for those devices.
|
|
+ */
|
|
+static void quirk_no_ats(struct pci_dev *pdev)
|
|
+{
|
|
+ dev_info(&pdev->dev, "disabling ATS (broken on this device)\n");
|
|
+ pdev->ats_cap = 0;
|
|
+}
|
|
+
|
|
+/* AMD Stoney platform GPU */
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_no_ats);
|
|
+#endif /* CONFIG_PCI_ATS */
|
|
--
|
|
cgit v1.1
|
|
|