diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-14 14:37:18 -0700 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-14 14:37:18 -0700 |
commit | c80ef97ae4848c4592f0fac9c06d7f436862a28d (patch) | |
tree | d2b05cf6beae20f967afe4a20a6403f8e2e6caac /drivers/pci/pci.c | |
parent | 25a712a49fade142b78a1c55166ad8a19cb53aba (diff) | |
parent | d99321b63b1f2cd386cdf20aefe4d8d3d414cb5b (diff) | |
download | op-kernel-dev-c80ef97ae4848c4592f0fac9c06d7f436862a28d.zip op-kernel-dev-c80ef97ae4848c4592f0fac9c06d7f436862a28d.tar.gz |
Merge branch 'pci/virtualization' into next
* pci/virtualization:
PCI: Enable quirks for PCIe ACS on Intel PCH root ports
PCI: Add pci_dev_flag for ACS enable quirks
PCI: Add device-specific PCI ACS enable
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r-- | drivers/pci/pci.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 1febe90..b89502f 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -2180,21 +2180,18 @@ void pci_request_acs(void) } /** - * pci_enable_acs - enable ACS if hardware support it + * pci_std_enable_acs - enable ACS on devices using standard ACS capabilites * @dev: the PCI device */ -void pci_enable_acs(struct pci_dev *dev) +static int pci_std_enable_acs(struct pci_dev *dev) { int pos; u16 cap; u16 ctrl; - if (!pci_acs_enable) - return; - pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS); if (!pos) - return; + return -ENODEV; pci_read_config_word(dev, pos + PCI_ACS_CAP, &cap); pci_read_config_word(dev, pos + PCI_ACS_CTRL, &ctrl); @@ -2212,6 +2209,23 @@ void pci_enable_acs(struct pci_dev *dev) ctrl |= (cap & PCI_ACS_UF); pci_write_config_word(dev, pos + PCI_ACS_CTRL, ctrl); + + return 0; +} + +/** + * pci_enable_acs - enable ACS if hardware support it + * @dev: the PCI device + */ +void pci_enable_acs(struct pci_dev *dev) +{ + if (!pci_acs_enable) + return; + + if (!pci_std_enable_acs(dev)) + return; + + pci_dev_specific_enable_acs(dev); } static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags) |