Lines Matching +full:bus +full:- +full:range
7 * Copyright (C) 2003, 04, 11 Ralf Baechle (ralf@linux-mips.org)
9 * written by Ralf Baechle (ralf@linux-mips.org)
21 #include <asm/cpu-info.h>
38 * addresses to be allocated in the 0x000-0x0ff region
42 * the low 10 bits of the IO address. The 0x00-0xff region
44 * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
45 * but we want to try to avoid allocating at 0x2900-0x2bff
46 * which might have be mirrored at 0x0100-0x03ff..
53 struct pci_controller *hose = dev->sysdata; in pcibios_align_resource()
54 resource_size_t start = res->start; in pcibios_align_resource()
56 if (res->flags & IORESOURCE_IO) { in pcibios_align_resource()
58 if (start < PCIBIOS_MIN_IO + hose->io_resource->start) in pcibios_align_resource()
59 start = PCIBIOS_MIN_IO + hose->io_resource->start; in pcibios_align_resource()
62 * Put everything into 0x00-0xff region modulo 0x400 in pcibios_align_resource()
66 } else if (res->flags & IORESOURCE_MEM) { in pcibios_align_resource()
68 if (start < PCIBIOS_MIN_MEM + hose->mem_resource->start) in pcibios_align_resource()
69 start = PCIBIOS_MIN_MEM + hose->mem_resource->start; in pcibios_align_resource()
80 struct pci_bus *bus; in pcibios_scanbus() local
88 if (hose->get_busno && pci_has_flag(PCI_PROBE_ONLY)) in pcibios_scanbus()
89 next_busno = (*hose->get_busno)(); in pcibios_scanbus()
92 hose->mem_resource, hose->mem_offset); in pcibios_scanbus()
94 hose->io_resource, hose->io_offset); in pcibios_scanbus()
95 pci_add_resource(&resources, hose->busn_resource); in pcibios_scanbus()
96 list_splice_init(&resources, &bridge->windows); in pcibios_scanbus()
97 bridge->dev.parent = NULL; in pcibios_scanbus()
98 bridge->sysdata = hose; in pcibios_scanbus()
99 bridge->busnr = next_busno; in pcibios_scanbus()
100 bridge->ops = hose->pci_ops; in pcibios_scanbus()
101 bridge->swizzle_irq = pci_common_swizzle; in pcibios_scanbus()
102 bridge->map_irq = pcibios_map_irq; in pcibios_scanbus()
109 hose->bus = bus = bridge->bus; in pcibios_scanbus()
111 need_domain_info = need_domain_info || pci_domain_nr(bus); in pcibios_scanbus()
114 next_busno = bus->busn_res.end + 1; in pcibios_scanbus()
115 /* Don't allow 8-bit bus number overflow inside the hose - in pcibios_scanbus()
128 pci_bus_claim_resources(bus); in pcibios_scanbus()
132 pci_bus_size_bridges(bus); in pcibios_scanbus()
133 pci_bus_assign_resources(bus); in pcibios_scanbus()
134 list_for_each_entry(child, &bus->children, node) in pcibios_scanbus()
137 pci_bus_add_devices(bus); in pcibios_scanbus()
143 struct of_pci_range range; in pci_load_of_ranges() local
147 hose->of_node = node; in pci_load_of_ranges()
152 for_each_of_pci_range(&parser, &range) { in pci_load_of_ranges()
155 switch (range.flags & IORESOURCE_TYPE_BITS) { in pci_load_of_ranges()
158 range.cpu_addr, in pci_load_of_ranges()
159 range.cpu_addr + range.size - 1); in pci_load_of_ranges()
160 hose->io_map_base = in pci_load_of_ranges()
161 (unsigned long)ioremap(range.cpu_addr, in pci_load_of_ranges()
162 range.size); in pci_load_of_ranges()
163 res = hose->io_resource; in pci_load_of_ranges()
167 range.cpu_addr, in pci_load_of_ranges()
168 range.cpu_addr + range.size - 1); in pci_load_of_ranges()
169 res = hose->mem_resource; in pci_load_of_ranges()
173 of_pci_range_to_resource(&range, node, res); in pci_load_of_ranges()
177 struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus) in pcibios_get_phb_of_node() argument
179 struct pci_controller *hose = bus->sysdata; in pcibios_get_phb_of_node()
181 return of_node_get(hose->of_node); in pcibios_get_phb_of_node()
191 parent = hose->mem_resource->parent; in register_pci_controller()
195 if (request_resource(parent, hose->mem_resource) < 0) in register_pci_controller()
198 parent = hose->io_resource->parent; in register_pci_controller()
202 if (request_resource(parent, hose->io_resource) < 0) { in register_pci_controller()
203 release_resource(hose->mem_resource); in register_pci_controller()
207 INIT_LIST_HEAD(&hose->list); in register_pci_controller()
208 list_add_tail(&hose->list, &controllers); in register_pci_controller()
211 * Do not panic here but later - this might happen before console init. in register_pci_controller()
213 if (!hose->io_map_base) { in register_pci_controller()
219 * Scan the bus if it is register after the PCI subsystem in register_pci_controller()
232 "Skipping PCI bus scan due to resource conflict\n"); in register_pci_controller()
263 r = &dev->resource[idx]; in pcibios_enable_resources()
264 if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM))) in pcibios_enable_resources()
267 (!(r->flags & IORESOURCE_ROM_ENABLE))) in pcibios_enable_resources()
269 if (!r->start && r->end) { in pcibios_enable_resources()
272 return -EINVAL; in pcibios_enable_resources()
274 if (r->flags & IORESOURCE_IO) in pcibios_enable_resources()
276 if (r->flags & IORESOURCE_MEM) in pcibios_enable_resources()
280 pci_info(dev, "enabling device (%04x -> %04x)\n", old_cmd, cmd); in pcibios_enable_resources()
296 void pcibios_fixup_bus(struct pci_bus *bus) in pcibios_fixup_bus() argument
298 struct pci_dev *dev = bus->self; in pcibios_fixup_bus()
301 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { in pcibios_fixup_bus()
302 pci_read_bridge_bases(bus); in pcibios_fixup_bus()