aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/kernel/pci.c7
-rw-r--r--arch/frv/mb93090-mb00/pci-vdk.c6
-rw-r--r--arch/ia64/sn/kernel/io_init.c2
-rw-r--r--arch/microblaze/pci/pci-common.c4
-rw-r--r--arch/mips/pci/pci.c1
-rw-r--r--arch/mn10300/unit-asb2305/pci.c6
-rw-r--r--arch/s390/pci/pci.c2
-rw-r--r--arch/sh/drivers/pci/pci.c1
-rw-r--r--arch/sparc/kernel/leon_pci.c1
-rw-r--r--arch/tile/kernel/pci.c2
-rw-r--r--arch/tile/kernel/pci_gx.c2
-rw-r--r--arch/x86/pci/common.c2
-rw-r--r--arch/xtensa/kernel/pci.c15
13 files changed, 46 insertions, 5 deletions
diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c
index 98a1525fa164..82f738e5d54c 100644
--- a/arch/alpha/kernel/pci.c
+++ b/arch/alpha/kernel/pci.c
@@ -338,6 +338,8 @@ common_init_pci(void)
338 338
339 bus = pci_scan_root_bus(NULL, next_busno, alpha_mv.pci_ops, 339 bus = pci_scan_root_bus(NULL, next_busno, alpha_mv.pci_ops,
340 hose, &resources); 340 hose, &resources);
341 if (!bus)
342 continue;
341 hose->bus = bus; 343 hose->bus = bus;
342 hose->need_domain_info = need_domain_info; 344 hose->need_domain_info = need_domain_info;
343 next_busno = bus->busn_res.end + 1; 345 next_busno = bus->busn_res.end + 1;
@@ -353,6 +355,11 @@ common_init_pci(void)
353 355
354 pci_assign_unassigned_resources(); 356 pci_assign_unassigned_resources();
355 pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq); 357 pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
358 for (hose = hose_head; hose; hose = hose->next) {
359 bus = hose->bus;
360 if (bus)
361 pci_bus_add_devices(bus);
362 }
356} 363}
357 364
358 365
diff --git a/arch/frv/mb93090-mb00/pci-vdk.c b/arch/frv/mb93090-mb00/pci-vdk.c
index b073f4d771a5..f211839e2cae 100644
--- a/arch/frv/mb93090-mb00/pci-vdk.c
+++ b/arch/frv/mb93090-mb00/pci-vdk.c
@@ -316,6 +316,7 @@ void pcibios_fixup_bus(struct pci_bus *bus)
316 316
317int __init pcibios_init(void) 317int __init pcibios_init(void)
318{ 318{
319 struct pci_bus *bus;
319 struct pci_ops *dir = NULL; 320 struct pci_ops *dir = NULL;
320 LIST_HEAD(resources); 321 LIST_HEAD(resources);
321 322
@@ -383,12 +384,15 @@ int __init pcibios_init(void)
383 printk("PCI: Probing PCI hardware\n"); 384 printk("PCI: Probing PCI hardware\n");
384 pci_add_resource(&resources, &pci_ioport_resource); 385 pci_add_resource(&resources, &pci_ioport_resource);
385 pci_add_resource(&resources, &pci_iomem_resource); 386 pci_add_resource(&resources, &pci_iomem_resource);
386 pci_scan_root_bus(NULL, 0, pci_root_ops, NULL, &resources); 387 bus = pci_scan_root_bus(NULL, 0, pci_root_ops, NULL, &resources);
387 388
388 pcibios_irq_init(); 389 pcibios_irq_init();
389 pcibios_fixup_irqs(); 390 pcibios_fixup_irqs();
390 pcibios_resource_survey(); 391 pcibios_resource_survey();
392 if (!bus)
393 return 0;
391 394
395 pci_bus_add_devices(bus);
392 return 0; 396 return 0;
393} 397}
394 398
diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
index 0b5ce82d203d..1be65eb074ec 100644
--- a/arch/ia64/sn/kernel/io_init.c
+++ b/arch/ia64/sn/kernel/io_init.c
@@ -271,7 +271,9 @@ sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
271 if (bus == NULL) { 271 if (bus == NULL) {
272 kfree(res); 272 kfree(res);
273 kfree(controller); 273 kfree(controller);
274 return;
274 } 275 }
276 pci_bus_add_devices(bus);
275} 277}
276 278
277/* 279/*
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c
index 48528fb81eff..ae838ed5fcf2 100644
--- a/arch/microblaze/pci/pci-common.c
+++ b/arch/microblaze/pci/pci-common.c
@@ -1382,6 +1382,10 @@ static int __init pcibios_init(void)
1382 1382
1383 /* Call common code to handle resource allocation */ 1383 /* Call common code to handle resource allocation */
1384 pcibios_resource_survey(); 1384 pcibios_resource_survey();
1385 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
1386 if (hose->bus)
1387 pci_bus_add_devices(hose->bus);
1388 }
1385 1389
1386 return 0; 1390 return 0;
1387} 1391}
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
index 1bf60b127377..9eb54b557c9f 100644
--- a/arch/mips/pci/pci.c
+++ b/arch/mips/pci/pci.c
@@ -114,6 +114,7 @@ static void pcibios_scanbus(struct pci_controller *hose)
114 pci_bus_size_bridges(bus); 114 pci_bus_size_bridges(bus);
115 pci_bus_assign_resources(bus); 115 pci_bus_assign_resources(bus);
116 } 116 }
117 pci_bus_add_devices(bus);
117 } 118 }
118} 119}
119 120
diff --git a/arch/mn10300/unit-asb2305/pci.c b/arch/mn10300/unit-asb2305/pci.c
index 613ca1e55b4b..3dfe2d31c67b 100644
--- a/arch/mn10300/unit-asb2305/pci.c
+++ b/arch/mn10300/unit-asb2305/pci.c
@@ -342,6 +342,7 @@ static int __init pcibios_init(void)
342{ 342{
343 resource_size_t io_offset, mem_offset; 343 resource_size_t io_offset, mem_offset;
344 LIST_HEAD(resources); 344 LIST_HEAD(resources);
345 struct pci_bus *bus;
345 346
346 ioport_resource.start = 0xA0000000; 347 ioport_resource.start = 0xA0000000;
347 ioport_resource.end = 0xDFFFFFFF; 348 ioport_resource.end = 0xDFFFFFFF;
@@ -371,11 +372,14 @@ static int __init pcibios_init(void)
371 372
372 pci_add_resource_offset(&resources, &pci_ioport_resource, io_offset); 373 pci_add_resource_offset(&resources, &pci_ioport_resource, io_offset);
373 pci_add_resource_offset(&resources, &pci_iomem_resource, mem_offset); 374 pci_add_resource_offset(&resources, &pci_iomem_resource, mem_offset);
374 pci_scan_root_bus(NULL, 0, &pci_direct_ampci, NULL, &resources); 375 bus = pci_scan_root_bus(NULL, 0, &pci_direct_ampci, NULL, &resources);
376 if (!bus)
377 return 0;
375 378
376 pcibios_irq_init(); 379 pcibios_irq_init();
377 pcibios_fixup_irqs(); 380 pcibios_fixup_irqs();
378 pcibios_resource_survey(); 381 pcibios_resource_survey();
382 pci_bus_add_devices(bus);
379 return 0; 383 return 0;
380} 384}
381 385
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index 753a56731951..a2a7391c0b9a 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -776,8 +776,8 @@ static int zpci_scan_bus(struct zpci_dev *zdev)
776 zpci_cleanup_bus_resources(zdev); 776 zpci_cleanup_bus_resources(zdev);
777 return -EIO; 777 return -EIO;
778 } 778 }
779
780 zdev->bus->max_bus_speed = zdev->max_bus_speed; 779 zdev->bus->max_bus_speed = zdev->max_bus_speed;
780 pci_bus_add_devices(zdev->bus);
781 return 0; 781 return 0;
782} 782}
783 783
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c
index 1bc09ee7948f..efc10519916a 100644
--- a/arch/sh/drivers/pci/pci.c
+++ b/arch/sh/drivers/pci/pci.c
@@ -69,6 +69,7 @@ static void pcibios_scanbus(struct pci_channel *hose)
69 69
70 pci_bus_size_bridges(bus); 70 pci_bus_size_bridges(bus);
71 pci_bus_assign_resources(bus); 71 pci_bus_assign_resources(bus);
72 pci_bus_add_devices(bus);
72 } else { 73 } else {
73 pci_free_resource_list(&resources); 74 pci_free_resource_list(&resources);
74 } 75 }
diff --git a/arch/sparc/kernel/leon_pci.c b/arch/sparc/kernel/leon_pci.c
index 899b7203a4e4..297107679fdf 100644
--- a/arch/sparc/kernel/leon_pci.c
+++ b/arch/sparc/kernel/leon_pci.c
@@ -40,6 +40,7 @@ void leon_pci_init(struct platform_device *ofdev, struct leon_pci_info *info)
40 40
41 /* Assign devices with resources */ 41 /* Assign devices with resources */
42 pci_assign_unassigned_resources(); 42 pci_assign_unassigned_resources();
43 pci_bus_add_devices(root_bus);
43 } else { 44 } else {
44 pci_free_resource_list(&resources); 45 pci_free_resource_list(&resources);
45 } 46 }
diff --git a/arch/tile/kernel/pci.c b/arch/tile/kernel/pci.c
index 325df47f114d..9475a74cd53a 100644
--- a/arch/tile/kernel/pci.c
+++ b/arch/tile/kernel/pci.c
@@ -339,6 +339,8 @@ int __init pcibios_init(void)
339 struct pci_bus *next_bus; 339 struct pci_bus *next_bus;
340 struct pci_dev *dev; 340 struct pci_dev *dev;
341 341
342 pci_bus_add_devices(root_bus);
343
342 list_for_each_entry(dev, &root_bus->devices, bus_list) { 344 list_for_each_entry(dev, &root_bus->devices, bus_list) {
343 /* 345 /*
344 * Find the PCI host controller, ie. the 1st 346 * Find the PCI host controller, ie. the 1st
diff --git a/arch/tile/kernel/pci_gx.c b/arch/tile/kernel/pci_gx.c
index 2c95f37ebbed..b1df847d0686 100644
--- a/arch/tile/kernel/pci_gx.c
+++ b/arch/tile/kernel/pci_gx.c
@@ -1030,6 +1030,8 @@ int __init pcibios_init(void)
1030alloc_mem_map_failed: 1030alloc_mem_map_failed:
1031 break; 1031 break;
1032 } 1032 }
1033
1034 pci_bus_add_devices(root_bus);
1033 } 1035 }
1034 1036
1035 return 0; 1037 return 0;
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 3d2612b68694..95a0ba70376b 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -490,7 +490,9 @@ void pcibios_scan_root(int busnum)
490 if (!bus) { 490 if (!bus) {
491 pci_free_resource_list(&resources); 491 pci_free_resource_list(&resources);
492 kfree(sd); 492 kfree(sd);
493 return;
493 } 494 }
495 pci_bus_add_devices(bus);
494} 496}
495 497
496void __init pcibios_set_cache_line_size(void) 498void __init pcibios_set_cache_line_size(void)
diff --git a/arch/xtensa/kernel/pci.c b/arch/xtensa/kernel/pci.c
index 5b3403388d7f..b848cc3dc913 100644
--- a/arch/xtensa/kernel/pci.c
+++ b/arch/xtensa/kernel/pci.c
@@ -174,7 +174,7 @@ static int __init pcibios_init(void)
174 struct pci_controller *pci_ctrl; 174 struct pci_controller *pci_ctrl;
175 struct list_head resources; 175 struct list_head resources;
176 struct pci_bus *bus; 176 struct pci_bus *bus;
177 int next_busno = 0; 177 int next_busno = 0, ret;
178 178
179 printk("PCI: Probing PCI hardware\n"); 179 printk("PCI: Probing PCI hardware\n");
180 180
@@ -185,14 +185,25 @@ static int __init pcibios_init(void)
185 pci_controller_apertures(pci_ctrl, &resources); 185 pci_controller_apertures(pci_ctrl, &resources);
186 bus = pci_scan_root_bus(NULL, pci_ctrl->first_busno, 186 bus = pci_scan_root_bus(NULL, pci_ctrl->first_busno,
187 pci_ctrl->ops, pci_ctrl, &resources); 187 pci_ctrl->ops, pci_ctrl, &resources);
188 if (!bus)
189 continue;
190
188 pci_ctrl->bus = bus; 191 pci_ctrl->bus = bus;
189 pci_ctrl->last_busno = bus->busn_res.end; 192 pci_ctrl->last_busno = bus->busn_res.end;
190 if (next_busno <= pci_ctrl->last_busno) 193 if (next_busno <= pci_ctrl->last_busno)
191 next_busno = pci_ctrl->last_busno+1; 194 next_busno = pci_ctrl->last_busno+1;
192 } 195 }
193 pci_bus_count = next_busno; 196 pci_bus_count = next_busno;
197 ret = platform_pcibios_fixup();
198 if (ret)
199 return ret;
194 200
195 return platform_pcibios_fixup(); 201 for (pci_ctrl = pci_ctrl_head; pci_ctrl; pci_ctrl = pci_ctrl->next) {
202 if (pci_ctrl->bus)
203 pci_bus_add_devices(pci_ctrl->bus);
204 }
205
206 return 0;
196} 207}
197 208
198subsys_initcall(pcibios_init); 209subsys_initcall(pcibios_init);