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
 | |
| 
 |