summaryrefslogtreecommitdiffstats
path: root/pci-mark-amd-stoney-gpu-ats-as-broken.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pci-mark-amd-stoney-gpu-ats-as-broken.patch')
-rw-r--r--pci-mark-amd-stoney-gpu-ats-as-broken.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/pci-mark-amd-stoney-gpu-ats-as-broken.patch b/pci-mark-amd-stoney-gpu-ats-as-broken.patch
new file mode 100644
index 000000000..167c40223
--- /dev/null
+++ b/pci-mark-amd-stoney-gpu-ats-as-broken.patch
@@ -0,0 +1,47 @@
+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
+