sh: Handle PCI controller resource conflicts.
authorPaul Mundt <lethal@linux-sh.org>
Mon, 1 Feb 2010 04:11:25 +0000 (13:11 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 1 Feb 2010 04:11:25 +0000 (13:11 +0900)
register_pci_controller() can fail, but presently is a void function.
Change this over to an int so that we can bail early before continuing on
with post-registration initialization (such as throwing the controller in
to 66MHz mode in the case of the SH7780 host controller).

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/drivers/pci/pci-dreamcast.c
arch/sh/drivers/pci/pci-sh5.c
arch/sh/drivers/pci/pci-sh7751.c
arch/sh/drivers/pci/pci-sh7780.c
arch/sh/drivers/pci/pci.c
arch/sh/drivers/pci/pcie-sh7786.c
arch/sh/include/asm/pci.h

index 210f9d4af1411c3aa0efe893302043c487e4d463..bd5a1e50ebf629d8db648cc7005c738eb5981ca6 100644 (file)
@@ -95,8 +95,6 @@ static int __init gapspci_init(void)
        outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10);
        outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14);
 
-       register_pci_controller(&dreamcast_pci_controller);
-
-       return 0;
+       return register_pci_controller(&dreamcast_pci_controller);
 }
 arch_initcall(gapspci_init);
index 873ed2b4405575a53bcb2f0c3b453ebea0cfc473..bce73faabc88267fcc149db90ccfaa9d7532d59f 100644 (file)
@@ -216,8 +216,6 @@ static int __init sh5pci_init(void)
        sh5_mem_resource.start = memStart;
        sh5_mem_resource.end = memStart + memSize;
 
-       register_pci_controller(&sh5pci_controller);
-
-       return 0;
+       return register_pci_controller(&sh5pci_controller);
 }
 arch_initcall(sh5pci_init);
index 02306ddb4011124749cdf8989a7f051261c5e919..6ad5beb524aacf4467961e7f536349d09923eb3d 100644 (file)
@@ -176,8 +176,6 @@ static int __init sh7751_pci_init(void)
        word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_ARBM;
        pci_write_reg(chan, word, SH4_PCICR);
 
-       register_pci_controller(chan);
-
-       return 0;
+       return register_pci_controller(chan);
 }
 arch_initcall(sh7751_pci_init);
index b68f45b6451a3ad7478b6ac402cc9f13539c0ac2..0e0ddd67e6e13944b9536818becffeba7cca5aeb 100644 (file)
@@ -71,6 +71,7 @@ static int __init sh7780_pci_init(void)
        size_t memsize;
        unsigned int id;
        const char *type;
+       int ret;
 
        printk(KERN_NOTICE "PCI: Starting intialization.\n");
 
@@ -197,7 +198,9 @@ static int __init sh7780_pci_init(void)
        __raw_writel(SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO,
                     chan->reg_base + SH4_PCICR);
 
-       register_pci_controller(chan);
+       ret = register_pci_controller(chan);
+       if (unlikely(ret))
+               return ret;
 
        sh7780_pci66_init(chan);
 
index 63b11fddffecdda25145d749043cc23773122c07..488331c45033d9159c7d7a2b81861bbb2f7fe1b3 100644 (file)
@@ -58,7 +58,7 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)
 
 static DEFINE_MUTEX(pci_scan_mutex);
 
-void __devinit register_pci_controller(struct pci_channel *hose)
+int __devinit register_pci_controller(struct pci_channel *hose)
 {
        if (request_resource(&iomem_resource, hose->mem_resource) < 0)
                goto out;
@@ -88,10 +88,11 @@ void __devinit register_pci_controller(struct pci_channel *hose)
                mutex_unlock(&pci_scan_mutex);
        }
 
-       return;
+       return 0;
 
 out:
        printk(KERN_WARNING "Skipping PCI bus scan due to resource conflict\n");
+       return -1;
 }
 
 static int __init pcibios_init(void)
index ac37ee879babb8bc230a0e432af326b832ab6ee6..feac1fef21eb9269581287438a6e45154f3e45af 100644 (file)
@@ -296,9 +296,7 @@ static int __devinit sh7786_pcie_init_hw(struct sh7786_pcie_port *port)
        if (unlikely(ret < 0))
                return ret;
 
-       register_pci_controller(port->hose);
-
-       return 0;
+       return register_pci_controller(port->hose);
 }
 
 static struct sh7786_pcie_hwops sh7786_65nm_pcie_hwops __initdata = {
index 5849d435c441968f3873ffea6575989b5869d5d7..bbd10cf7982586fcdc1d72bd5620b81ac95cb649 100644 (file)
@@ -31,7 +31,7 @@ struct pci_channel {
        unsigned int            need_domain_info;
 };
 
-extern void register_pci_controller(struct pci_channel *hose);
+extern int register_pci_controller(struct pci_channel *hose);
 extern int pci_is_66mhz_capable(struct pci_channel *hose,
                                int top_bus, int current_bus);
 
This page took 0.027921 seconds and 5 git commands to generate.