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/CBYO7V3C5TGYPKCMWEMNFFMRYALCUDTK
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
--
2.45.2