From: Manivannan Sadhasivam manivannan.sadhasivam@oss.qualcomm.com
If ACS is enabled, the IDT switch with Device ID 0x8090 found in ARM Juno R2 development board incorrectly raises an ACS Source Validation error on Completions for Config Read Requests, even though PCIe r6.0, sec 6.12.1.1, says that Completions are never affected by ACS Source Validation.
This behavior is documented in non-public erratum 89H32H8G3-YC and there is already a quirk available to workaround this issue.
Hence, extend the quirk for Device ID 0x8090 to make the switch functional if ACS is enabled.
Note: The commit mentioned in the Fixes tag causes ACS to be enabled before the enumeration of the switch downstream port. So it ended up breaking PCIe on ARM Juno R2 board, which used to work before this commit until someone forcefully enabled ACS with cmdline.
Cc: stable@vger.kernel.org # 6.15 Fixes: bcb81ac6ae3c ("iommu: Get DT/ACPI parsing into the proper probe path") Closes: https://lists.linaro.org/archives/list/lkft-triage@lists.linaro.org/message/... Signed-off-by: Manivannan Sadhasivam manivannan.sadhasivam@oss.qualcomm.com --- drivers/pci/probe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index f41128f91ca76ab014ad669ae84a53032c7c6b6b..2320818bc8e58c61d9ada312dfbd8c0fbfbadc0c 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2500,7 +2500,7 @@ bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l, * ACS Source Validation errors on completions for config reads. */ if (bridge && bridge->vendor == PCI_VENDOR_ID_IDT && - bridge->device == 0x80b5) + (bridge->device == 0x80b5 || bridge->device == 0x8090)) return pci_idt_bus_quirk(bus, devfn, l, timeout); #endif