diff options
-rw-r--r-- | drivers/pci/pci-driver.c | 12 | ||||
-rw-r--r-- | drivers/pci/pci.c | 6 | ||||
-rw-r--r-- | drivers/pci/pcie/portdrv_core.c | 15 |
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 | ||
277 | static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, | 285 | static 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 | ||