Skip to content

Commit 3c14a05

Browse files
committed
Merge branch 'pci/ats'
- Disable ATS for Intel IPU E2000 A- and B-stepping devices to avoid invalidation message endianness erratum (Bartosz Pawlowski) * pci/ats: PCI: Disable ATS for specific Intel IPU E2000 devices PCI: Extract ATS disabling to a helper function
2 parents b63c6df + a18615b commit 3c14a05

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

drivers/pci/quirks.c

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5507,6 +5507,12 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0420, quirk_no_ext_tags);
55075507
DECLARE_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);
55505552
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x734f, quirk_amd_harvest_no_ats);
55515553
/* AMD Raven platform iGPU */
55525554
DECLARE_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

Comments
 (0)