aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms
diff options
context:
space:
mode:
authorDaniel Axtens <dja@axtens.net>2015-03-31 01:00:39 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2015-04-11 06:49:09 -0400
commitbdc728a849a7047e55014c6f968aa300cc9f57fa (patch)
treeaf858b2bce2bf2a9360c4a23dc78d47804ad2b05 /arch/powerpc/platforms
parenta7f4ee1fe93aa9ae191971be9324edb8f9fbcb4a (diff)
powerpc: move find_and_init_phbs() to pSeries specific code
Previously, find_and_init_phbs() was used in both PowerNV and pSeries setup. However, since RTAS support has been dropped from PowerNV, we can move it into a platform-specific file. Signed-off-by: Daniel Axtens <dja@axtens.net> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r--arch/powerpc/platforms/pseries/setup.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 70304070a260..bcc6d24c77aa 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -461,6 +461,53 @@ static long pseries_little_endian_exceptions(void)
461} 461}
462#endif 462#endif
463 463
464static void __init find_and_init_phbs(void)
465{
466 struct device_node *node;
467 struct pci_controller *phb;
468 struct device_node *root = of_find_node_by_path("/");
469
470 for_each_child_of_node(root, node) {
471 if (node->type == NULL || (strcmp(node->type, "pci") != 0 &&
472 strcmp(node->type, "pciex") != 0))
473 continue;
474
475 phb = pcibios_alloc_controller(node);
476 if (!phb)
477 continue;
478 rtas_setup_phb(phb);
479 pci_process_bridge_OF_ranges(phb, node, 0);
480 isa_bridge_find_early(phb);
481 }
482
483 of_node_put(root);
484 pci_devs_phb_init();
485
486 /*
487 * PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties
488 * in chosen.
489 */
490 if (of_chosen) {
491 const int *prop;
492
493 prop = of_get_property(of_chosen,
494 "linux,pci-probe-only", NULL);
495 if (prop) {
496 if (*prop)
497 pci_add_flags(PCI_PROBE_ONLY);
498 else
499 pci_clear_flags(PCI_PROBE_ONLY);
500 }
501
502#ifdef CONFIG_PPC32 /* Will be made generic soon */
503 prop = of_get_property(of_chosen,
504 "linux,pci-assign-all-buses", NULL);
505 if (prop && *prop)
506 pci_add_flags(PCI_REASSIGN_ALL_BUS);
507#endif /* CONFIG_PPC32 */
508 }
509}
510
464static void __init pSeries_setup_arch(void) 511static void __init pSeries_setup_arch(void)
465{ 512{
466 set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT); 513 set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT);