aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/pci-driver.c12
-rw-r--r--drivers/pci/pci.c6
-rw-r--r--drivers/pci/pcie/portdrv_core.c15
3 files changed, 23 insertions, 10 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 840fdc5ba0d8..454853507b7e 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -267,11 +267,19 @@ static long local_pci_probe(void *_ddi)
267 pm_runtime_get_sync(dev); 267 pm_runtime_get_sync(dev);
268 pci_dev->driver = pci_drv; 268 pci_dev->driver = pci_drv;
269 rc = pci_drv->probe(pci_dev, ddi->id); 269 rc = pci_drv->probe(pci_dev, ddi->id);
270 if (rc) { 270 if (!rc)
271 return rc;
272 if (rc < 0) {
271 pci_dev->driver = NULL; 273 pci_dev->driver = NULL;
272 pm_runtime_put_sync(dev); 274 pm_runtime_put_sync(dev);
275 return rc;
273 } 276 }
274 return rc; 277 /*
278 * Probe function should return < 0 for failure, 0 for success
279 * Treat values > 0 as success, but warn.
280 */
281 dev_warn(dev, "Driver probe function unexpectedly returned %d\n", rc);
282 return 0;
275} 283}
276 284
277static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, 285static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 457f801fc49d..e485d92b3fa8 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1155,8 +1155,12 @@ static void pci_enable_bridge(struct pci_dev *dev)
1155 1155
1156 pci_enable_bridge(dev->bus->self); 1156 pci_enable_bridge(dev->bus->self);
1157 1157
1158 if (pci_is_enabled(dev)) 1158 if (pci_is_enabled(dev)) {
1159 if (!dev->is_busmaster)
1160 pci_set_master(dev);
1159 return; 1161 return;
1162 }
1163
1160 retval = pci_enable_device(dev); 1164 retval = pci_enable_device(dev);
1161 if (retval) 1165 if (retval)
1162 dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n", 1166 dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index 31063ac30992..08d131f7815b 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -260,13 +260,14 @@ static int get_port_device_capability(struct pci_dev *dev)
260 if (pcie_ports_disabled) 260 if (pcie_ports_disabled)
261 return 0; 261 return 0;
262 262
263 err = pcie_port_platform_notify(dev, &cap_mask); 263 cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP
264 if (!pcie_ports_auto) { 264 | PCIE_PORT_SERVICE_VC;
265 cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP 265 if (pci_aer_available())
266 | PCIE_PORT_SERVICE_VC; 266 cap_mask |= PCIE_PORT_SERVICE_AER;
267 if (pci_aer_available()) 267
268 cap_mask |= PCIE_PORT_SERVICE_AER; 268 if (pcie_ports_auto) {
269 } else if (err) { 269 err = pcie_port_platform_notify(dev, &cap_mask);
270 if (err)
270 return 0; 271 return 0;
271 } 272 }
272 273