aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r--drivers/pci/pci.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 0c4f641b7be1..177a50ff6454 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1151,8 +1151,7 @@ int pci_reenable_device(struct pci_dev *dev)
1151 return 0; 1151 return 0;
1152} 1152}
1153 1153
1154static int __pci_enable_device_flags(struct pci_dev *dev, 1154static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
1155 resource_size_t flags)
1156{ 1155{
1157 int err; 1156 int err;
1158 int i, bars = 0; 1157 int i, bars = 0;
@@ -1196,7 +1195,7 @@ static int __pci_enable_device_flags(struct pci_dev *dev,
1196 */ 1195 */
1197int pci_enable_device_io(struct pci_dev *dev) 1196int pci_enable_device_io(struct pci_dev *dev)
1198{ 1197{
1199 return __pci_enable_device_flags(dev, IORESOURCE_IO); 1198 return pci_enable_device_flags(dev, IORESOURCE_IO);
1200} 1199}
1201 1200
1202/** 1201/**
@@ -1209,7 +1208,7 @@ int pci_enable_device_io(struct pci_dev *dev)
1209 */ 1208 */
1210int pci_enable_device_mem(struct pci_dev *dev) 1209int pci_enable_device_mem(struct pci_dev *dev)
1211{ 1210{
1212 return __pci_enable_device_flags(dev, IORESOURCE_MEM); 1211 return pci_enable_device_flags(dev, IORESOURCE_MEM);
1213} 1212}
1214 1213
1215/** 1214/**
@@ -1225,7 +1224,7 @@ int pci_enable_device_mem(struct pci_dev *dev)
1225 */ 1224 */
1226int pci_enable_device(struct pci_dev *dev) 1225int pci_enable_device(struct pci_dev *dev)
1227{ 1226{
1228 return __pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO); 1227 return pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
1229} 1228}
1230 1229
1231/* 1230/*
@@ -2043,10 +2042,13 @@ void pci_free_cap_save_buffers(struct pci_dev *dev)
2043} 2042}
2044 2043
2045/** 2044/**
2046 * pci_enable_ari - enable ARI forwarding if hardware support it 2045 * pci_configure_ari - enable or disable ARI forwarding
2047 * @dev: the PCI device 2046 * @dev: the PCI device
2047 *
2048 * If @dev and its upstream bridge both support ARI, enable ARI in the
2049 * bridge. Otherwise, disable ARI in the bridge.
2048 */ 2050 */
2049void pci_enable_ari(struct pci_dev *dev) 2051void pci_configure_ari(struct pci_dev *dev)
2050{ 2052{
2051 u32 cap; 2053 u32 cap;
2052 struct pci_dev *bridge; 2054 struct pci_dev *bridge;
@@ -2054,9 +2056,6 @@ void pci_enable_ari(struct pci_dev *dev)
2054 if (pcie_ari_disabled || !pci_is_pcie(dev) || dev->devfn) 2056 if (pcie_ari_disabled || !pci_is_pcie(dev) || dev->devfn)
2055 return; 2057 return;
2056 2058
2057 if (!pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI))
2058 return;
2059
2060 bridge = dev->bus->self; 2059 bridge = dev->bus->self;
2061 if (!bridge) 2060 if (!bridge)
2062 return; 2061 return;
@@ -2065,8 +2064,15 @@ void pci_enable_ari(struct pci_dev *dev)
2065 if (!(cap & PCI_EXP_DEVCAP2_ARI)) 2064 if (!(cap & PCI_EXP_DEVCAP2_ARI))
2066 return; 2065 return;
2067 2066
2068 pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2, PCI_EXP_DEVCTL2_ARI); 2067 if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI)) {
2069 bridge->ari_enabled = 1; 2068 pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2,
2069 PCI_EXP_DEVCTL2_ARI);
2070 bridge->ari_enabled = 1;
2071 } else {
2072 pcie_capability_clear_word(bridge, PCI_EXP_DEVCTL2,
2073 PCI_EXP_DEVCTL2_ARI);
2074 bridge->ari_enabled = 0;
2075 }
2070} 2076}
2071 2077
2072/** 2078/**