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>
This commit is contained in:
parent
a7f4ee1fe9
commit
bdc728a849
|
@ -23,8 +23,6 @@ extern void pci_setup_phb_io_dynamic(struct pci_controller *hose, int primary);
|
||||||
|
|
||||||
extern struct list_head hose_list;
|
extern struct list_head hose_list;
|
||||||
|
|
||||||
extern void find_and_init_phbs(void);
|
|
||||||
|
|
||||||
extern struct pci_dev *isa_bridge_pcidev; /* may be NULL if no ISA bus */
|
extern struct pci_dev *isa_bridge_pcidev; /* may be NULL if no ISA bus */
|
||||||
|
|
||||||
/** Bus Unit ID macros; get low and hi 32-bits of the 64-bit BUID */
|
/** Bus Unit ID macros; get low and hi 32-bits of the 64-bit BUID */
|
||||||
|
@ -81,7 +79,6 @@ static inline const char *eeh_driver_name(struct pci_dev *pdev)
|
||||||
#endif /* CONFIG_EEH */
|
#endif /* CONFIG_EEH */
|
||||||
|
|
||||||
#else /* CONFIG_PCI */
|
#else /* CONFIG_PCI */
|
||||||
static inline void find_and_init_phbs(void) { }
|
|
||||||
static inline void init_pci_config_tokens(void) { }
|
static inline void init_pci_config_tokens(void) { }
|
||||||
#endif /* !CONFIG_PCI */
|
#endif /* !CONFIG_PCI */
|
||||||
|
|
||||||
|
|
|
@ -277,50 +277,3 @@ int rtas_setup_phb(struct pci_controller *phb)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init find_and_init_phbs(void)
|
|
||||||
{
|
|
||||||
struct device_node *node;
|
|
||||||
struct pci_controller *phb;
|
|
||||||
struct device_node *root = of_find_node_by_path("/");
|
|
||||||
|
|
||||||
for_each_child_of_node(root, node) {
|
|
||||||
if (node->type == NULL || (strcmp(node->type, "pci") != 0 &&
|
|
||||||
strcmp(node->type, "pciex") != 0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
phb = pcibios_alloc_controller(node);
|
|
||||||
if (!phb)
|
|
||||||
continue;
|
|
||||||
rtas_setup_phb(phb);
|
|
||||||
pci_process_bridge_OF_ranges(phb, node, 0);
|
|
||||||
isa_bridge_find_early(phb);
|
|
||||||
}
|
|
||||||
|
|
||||||
of_node_put(root);
|
|
||||||
pci_devs_phb_init();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties
|
|
||||||
* in chosen.
|
|
||||||
*/
|
|
||||||
if (of_chosen) {
|
|
||||||
const int *prop;
|
|
||||||
|
|
||||||
prop = of_get_property(of_chosen,
|
|
||||||
"linux,pci-probe-only", NULL);
|
|
||||||
if (prop) {
|
|
||||||
if (*prop)
|
|
||||||
pci_add_flags(PCI_PROBE_ONLY);
|
|
||||||
else
|
|
||||||
pci_clear_flags(PCI_PROBE_ONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_PPC32 /* Will be made generic soon */
|
|
||||||
prop = of_get_property(of_chosen,
|
|
||||||
"linux,pci-assign-all-buses", NULL);
|
|
||||||
if (prop && *prop)
|
|
||||||
pci_add_flags(PCI_REASSIGN_ALL_BUS);
|
|
||||||
#endif /* CONFIG_PPC32 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -461,6 +461,53 @@ static long pseries_little_endian_exceptions(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void __init find_and_init_phbs(void)
|
||||||
|
{
|
||||||
|
struct device_node *node;
|
||||||
|
struct pci_controller *phb;
|
||||||
|
struct device_node *root = of_find_node_by_path("/");
|
||||||
|
|
||||||
|
for_each_child_of_node(root, node) {
|
||||||
|
if (node->type == NULL || (strcmp(node->type, "pci") != 0 &&
|
||||||
|
strcmp(node->type, "pciex") != 0))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
phb = pcibios_alloc_controller(node);
|
||||||
|
if (!phb)
|
||||||
|
continue;
|
||||||
|
rtas_setup_phb(phb);
|
||||||
|
pci_process_bridge_OF_ranges(phb, node, 0);
|
||||||
|
isa_bridge_find_early(phb);
|
||||||
|
}
|
||||||
|
|
||||||
|
of_node_put(root);
|
||||||
|
pci_devs_phb_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties
|
||||||
|
* in chosen.
|
||||||
|
*/
|
||||||
|
if (of_chosen) {
|
||||||
|
const int *prop;
|
||||||
|
|
||||||
|
prop = of_get_property(of_chosen,
|
||||||
|
"linux,pci-probe-only", NULL);
|
||||||
|
if (prop) {
|
||||||
|
if (*prop)
|
||||||
|
pci_add_flags(PCI_PROBE_ONLY);
|
||||||
|
else
|
||||||
|
pci_clear_flags(PCI_PROBE_ONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC32 /* Will be made generic soon */
|
||||||
|
prop = of_get_property(of_chosen,
|
||||||
|
"linux,pci-assign-all-buses", NULL);
|
||||||
|
if (prop && *prop)
|
||||||
|
pci_add_flags(PCI_REASSIGN_ALL_BUS);
|
||||||
|
#endif /* CONFIG_PPC32 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __init pSeries_setup_arch(void)
|
static void __init pSeries_setup_arch(void)
|
||||||
{
|
{
|
||||||
set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT);
|
set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT);
|
||||||
|
|
Loading…
Reference in New Issue