If we're an agent/end-point or fsl_add_bridge doesn't succeed due to some resource failure we should not scan the PCI bus. We change fsl_add_bridge() to return -ENODEV in the case we're an agent/end-point.
Signed-off-by: Jia Hongtao <b38...@freescale.com> Signed-off-by: Li Yang <le...@freescale.com> --- arch/powerpc/sysdev/fsl_pci.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index 4d4536f..caa7801 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c @@ -370,7 +370,7 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary) iounmap(hose->cfg_data); iounmap(hose->cfg_addr); pcibios_free_controller(hose); - return 0; + return -ENODEV; } setup_pci_cmd(hose); @@ -418,6 +418,7 @@ void fsl_pci_setup(int primary_phb_addr) { struct device_node *np; struct pci_controller *hose; + int ret; dma_addr_t min_dma_addr = 0xffffffff; for_each_node_by_type(np, "pci") { @@ -425,14 +426,16 @@ void fsl_pci_setup(int primary_phb_addr) struct resource rsrc; of_address_to_resource(np, 0, &rsrc); if ((rsrc.start & 0xfffff) == primary_phb_addr) - fsl_add_bridge(np, 1); + ret = fsl_add_bridge(np, 1); else - fsl_add_bridge(np, 0); + ret = fsl_add_bridge(np, 0); - hose = pci_find_hose_for_OF_device(np); - min_dma_addr = min(min_dma_addr, - hose->dma_window_base_cur - + hose->dma_window_size); + if (ret == 0) { + hose = pci_find_hose_for_OF_device(np); + min_dma_addr = min(min_dma_addr, + hose->dma_window_base_cur + + hose->dma_window_size); + } } } -- 1.7.5.1 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev