diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2017-02-21 16:16:28 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2017-02-21 16:16:28 -0500 |
commit | c4d052ce970ea98e9e1cc72461ba3b7a25397657 (patch) | |
tree | d0c4a9d4e9953478b0655a8e70be7a894a672db1 | |
parent | 42d87e3ffbd53c4514bccc0f24e40d6231a567f5 (diff) | |
parent | 33be632b8443b6ac74aa293504f430604fb9abeb (diff) |
Merge branch 'pci/virtualization' into next
* pci/virtualization:
PCI: Add ACS quirk for Qualcomm QDF2400 and QDF2432
-rw-r--r-- | drivers/pci/quirks.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 30d4a53e0e5d..ca77d235867f 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -4160,6 +4160,26 @@ static int pci_quirk_intel_pch_acs(struct pci_dev *dev, u16 acs_flags) | |||
4160 | } | 4160 | } |
4161 | 4161 | ||
4162 | /* | 4162 | /* |
4163 | * These QCOM root ports do provide ACS-like features to disable peer | ||
4164 | * transactions and validate bus numbers in requests, but do not provide an | ||
4165 | * actual PCIe ACS capability. Hardware supports source validation but it | ||
4166 | * will report the issue as Completer Abort instead of ACS Violation. | ||
4167 | * Hardware doesn't support peer-to-peer and each root port is a root | ||
4168 | * complex with unique segment numbers. It is not possible for one root | ||
4169 | * port to pass traffic to another root port. All PCIe transactions are | ||
4170 | * terminated inside the root port. | ||
4171 | */ | ||
4172 | static int pci_quirk_qcom_rp_acs(struct pci_dev *dev, u16 acs_flags) | ||
4173 | { | ||
4174 | u16 flags = (PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_SV); | ||
4175 | int ret = acs_flags & ~flags ? 0 : 1; | ||
4176 | |||
4177 | dev_info(&dev->dev, "Using QCOM ACS Quirk (%d)\n", ret); | ||
4178 | |||
4179 | return ret; | ||
4180 | } | ||
4181 | |||
4182 | /* | ||
4163 | * Sunrise Point PCH root ports implement ACS, but unfortunately as shown in | 4183 | * Sunrise Point PCH root ports implement ACS, but unfortunately as shown in |
4164 | * the datasheet (Intel 100 Series Chipset Family PCH Datasheet, Vol. 2, | 4184 | * the datasheet (Intel 100 Series Chipset Family PCH Datasheet, Vol. 2, |
4165 | * 12.1.46, 12.1.47)[1] this chipset uses dwords for the ACS capability and | 4185 | * 12.1.46, 12.1.47)[1] this chipset uses dwords for the ACS capability and |
@@ -4315,6 +4335,9 @@ static const struct pci_dev_acs_enabled { | |||
4315 | /* I219 */ | 4335 | /* I219 */ |
4316 | { PCI_VENDOR_ID_INTEL, 0x15b7, pci_quirk_mf_endpoint_acs }, | 4336 | { PCI_VENDOR_ID_INTEL, 0x15b7, pci_quirk_mf_endpoint_acs }, |
4317 | { PCI_VENDOR_ID_INTEL, 0x15b8, pci_quirk_mf_endpoint_acs }, | 4337 | { PCI_VENDOR_ID_INTEL, 0x15b8, pci_quirk_mf_endpoint_acs }, |
4338 | /* QCOM QDF2xxx root ports */ | ||
4339 | { 0x17cb, 0x400, pci_quirk_qcom_rp_acs }, | ||
4340 | { 0x17cb, 0x401, pci_quirk_qcom_rp_acs }, | ||
4318 | /* Intel PCH root ports */ | 4341 | /* Intel PCH root ports */ |
4319 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, | 4342 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, |
4320 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_spt_pch_acs }, | 4343 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_spt_pch_acs }, |