aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2017-07-11 16:48:00 -0400
committerBjorn Helgaas <bhelgaas@google.com>2017-07-31 15:44:04 -0400
commit9b44b0b09decfbe388131a345ba780c57240a7a9 (patch)
tree9e04b8e24ec3a8fe732e061147931210cacb3081
parent16f73eb02d7e1765ccab3d2018e0bd98eb93d973 (diff)
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>
-rw-r--r--drivers/pci/quirks.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 6967c6b4cf6b..15ee4e9af633 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)
4681} 4681}
4682DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1502, quirk_intel_no_flr); 4682DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1502, quirk_intel_no_flr);
4683DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1503, quirk_intel_no_flr); 4683DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1503, quirk_intel_no_flr);
4684
4685#ifdef CONFIG_PCI_ATS
4686/*
4687 * Some devices have a broken ATS implementation causing IOMMU stalls.
4688 * Don't use ATS for those devices.
4689 */
4690static void quirk_no_ats(struct pci_dev *pdev)
4691{
4692 dev_info(&pdev->dev, "disabling ATS (broken on this device)\n");
4693 pdev->ats_cap = 0;
4694}
4695
4696/* AMD Stoney platform GPU */
4697DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_no_ats);
4698#endif /* CONFIG_PCI_ATS */