Lines Matching +full:bus +full:- +full:range
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2003, 04, 11 Ralf Baechle (ralf@linux-mips.org)
6 * written by Ralf Baechle (ralf@linux-mips.org)
18 #include <asm/cpu-info.h>
35 return (unsigned long)-1; in pci_address_to_pio()
43 * addresses to be allocated in the 0x000-0x0ff region
47 * the low 10 bits of the IO address. The 0x00-0xff region
49 * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
50 * but we want to try to avoid allocating at 0x2900-0x2bff
51 * which might have be mirrored at 0x0100-0x03ff..
58 struct pci_controller *hose = dev->sysdata; in pcibios_align_resource()
59 resource_size_t start = res->start; in pcibios_align_resource()
61 if (res->flags & IORESOURCE_IO) { in pcibios_align_resource()
63 if (start < PCIBIOS_MIN_IO + hose->io_resource->start) in pcibios_align_resource()
64 start = PCIBIOS_MIN_IO + hose->io_resource->start; in pcibios_align_resource()
67 * Put everything into 0x00-0xff region modulo 0x400 in pcibios_align_resource()
71 } else if (res->flags & IORESOURCE_MEM) { in pcibios_align_resource()
73 if (start < PCIBIOS_MIN_MEM + hose->mem_resource->start) in pcibios_align_resource()
74 start = PCIBIOS_MIN_MEM + hose->mem_resource->start; in pcibios_align_resource()
85 struct pci_bus *bus; in pcibios_scanbus() local
93 if (hose->get_busno && pci_has_flag(PCI_PROBE_ONLY)) in pcibios_scanbus()
94 next_busno = (*hose->get_busno)(); in pcibios_scanbus()
97 hose->mem_resource, hose->mem_offset); in pcibios_scanbus()
99 hose->io_resource, hose->io_offset); in pcibios_scanbus()
100 list_splice_init(&resources, &bridge->windows); in pcibios_scanbus()
101 bridge->dev.parent = NULL; in pcibios_scanbus()
102 bridge->sysdata = hose; in pcibios_scanbus()
103 bridge->busnr = next_busno; in pcibios_scanbus()
104 bridge->ops = hose->pci_ops; in pcibios_scanbus()
105 bridge->swizzle_irq = pci_common_swizzle; in pcibios_scanbus()
106 bridge->map_irq = pcibios_map_irq; in pcibios_scanbus()
113 hose->bus = bus = bridge->bus; in pcibios_scanbus()
115 need_domain_info = need_domain_info || pci_domain_nr(bus); in pcibios_scanbus()
118 next_busno = bus->busn_res.end + 1; in pcibios_scanbus()
119 /* Don't allow 8-bit bus number overflow inside the hose - in pcibios_scanbus()
132 pci_bus_claim_resources(bus); in pcibios_scanbus()
136 pci_bus_size_bridges(bus); in pcibios_scanbus()
137 pci_bus_assign_resources(bus); in pcibios_scanbus()
138 list_for_each_entry(child, &bus->children, node) in pcibios_scanbus()
141 pci_bus_add_devices(bus); in pcibios_scanbus()
147 struct of_pci_range range; in pci_load_of_ranges() local
150 hose->of_node = node; in pci_load_of_ranges()
155 for_each_of_pci_range(&parser, &range) { in pci_load_of_ranges()
158 switch (range.flags & IORESOURCE_TYPE_BITS) { 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()
166 res = hose->mem_resource; in pci_load_of_ranges()
170 res->name = node->full_name; in pci_load_of_ranges()
171 res->flags = range.flags; in pci_load_of_ranges()
172 res->start = range.cpu_addr; in pci_load_of_ranges()
173 res->end = range.cpu_addr + range.size - 1; in pci_load_of_ranges()
174 res->parent = res->child = res->sibling = NULL; in pci_load_of_ranges()
179 struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus) in pcibios_get_phb_of_node() argument
181 struct pci_controller *hose = bus->sysdata; in pcibios_get_phb_of_node()
183 return of_node_get(hose->of_node); in pcibios_get_phb_of_node()
193 parent = hose->mem_resource->parent; in register_pci_controller()
197 if (request_resource(parent, hose->mem_resource) < 0) in register_pci_controller()
200 parent = hose->io_resource->parent; in register_pci_controller()
204 if (request_resource(parent, hose->io_resource) < 0) { in register_pci_controller()
205 release_resource(hose->mem_resource); in register_pci_controller()
209 INIT_LIST_HEAD(&hose->list); in register_pci_controller()
210 list_add_tail(&hose->list, &controllers); in register_pci_controller()
213 * Do not panic here but later - this might happen before console init. in register_pci_controller()
215 if (!hose->io_map_base) { in register_pci_controller()
221 * Scan the bus if it is register after the PCI subsystem in register_pci_controller()
234 "Skipping PCI bus scan due to resource conflict\n"); in register_pci_controller()
265 if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM))) in pcibios_enable_resources()
268 (!(r->flags & IORESOURCE_ROM_ENABLE))) in pcibios_enable_resources()
270 if (!r->start && r->end) { in pcibios_enable_resources()
273 return -EINVAL; in pcibios_enable_resources()
275 if (r->flags & IORESOURCE_IO) in pcibios_enable_resources()
277 if (r->flags & IORESOURCE_MEM) in pcibios_enable_resources()
281 pci_info(dev, "enabling device (%04x -> %04x)\n", old_cmd, cmd); in pcibios_enable_resources()
297 void pcibios_fixup_bus(struct pci_bus *bus) in pcibios_fixup_bus() argument
299 struct pci_dev *dev = bus->self; in pcibios_fixup_bus()
302 (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { in pcibios_fixup_bus()
303 pci_read_bridge_bases(bus); in pcibios_fixup_bus()