diff options
Diffstat (limited to 'arch/mips/pci/pci.c')
| -rw-r--r-- | arch/mips/pci/pci.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index de7cfc559ddb..8108231f2e20 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
| @@ -77,6 +77,13 @@ pcibios_align_resource(void *data, struct resource *res, | |||
| 77 | 77 | ||
| 78 | void __init register_pci_controller(struct pci_controller *hose) | 78 | void __init register_pci_controller(struct pci_controller *hose) |
| 79 | { | 79 | { |
| 80 | if (request_resource(&iomem_resource, hose->mem_resource) < 0) | ||
| 81 | goto out; | ||
| 82 | if (request_resource(&ioport_resource, hose->io_resource) < 0) { | ||
| 83 | release_resource(hose->mem_resource); | ||
| 84 | goto out; | ||
| 85 | } | ||
| 86 | |||
| 80 | *hose_tail = hose; | 87 | *hose_tail = hose; |
| 81 | hose_tail = &hose->next; | 88 | hose_tail = &hose->next; |
| 82 | 89 | ||
| @@ -87,6 +94,11 @@ void __init register_pci_controller(struct pci_controller *hose) | |||
| 87 | printk(KERN_WARNING | 94 | printk(KERN_WARNING |
| 88 | "registering PCI controller with io_map_base unset\n"); | 95 | "registering PCI controller with io_map_base unset\n"); |
| 89 | } | 96 | } |
| 97 | return; | ||
| 98 | |||
| 99 | out: | ||
| 100 | printk(KERN_WARNING | ||
| 101 | "Skipping PCI bus scan due to resource conflict\n"); | ||
| 90 | } | 102 | } |
| 91 | 103 | ||
| 92 | /* Most MIPS systems have straight-forward swizzling needs. */ | 104 | /* Most MIPS systems have straight-forward swizzling needs. */ |
| @@ -121,11 +133,6 @@ static int __init pcibios_init(void) | |||
| 121 | /* Scan all of the recorded PCI controllers. */ | 133 | /* Scan all of the recorded PCI controllers. */ |
| 122 | for (next_busno = 0, hose = hose_head; hose; hose = hose->next) { | 134 | for (next_busno = 0, hose = hose_head; hose; hose = hose->next) { |
| 123 | 135 | ||
| 124 | if (request_resource(&iomem_resource, hose->mem_resource) < 0) | ||
| 125 | goto out; | ||
| 126 | if (request_resource(&ioport_resource, hose->io_resource) < 0) | ||
| 127 | goto out_free_mem_resource; | ||
| 128 | |||
| 129 | if (!hose->iommu) | 136 | if (!hose->iommu) |
| 130 | PCI_DMA_BUS_IS_PHYS = 1; | 137 | PCI_DMA_BUS_IS_PHYS = 1; |
| 131 | 138 | ||
| @@ -144,14 +151,6 @@ static int __init pcibios_init(void) | |||
| 144 | need_domain_info = 1; | 151 | need_domain_info = 1; |
| 145 | } | 152 | } |
| 146 | } | 153 | } |
| 147 | continue; | ||
| 148 | |||
| 149 | out_free_mem_resource: | ||
| 150 | release_resource(hose->mem_resource); | ||
| 151 | |||
| 152 | out: | ||
| 153 | printk(KERN_WARNING | ||
| 154 | "Skipping PCI bus scan due to resource conflict\n"); | ||
| 155 | } | 154 | } |
| 156 | 155 | ||
| 157 | if (!pci_probe_only) | 156 | if (!pci_probe_only) |
