summaryrefslogtreecommitdiffstats
path: root/drivers/pci/quirks.c
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2019-09-23 17:10:10 -0400
committerBjorn Helgaas <bhelgaas@google.com>2019-09-23 17:10:10 -0400
commit6ce54f0219c8794b603b0dea2673cfa1998a137c (patch)
tree717c8373d583316503e27c1b247d47290a15dc31 /drivers/pci/quirks.c
parenta10a1f60c7a35f59bee803fe2796ec5172e73edb (diff)
parent0d8006ddbe89cbaedef06a8789ddefa1164a3a77 (diff)
Merge branch 'pci/misc'
- Use devm_add_action_or_reset() helper (Fuqian Huang) - Mark expected switch fall-through (Gustavo A. R. Silva) - Convert sysfs device attributes from __ATTR() to DEVICE_ATTR() (Kelsey Skunberg) - Convert sysfs file permissions from S_IRUSR etc to octal (Kelsey Skunberg) - Move SR-IOV sysfs functions to iov.c (Kelsey Skunberg) - Add pci_info_ratelimited() to ratelimit PCI messages separately (Krzysztof Wilczynski) - Fix "'static' not at beginning of declaration" warnings (Krzysztof Wilczynski) - Clean up resource_alignment parameter to not require static buffer (Logan Gunthorpe) - Add ACS quirk for iProc PAXB (Abhinav Ratna) - Add pci_irq_vector() and other stubs for !CONFIG_PCI (Herbert Xu) * pci/misc: PCI: Add pci_irq_vector() and other stubs when !CONFIG_PCI PCI: Add ACS quirk for iProc PAXB PCI: Force trailing new line to resource_alignment_param in sysfs PCI: Move pci_[get|set]_resource_alignment_param() into their callers PCI: Clean up resource_alignment parameter to not require static buffer PCI: Use static const struct, not const static struct PCI: Add pci_info_ratelimited() to ratelimit PCI separately PCI/IOV: Remove group write permission from sriov_numvfs, sriov_drivers_autoprobe PCI/IOV: Move sysfs SR-IOV functions to iov.c PCI: sysfs: Change permissions from symbolic to octal PCI: sysfs: Change DEVICE_ATTR() to DEVICE_ATTR_WO() PCI: sysfs: Define device attributes with DEVICE_ATTR*() PCI: Mark expected switch fall-through PCI: Use devm_add_action_or_reset()
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r--drivers/pci/quirks.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 9ac1a7564c9e..a5be6291ebb8 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4465,6 +4465,19 @@ static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
4465 return acs_flags ? 0 : 1; 4465 return acs_flags ? 0 : 1;
4466} 4466}
4467 4467
4468static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags)
4469{
4470 /*
4471 * iProc PAXB Root Ports don't advertise an ACS capability, but
4472 * they do not allow peer-to-peer transactions between Root Ports.
4473 * Allow each Root Port to be in a separate IOMMU group by masking
4474 * SV/RR/CR/UF bits.
4475 */
4476 acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
4477
4478 return acs_flags ? 0 : 1;
4479}
4480
4468static const struct pci_dev_acs_enabled { 4481static const struct pci_dev_acs_enabled {
4469 u16 vendor; 4482 u16 vendor;
4470 u16 device; 4483 u16 device;
@@ -4558,6 +4571,7 @@ static const struct pci_dev_acs_enabled {
4558 { PCI_VENDOR_ID_AMPERE, 0xE00A, pci_quirk_xgene_acs }, 4571 { PCI_VENDOR_ID_AMPERE, 0xE00A, pci_quirk_xgene_acs },
4559 { PCI_VENDOR_ID_AMPERE, 0xE00B, pci_quirk_xgene_acs }, 4572 { PCI_VENDOR_ID_AMPERE, 0xE00B, pci_quirk_xgene_acs },
4560 { PCI_VENDOR_ID_AMPERE, 0xE00C, pci_quirk_xgene_acs }, 4573 { PCI_VENDOR_ID_AMPERE, 0xE00C, pci_quirk_xgene_acs },
4574 { PCI_VENDOR_ID_BROADCOM, 0xD714, pci_quirk_brcm_acs },
4561 { 0 } 4575 { 0 }
4562}; 4576};
4563 4577