From: Joerg Roedel Date: Tue, 11 Jul 2017 20:48:00 +0000 (-0500) Subject: PCI: Mark AMD Stoney GPU ATS as broken X-Git-Tag: v4.14-rc1~87^2^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b44b0b09decfbe388131a345ba780c57240a7a9;p=platform%2Fkernel%2Flinux-exynos.git 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 Signed-off-by: Bjorn Helgaas Acked-by: Alex Deucher --- 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 */