diff options
| author | Daniel Axtens <dja@axtens.net> | 2015-03-31 01:00:39 -0400 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-04-11 06:49:09 -0400 |
| commit | bdc728a849a7047e55014c6f968aa300cc9f57fa (patch) | |
| tree | af858b2bce2bf2a9360c4a23dc78d47804ad2b05 /arch/powerpc/platforms | |
| parent | a7f4ee1fe93aa9ae191971be9324edb8f9fbcb4a (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.c | 47 |
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 | ||
| 464 | static 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 | |||
| 464 | static void __init pSeries_setup_arch(void) | 511 | static 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); |
