aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/kernel/bios32.c12
-rw-r--r--drivers/edac/i82875p_edac.c8
-rw-r--r--drivers/pci/bus.c10
-rw-r--r--drivers/pci/host/pci-exynos.c7
-rw-r--r--drivers/pci/host/pci-imx6.c147
-rw-r--r--drivers/pci/host/pcie-designware.c6
-rw-r--r--drivers/pci/host/pcie-designware.h2
-rw-r--r--drivers/pci/iov.c2
-rw-r--r--drivers/platform/x86/asus-wmi.c3
-rw-r--r--drivers/platform/x86/eeepc-laptop.c3
-rw-r--r--include/linux/pci.h2
11 files changed, 83 insertions, 119 deletions
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index 16d43cd45619..17a26c17f7f5 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
545 */ 545 */
546 pci_bus_add_devices(bus); 546 pci_bus_add_devices(bus);
547 } 547 }
548
549 list_for_each_entry(sys, &head, node) {
550 struct pci_bus *bus = sys->bus;
551
552 /* Configure PCI Express settings */
553 if (bus && !pci_has_flag(PCI_PROBE_ONLY)) {
554 struct pci_bus *child;
555
556 list_for_each_entry(child, &bus->children, node)
557 pcie_bus_configure_settings(child);
558 }
559 }
548} 560}
549 561
550#ifndef CONFIG_PCI_HOST_ITE8152 562#ifndef CONFIG_PCI_HOST_ITE8152
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c
index 8d0450b9b9af..64b68320249f 100644
--- a/drivers/edac/i82875p_edac.c
+++ b/drivers/edac/i82875p_edac.c
@@ -275,7 +275,6 @@ static int i82875p_setup_overfl_dev(struct pci_dev *pdev,
275{ 275{
276 struct pci_dev *dev; 276 struct pci_dev *dev;
277 void __iomem *window; 277 void __iomem *window;
278 int err;
279 278
280 *ovrfl_pdev = NULL; 279 *ovrfl_pdev = NULL;
281 *ovrfl_window = NULL; 280 *ovrfl_window = NULL;
@@ -293,13 +292,8 @@ static int i82875p_setup_overfl_dev(struct pci_dev *pdev,
293 if (dev == NULL) 292 if (dev == NULL)
294 return 1; 293 return 1;
295 294
296 err = pci_bus_add_device(dev);
297 if (err) {
298 i82875p_printk(KERN_ERR,
299 "%s(): pci_bus_add_device() Failed\n",
300 __func__);
301 }
302 pci_bus_assign_resources(dev->bus); 295 pci_bus_assign_resources(dev->bus);
296 pci_bus_add_device(dev);
303 } 297 }
304 298
305 *ovrfl_pdev = dev; 299 *ovrfl_pdev = dev;
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index ba2bf55a38df..447d393725e1 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -235,7 +235,7 @@ void __weak pcibios_resource_survey_bus(struct pci_bus *bus) { }
235 * 235 *
236 * This adds add sysfs entries and start device drivers 236 * This adds add sysfs entries and start device drivers
237 */ 237 */
238int pci_bus_add_device(struct pci_dev *dev) 238void pci_bus_add_device(struct pci_dev *dev)
239{ 239{
240 int retval; 240 int retval;
241 241
@@ -252,8 +252,6 @@ int pci_bus_add_device(struct pci_dev *dev)
252 WARN_ON(retval < 0); 252 WARN_ON(retval < 0);
253 253
254 dev->is_added = 1; 254 dev->is_added = 1;
255
256 return 0;
257} 255}
258 256
259/** 257/**
@@ -266,16 +264,12 @@ void pci_bus_add_devices(const struct pci_bus *bus)
266{ 264{
267 struct pci_dev *dev; 265 struct pci_dev *dev;
268 struct pci_bus *child; 266 struct pci_bus *child;
269 int retval;
270 267
271 list_for_each_entry(dev, &bus->devices, bus_list) { 268 list_for_each_entry(dev, &bus->devices, bus_list) {
272 /* Skip already-added devices */ 269 /* Skip already-added devices */
273 if (dev->is_added) 270 if (dev->is_added)
274 continue; 271 continue;
275 retval = pci_bus_add_device(dev); 272 pci_bus_add_device(dev);
276 if (retval)
277 dev_err(&dev->dev, "Error adding device (%d)\n",
278 retval);
279 } 273 }
280 274
281 list_for_each_entry(dev, &bus->devices, bus_list) { 275 list_for_each_entry(dev, &bus->devices, bus_list) {
diff --git a/drivers/pci/host/pci-exynos.c b/drivers/pci/host/pci-exynos.c
index 81aa700a8ada..1632661c5b7f 100644
--- a/drivers/pci/host/pci-exynos.c
+++ b/drivers/pci/host/pci-exynos.c
@@ -415,9 +415,7 @@ static irqreturn_t exynos_pcie_msi_irq_handler(int irq, void *arg)
415{ 415{
416 struct pcie_port *pp = arg; 416 struct pcie_port *pp = arg;
417 417
418 dw_handle_msi_irq(pp); 418 return dw_handle_msi_irq(pp);
419
420 return IRQ_HANDLED;
421} 419}
422 420
423static void exynos_pcie_msi_init(struct pcie_port *pp) 421static void exynos_pcie_msi_init(struct pcie_port *pp)
@@ -511,7 +509,8 @@ static struct pcie_host_ops exynos_pcie_host_ops = {
511 .host_init = exynos_pcie_host_init, 509 .host_init = exynos_pcie_host_init,
512}; 510};
513 511
514static int add_pcie_port(struct pcie_port *pp, struct platform_device *pdev) 512static int __init add_pcie_port(struct pcie_port *pp,
513 struct platform_device *pdev)
515{ 514{
516 int ret; 515 int ret;
517 516
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
index ee082509b0ba..a5645ae4aef0 100644
--- a/drivers/pci/host/pci-imx6.c
+++ b/drivers/pci/host/pci-imx6.c
@@ -25,6 +25,7 @@
25#include <linux/resource.h> 25#include <linux/resource.h>
26#include <linux/signal.h> 26#include <linux/signal.h>
27#include <linux/types.h> 27#include <linux/types.h>
28#include <linux/interrupt.h>
28 29
29#include "pcie-designware.h" 30#include "pcie-designware.h"
30 31
@@ -32,13 +33,9 @@
32 33
33struct imx6_pcie { 34struct imx6_pcie {
34 int reset_gpio; 35 int reset_gpio;
35 int power_on_gpio; 36 struct clk *pcie_bus;
36 int wake_up_gpio; 37 struct clk *pcie_phy;
37 int disable_gpio; 38 struct clk *pcie;
38 struct clk *lvds_gate;
39 struct clk *sata_ref_100m;
40 struct clk *pcie_ref_125m;
41 struct clk *pcie_axi;
42 struct pcie_port pp; 39 struct pcie_port pp;
43 struct regmap *iomuxc_gpr; 40 struct regmap *iomuxc_gpr;
44 void __iomem *mem_base; 41 void __iomem *mem_base;
@@ -231,36 +228,27 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
231 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); 228 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
232 int ret; 229 int ret;
233 230
234 if (gpio_is_valid(imx6_pcie->power_on_gpio))
235 gpio_set_value(imx6_pcie->power_on_gpio, 1);
236
237 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, 231 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
238 IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18); 232 IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
239 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1, 233 regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
240 IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16); 234 IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
241 235
242 ret = clk_prepare_enable(imx6_pcie->sata_ref_100m); 236 ret = clk_prepare_enable(imx6_pcie->pcie_phy);
243 if (ret) {
244 dev_err(pp->dev, "unable to enable sata_ref_100m\n");
245 goto err_sata_ref;
246 }
247
248 ret = clk_prepare_enable(imx6_pcie->pcie_ref_125m);
249 if (ret) { 237 if (ret) {
250 dev_err(pp->dev, "unable to enable pcie_ref_125m\n"); 238 dev_err(pp->dev, "unable to enable pcie_phy clock\n");
251 goto err_pcie_ref; 239 goto err_pcie_phy;
252 } 240 }
253 241
254 ret = clk_prepare_enable(imx6_pcie->lvds_gate); 242 ret = clk_prepare_enable(imx6_pcie->pcie_bus);
255 if (ret) { 243 if (ret) {
256 dev_err(pp->dev, "unable to enable lvds_gate\n"); 244 dev_err(pp->dev, "unable to enable pcie_bus clock\n");
257 goto err_lvds_gate; 245 goto err_pcie_bus;
258 } 246 }
259 247
260 ret = clk_prepare_enable(imx6_pcie->pcie_axi); 248 ret = clk_prepare_enable(imx6_pcie->pcie);
261 if (ret) { 249 if (ret) {
262 dev_err(pp->dev, "unable to enable pcie_axi\n"); 250 dev_err(pp->dev, "unable to enable pcie clock\n");
263 goto err_pcie_axi; 251 goto err_pcie;
264 } 252 }
265 253
266 /* allow the clocks to stabilize */ 254 /* allow the clocks to stabilize */
@@ -274,13 +262,11 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
274 } 262 }
275 return 0; 263 return 0;
276 264
277err_pcie_axi: 265err_pcie:
278 clk_disable_unprepare(imx6_pcie->lvds_gate); 266 clk_disable_unprepare(imx6_pcie->pcie_bus);
279err_lvds_gate: 267err_pcie_bus:
280 clk_disable_unprepare(imx6_pcie->pcie_ref_125m); 268 clk_disable_unprepare(imx6_pcie->pcie_phy);
281err_pcie_ref: 269err_pcie_phy:
282 clk_disable_unprepare(imx6_pcie->sata_ref_100m);
283err_sata_ref:
284 return ret; 270 return ret;
285 271
286} 272}
@@ -329,6 +315,13 @@ static int imx6_pcie_wait_for_link(struct pcie_port *pp)
329 return 0; 315 return 0;
330} 316}
331 317
318static irqreturn_t imx6_pcie_msi_handler(int irq, void *arg)
319{
320 struct pcie_port *pp = arg;
321
322 return dw_handle_msi_irq(pp);
323}
324
332static int imx6_pcie_start_link(struct pcie_port *pp) 325static int imx6_pcie_start_link(struct pcie_port *pp)
333{ 326{
334 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); 327 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
@@ -403,6 +396,9 @@ static void imx6_pcie_host_init(struct pcie_port *pp)
403 dw_pcie_setup_rc(pp); 396 dw_pcie_setup_rc(pp);
404 397
405 imx6_pcie_start_link(pp); 398 imx6_pcie_start_link(pp);
399
400 if (IS_ENABLED(CONFIG_PCI_MSI))
401 dw_pcie_msi_init(pp);
406} 402}
407 403
408static void imx6_pcie_reset_phy(struct pcie_port *pp) 404static void imx6_pcie_reset_phy(struct pcie_port *pp)
@@ -487,15 +483,25 @@ static struct pcie_host_ops imx6_pcie_host_ops = {
487 .host_init = imx6_pcie_host_init, 483 .host_init = imx6_pcie_host_init,
488}; 484};
489 485
490static int imx6_add_pcie_port(struct pcie_port *pp, 486static int __init imx6_add_pcie_port(struct pcie_port *pp,
491 struct platform_device *pdev) 487 struct platform_device *pdev)
492{ 488{
493 int ret; 489 int ret;
494 490
495 pp->irq = platform_get_irq(pdev, 0); 491 if (IS_ENABLED(CONFIG_PCI_MSI)) {
496 if (!pp->irq) { 492 pp->msi_irq = platform_get_irq_byname(pdev, "msi");
497 dev_err(&pdev->dev, "failed to get irq\n"); 493 if (pp->msi_irq <= 0) {
498 return -ENODEV; 494 dev_err(&pdev->dev, "failed to get MSI irq\n");
495 return -ENODEV;
496 }
497
498 ret = devm_request_irq(&pdev->dev, pp->msi_irq,
499 imx6_pcie_msi_handler,
500 IRQF_SHARED, "mx6-pcie-msi", pp);
501 if (ret) {
502 dev_err(&pdev->dev, "failed to request MSI irq\n");
503 return -ENODEV;
504 }
499 } 505 }
500 506
501 pp->root_bus_nr = -1; 507 pp->root_bus_nr = -1;
@@ -546,69 +552,26 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
546 } 552 }
547 } 553 }
548 554
549 imx6_pcie->power_on_gpio = of_get_named_gpio(np, "power-on-gpio", 0);
550 if (gpio_is_valid(imx6_pcie->power_on_gpio)) {
551 ret = devm_gpio_request_one(&pdev->dev,
552 imx6_pcie->power_on_gpio,
553 GPIOF_OUT_INIT_LOW,
554 "PCIe power enable");
555 if (ret) {
556 dev_err(&pdev->dev, "unable to get power-on gpio\n");
557 return ret;
558 }
559 }
560
561 imx6_pcie->wake_up_gpio = of_get_named_gpio(np, "wake-up-gpio", 0);
562 if (gpio_is_valid(imx6_pcie->wake_up_gpio)) {
563 ret = devm_gpio_request_one(&pdev->dev,
564 imx6_pcie->wake_up_gpio,
565 GPIOF_IN,
566 "PCIe wake up");
567 if (ret) {
568 dev_err(&pdev->dev, "unable to get wake-up gpio\n");
569 return ret;
570 }
571 }
572
573 imx6_pcie->disable_gpio = of_get_named_gpio(np, "disable-gpio", 0);
574 if (gpio_is_valid(imx6_pcie->disable_gpio)) {
575 ret = devm_gpio_request_one(&pdev->dev,
576 imx6_pcie->disable_gpio,
577 GPIOF_OUT_INIT_HIGH,
578 "PCIe disable endpoint");
579 if (ret) {
580 dev_err(&pdev->dev, "unable to get disable-ep gpio\n");
581 return ret;
582 }
583 }
584
585 /* Fetch clocks */ 555 /* Fetch clocks */
586 imx6_pcie->lvds_gate = devm_clk_get(&pdev->dev, "lvds_gate"); 556 imx6_pcie->pcie_phy = devm_clk_get(&pdev->dev, "pcie_phy");
587 if (IS_ERR(imx6_pcie->lvds_gate)) { 557 if (IS_ERR(imx6_pcie->pcie_phy)) {
588 dev_err(&pdev->dev,
589 "lvds_gate clock select missing or invalid\n");
590 return PTR_ERR(imx6_pcie->lvds_gate);
591 }
592
593 imx6_pcie->sata_ref_100m = devm_clk_get(&pdev->dev, "sata_ref_100m");
594 if (IS_ERR(imx6_pcie->sata_ref_100m)) {
595 dev_err(&pdev->dev, 558 dev_err(&pdev->dev,
596 "sata_ref_100m clock source missing or invalid\n"); 559 "pcie_phy clock source missing or invalid\n");
597 return PTR_ERR(imx6_pcie->sata_ref_100m); 560 return PTR_ERR(imx6_pcie->pcie_phy);
598 } 561 }
599 562
600 imx6_pcie->pcie_ref_125m = devm_clk_get(&pdev->dev, "pcie_ref_125m"); 563 imx6_pcie->pcie_bus = devm_clk_get(&pdev->dev, "pcie_bus");
601 if (IS_ERR(imx6_pcie->pcie_ref_125m)) { 564 if (IS_ERR(imx6_pcie->pcie_bus)) {
602 dev_err(&pdev->dev, 565 dev_err(&pdev->dev,
603 "pcie_ref_125m clock source missing or invalid\n"); 566 "pcie_bus clock source missing or invalid\n");
604 return PTR_ERR(imx6_pcie->pcie_ref_125m); 567 return PTR_ERR(imx6_pcie->pcie_bus);
605 } 568 }
606 569
607 imx6_pcie->pcie_axi = devm_clk_get(&pdev->dev, "pcie_axi"); 570 imx6_pcie->pcie = devm_clk_get(&pdev->dev, "pcie");
608 if (IS_ERR(imx6_pcie->pcie_axi)) { 571 if (IS_ERR(imx6_pcie->pcie)) {
609 dev_err(&pdev->dev, 572 dev_err(&pdev->dev,
610 "pcie_axi clock source missing or invalid\n"); 573 "pcie clock source missing or invalid\n");
611 return PTR_ERR(imx6_pcie->pcie_axi); 574 return PTR_ERR(imx6_pcie->pcie);
612 } 575 }
613 576
614 /* Grab GPR config register range */ 577 /* Grab GPR config register range */
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c
index 509a29d84509..77a649dd1473 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -155,15 +155,17 @@ static struct irq_chip dw_msi_irq_chip = {
155}; 155};
156 156
157/* MSI int handler */ 157/* MSI int handler */
158void dw_handle_msi_irq(struct pcie_port *pp) 158irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
159{ 159{
160 unsigned long val; 160 unsigned long val;
161 int i, pos, irq; 161 int i, pos, irq;
162 irqreturn_t ret = IRQ_NONE;
162 163
163 for (i = 0; i < MAX_MSI_CTRLS; i++) { 164 for (i = 0; i < MAX_MSI_CTRLS; i++) {
164 dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, 4, 165 dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, 4,
165 (u32 *)&val); 166 (u32 *)&val);
166 if (val) { 167 if (val) {
168 ret = IRQ_HANDLED;
167 pos = 0; 169 pos = 0;
168 while ((pos = find_next_bit(&val, 32, pos)) != 32) { 170 while ((pos = find_next_bit(&val, 32, pos)) != 32) {
169 irq = irq_find_mapping(pp->irq_domain, 171 irq = irq_find_mapping(pp->irq_domain,
@@ -176,6 +178,8 @@ void dw_handle_msi_irq(struct pcie_port *pp)
176 } 178 }
177 } 179 }
178 } 180 }
181
182 return ret;
179} 183}
180 184
181void dw_pcie_msi_init(struct pcie_port *pp) 185void dw_pcie_msi_init(struct pcie_port *pp)
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h
index 3063b3594d88..a169d22d517e 100644
--- a/drivers/pci/host/pcie-designware.h
+++ b/drivers/pci/host/pcie-designware.h
@@ -68,7 +68,7 @@ struct pcie_host_ops {
68 68
69int dw_pcie_cfg_read(void __iomem *addr, int where, int size, u32 *val); 69int dw_pcie_cfg_read(void __iomem *addr, int where, int size, u32 *val);
70int dw_pcie_cfg_write(void __iomem *addr, int where, int size, u32 val); 70int dw_pcie_cfg_write(void __iomem *addr, int where, int size, u32 val);
71void dw_handle_msi_irq(struct pcie_port *pp); 71irqreturn_t dw_handle_msi_irq(struct pcie_port *pp);
72void dw_pcie_msi_init(struct pcie_port *pp); 72void dw_pcie_msi_init(struct pcie_port *pp);
73int dw_pcie_link_up(struct pcie_port *pp); 73int dw_pcie_link_up(struct pcie_port *pp);
74void dw_pcie_setup_rc(struct pcie_port *pp); 74void dw_pcie_setup_rc(struct pcie_port *pp);
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index de7a74782f92..cb6f24740ee3 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -106,7 +106,7 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
106 pci_device_add(virtfn, virtfn->bus); 106 pci_device_add(virtfn, virtfn->bus);
107 mutex_unlock(&iov->dev->sriov->lock); 107 mutex_unlock(&iov->dev->sriov->lock);
108 108
109 rc = pci_bus_add_device(virtfn); 109 pci_bus_add_device(virtfn);
110 sprintf(buf, "virtfn%u", id); 110 sprintf(buf, "virtfn%u", id);
111 rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf); 111 rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
112 if (rc) 112 if (rc)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index c5e082fb82fa..91ef69a52263 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -642,8 +642,7 @@ static void asus_rfkill_hotplug(struct asus_wmi *asus)
642 dev = pci_scan_single_device(bus, 0); 642 dev = pci_scan_single_device(bus, 0);
643 if (dev) { 643 if (dev) {
644 pci_bus_assign_resources(bus); 644 pci_bus_assign_resources(bus);
645 if (pci_bus_add_device(dev)) 645 pci_bus_add_device(dev);
646 pr_err("Unable to hotplug wifi\n");
647 } 646 }
648 } else { 647 } else {
649 dev = pci_get_slot(bus, 0); 648 dev = pci_get_slot(bus, 0);
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
index 399e8c562192..9b0c57cd1d4a 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -633,8 +633,7 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle handle)
633 dev = pci_scan_single_device(bus, 0); 633 dev = pci_scan_single_device(bus, 0);
634 if (dev) { 634 if (dev) {
635 pci_bus_assign_resources(bus); 635 pci_bus_assign_resources(bus);
636 if (pci_bus_add_device(dev)) 636 pci_bus_add_device(dev);
637 pr_err("Unable to hotplug wifi\n");
638 } 637 }
639 } else { 638 } else {
640 dev = pci_get_slot(bus, 0); 639 dev = pci_get_slot(bus, 0);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 65f22e85612d..71d9673c1b2c 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -781,7 +781,7 @@ int pci_scan_slot(struct pci_bus *bus, int devfn);
781struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); 781struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
782void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); 782void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
783unsigned int pci_scan_child_bus(struct pci_bus *bus); 783unsigned int pci_scan_child_bus(struct pci_bus *bus);
784int __must_check pci_bus_add_device(struct pci_dev *dev); 784void pci_bus_add_device(struct pci_dev *dev);
785void pci_read_bridge_bases(struct pci_bus *child); 785void pci_read_bridge_bases(struct pci_bus *child);
786struct resource *pci_find_parent_resource(const struct pci_dev *dev, 786struct resource *pci_find_parent_resource(const struct pci_dev *dev,
787 struct resource *res); 787 struct resource *res);