diff options
| author | Daniel Axtens | 2015-03-31 07:00:39 +0200 | 
|---|---|---|
| committer | Michael Ellerman | 2015-04-11 12:49:09 +0200 | 
| commit | bdc728a849a7047e55014c6f968aa300cc9f57fa (patch) | |
| tree | af858b2bce2bf2a9360c4a23dc78d47804ad2b05 /arch/powerpc | |
| parent | powerpc: Drop return value of smp_ops->probe() (diff) | |
| download | kernel-qcow2-linux-bdc728a849a7047e55014c6f968aa300cc9f57fa.tar.gz kernel-qcow2-linux-bdc728a849a7047e55014c6f968aa300cc9f57fa.tar.xz kernel-qcow2-linux-bdc728a849a7047e55014c6f968aa300cc9f57fa.zip | |
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')
| -rw-r--r-- | arch/powerpc/include/asm/ppc-pci.h | 3 | ||||
| -rw-r--r-- | arch/powerpc/kernel/rtas_pci.c | 47 | ||||
| -rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 47 | 
3 files changed, 47 insertions, 50 deletions
| diff --git a/arch/powerpc/include/asm/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h index ade75238ceb5..4122a86d6858 100644 --- a/arch/powerpc/include/asm/ppc-pci.h +++ b/arch/powerpc/include/asm/ppc-pci.h @@ -23,8 +23,6 @@ extern void pci_setup_phb_io_dynamic(struct pci_controller *hose, int primary);  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 */  /** 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 */  #else /* CONFIG_PCI */ -static inline void find_and_init_phbs(void) { }  static inline void init_pci_config_tokens(void) { }  #endif /* !CONFIG_PCI */ diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c index af29df2517f7..73f1934582c2 100644 --- a/arch/powerpc/kernel/rtas_pci.c +++ b/arch/powerpc/kernel/rtas_pci.c @@ -277,50 +277,3 @@ int rtas_setup_phb(struct pci_controller *phb)  	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 */ -	} -} 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)  }  #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)  {  	set_arch_panic_timeout(10, ARCH_PANIC_TIMEOUT); | 
