@@ -5507,6 +5507,12 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0420, quirk_no_ext_tags);
55075507DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SERVERWORKS , 0x0422 , quirk_no_ext_tags );
55085508
55095509#ifdef CONFIG_PCI_ATS
5510+ static void quirk_no_ats (struct pci_dev * pdev )
5511+ {
5512+ pci_info (pdev , "disabling ATS\n" );
5513+ pdev -> ats_cap = 0 ;
5514+ }
5515+
55105516/*
55115517 * Some devices require additional driver setup to enable ATS. Don't use
55125518 * ATS for those devices as ATS will be enabled before the driver has had a
@@ -5520,14 +5526,10 @@ static void quirk_amd_harvest_no_ats(struct pci_dev *pdev)
55205526 (pdev -> subsystem_device == 0xce19 ||
55215527 pdev -> subsystem_device == 0xcc10 ||
55225528 pdev -> subsystem_device == 0xcc08 ))
5523- goto no_ats ;
5524- else
5525- return ;
5529+ quirk_no_ats ( pdev ) ;
5530+ } else {
5531+ quirk_no_ats ( pdev ) ;
55265532 }
5527-
5528- no_ats :
5529- pci_info (pdev , "disabling ATS\n" );
5530- pdev -> ats_cap = 0 ;
55315533}
55325534
55335535/* AMD Stoney platform GPU */
@@ -5550,6 +5552,25 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x7347, quirk_amd_harvest_no_ats);
55505552DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI , 0x734f , quirk_amd_harvest_no_ats );
55515553/* AMD Raven platform iGPU */
55525554DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_ATI , 0x15d8 , quirk_amd_harvest_no_ats );
5555+
5556+ /*
5557+ * Intel IPU E2000 revisions before C0 implement incorrect endianness
5558+ * in ATS Invalidate Request message body. Disable ATS for those devices.
5559+ */
5560+ static void quirk_intel_e2000_no_ats (struct pci_dev * pdev )
5561+ {
5562+ if (pdev -> revision < 0x20 )
5563+ quirk_no_ats (pdev );
5564+ }
5565+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1451 , quirk_intel_e2000_no_ats );
5566+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1452 , quirk_intel_e2000_no_ats );
5567+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1453 , quirk_intel_e2000_no_ats );
5568+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1454 , quirk_intel_e2000_no_ats );
5569+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1455 , quirk_intel_e2000_no_ats );
5570+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1457 , quirk_intel_e2000_no_ats );
5571+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x1459 , quirk_intel_e2000_no_ats );
5572+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x145a , quirk_intel_e2000_no_ats );
5573+ DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL , 0x145c , quirk_intel_e2000_no_ats );
55535574#endif /* CONFIG_PCI_ATS */
55545575
55555576/* Freescale PCIe doesn't support MSI in RC mode */
0 commit comments