blob: 2dc8675eea1aadcb67164eb448d1d5f0cd9b7d0d [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * probe.c - PCI detection and setup code
3 */
4
5#include <linux/kernel.h>
6#include <linux/delay.h>
7#include <linux/init.h>
8#include <linux/pci.h>
9#include <linux/slab.h>
10#include <linux/module.h>
11#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080012#include <linux/pci-aspm.h>
Bjorn Helgaas284f5f92012-04-30 15:21:02 -060013#include <asm-generic/pci-bridge.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090014#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
17#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070018
Bjorn Helgaas5a21d702012-02-23 20:18:59 -070019static LIST_HEAD(pci_host_bridges);
20
Linus Torvalds1da177e2005-04-16 15:20:36 -070021/* Ugh. Need to stop exporting this to modules. */
22LIST_HEAD(pci_root_buses);
23EXPORT_SYMBOL(pci_root_buses);
24
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080025
26static int find_anything(struct device *dev, void *data)
27{
28 return 1;
29}
Linus Torvalds1da177e2005-04-16 15:20:36 -070030
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070031/*
32 * Some device drivers need know if pci is initiated.
33 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080034 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070035 */
36int no_pci_devices(void)
37{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080038 struct device *dev;
39 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070040
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080041 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
42 no_devices = (dev == NULL);
43 put_device(dev);
44 return no_devices;
45}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070046EXPORT_SYMBOL(no_pci_devices);
47
Bjorn Helgaas5a21d702012-02-23 20:18:59 -070048static struct pci_host_bridge *pci_host_bridge(struct pci_dev *dev)
49{
50 struct pci_bus *bus;
51 struct pci_host_bridge *bridge;
52
53 bus = dev->bus;
54 while (bus->parent)
55 bus = bus->parent;
56
57 list_for_each_entry(bridge, &pci_host_bridges, list) {
58 if (bridge->bus == bus)
59 return bridge;
60 }
61
62 return NULL;
63}
64
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -070065static bool resource_contains(struct resource *res1, struct resource *res2)
66{
67 return res1->start <= res2->start && res1->end >= res2->end;
68}
69
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -070070void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
71 struct resource *res)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -070072{
73 struct pci_host_bridge *bridge = pci_host_bridge(dev);
74 struct pci_host_bridge_window *window;
75 resource_size_t offset = 0;
76
77 list_for_each_entry(window, &bridge->windows, list) {
78 if (resource_type(res) != resource_type(window->res))
79 continue;
80
81 if (resource_contains(window->res, res)) {
82 offset = window->offset;
83 break;
84 }
85 }
86
87 region->start = res->start - offset;
88 region->end = res->end - offset;
89}
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -070090EXPORT_SYMBOL(pcibios_resource_to_bus);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -070091
92static bool region_contains(struct pci_bus_region *region1,
93 struct pci_bus_region *region2)
94{
95 return region1->start <= region2->start && region1->end >= region2->end;
96}
97
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -070098void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
99 struct pci_bus_region *region)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700100{
101 struct pci_host_bridge *bridge = pci_host_bridge(dev);
102 struct pci_host_bridge_window *window;
103 struct pci_bus_region bus_region;
104 resource_size_t offset = 0;
105
106 list_for_each_entry(window, &bridge->windows, list) {
107 if (resource_type(res) != resource_type(window->res))
108 continue;
109
110 bus_region.start = window->res->start - window->offset;
111 bus_region.end = window->res->end - window->offset;
112
113 if (region_contains(&bus_region, region)) {
114 offset = window->offset;
115 break;
116 }
117 }
118
119 res->start = region->start + offset;
120 res->end = region->end + offset;
121}
Bjorn Helgaas36a66cd2012-02-23 20:19:00 -0700122EXPORT_SYMBOL(pcibios_bus_to_resource);
Bjorn Helgaas36a66cd2012-02-23 20:19:00 -0700123
Linus Torvalds1da177e2005-04-16 15:20:36 -0700124/*
Linus Torvalds1da177e2005-04-16 15:20:36 -0700125 * PCI Bus Class
126 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400127static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700128{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400129 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700130
131 if (pci_bus->bridge)
132 put_device(pci_bus->bridge);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700133 pci_bus_remove_resources(pci_bus);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +1000134 pci_release_bus_of_node(pci_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700135 kfree(pci_bus);
136}
137
138static struct class pcibus_class = {
139 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400140 .dev_release = &release_pcibus_dev,
Yinghai Lub9d320f2011-05-12 17:11:39 -0700141 .dev_attrs = pcibus_dev_attrs,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700142};
143
144static int __init pcibus_class_init(void)
145{
146 return class_register(&pcibus_class);
147}
148postcore_initcall(pcibus_class_init);
149
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400150static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800151{
152 u64 size = mask & maxbase; /* Find the significant bits */
153 if (!size)
154 return 0;
155
156 /* Get the lowest of them to find the decode size, and
157 from that the extent. */
158 size = (size & ~(size-1)) - 1;
159
160 /* base == maxbase can be valid only if the BAR has
161 already been programmed with all 1s. */
162 if (base == maxbase && ((base | size) & mask) != mask)
163 return 0;
164
165 return size;
166}
167
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600168static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800169{
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600170 u32 mem_type;
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600171 unsigned long flags;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600172
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400173 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600174 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
175 flags |= IORESOURCE_IO;
176 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400177 }
178
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600179 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
180 flags |= IORESOURCE_MEM;
181 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
182 flags |= IORESOURCE_PREFETCH;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400183
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600184 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
185 switch (mem_type) {
186 case PCI_BASE_ADDRESS_MEM_TYPE_32:
187 break;
188 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
189 dev_info(&dev->dev, "1M mem BAR treated as 32-bit BAR\n");
190 break;
191 case PCI_BASE_ADDRESS_MEM_TYPE_64:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600192 flags |= IORESOURCE_MEM_64;
193 break;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600194 default:
195 dev_warn(&dev->dev,
196 "mem unknown type %x treated as 32-bit BAR\n",
197 mem_type);
198 break;
199 }
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600200 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400201}
202
Yu Zhao0b400c72008-11-22 02:40:40 +0800203/**
204 * pci_read_base - read a PCI BAR
205 * @dev: the PCI device
206 * @type: type of the BAR
207 * @res: resource buffer to be filled in
208 * @pos: BAR position in the config space
209 *
210 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400211 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800212int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400213 struct resource *res, unsigned int pos)
214{
215 u32 l, sz, mask;
Jacob Pan253d2e52010-07-16 10:19:22 -0700216 u16 orig_cmd;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700217 struct pci_bus_region region;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400218
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200219 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400220
Jacob Pan253d2e52010-07-16 10:19:22 -0700221 if (!dev->mmio_always_on) {
222 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
223 pci_write_config_word(dev, PCI_COMMAND,
224 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
225 }
226
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400227 res->name = pci_name(dev);
228
229 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200230 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400231 pci_read_config_dword(dev, pos, &sz);
232 pci_write_config_dword(dev, pos, l);
233
Jacob Pan253d2e52010-07-16 10:19:22 -0700234 if (!dev->mmio_always_on)
235 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
236
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400237 /*
238 * All bits set in sz means the device isn't working properly.
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600239 * If the BAR isn't implemented, all bits must be 0. If it's a
240 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
241 * 1 must be clear.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400242 */
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600243 if (!sz || sz == 0xffffffff)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400244 goto fail;
245
246 /*
247 * I don't know how l can have all bits set. Copied from old code.
248 * Maybe it fixes a bug on some ancient platform.
249 */
250 if (l == 0xffffffff)
251 l = 0;
252
253 if (type == pci_bar_unknown) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600254 res->flags = decode_bar(dev, l);
255 res->flags |= IORESOURCE_SIZEALIGN;
256 if (res->flags & IORESOURCE_IO) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400257 l &= PCI_BASE_ADDRESS_IO_MASK;
David S. Miller5aceca92011-05-23 17:12:22 -0700258 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400259 } else {
260 l &= PCI_BASE_ADDRESS_MEM_MASK;
261 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
262 }
263 } else {
264 res->flags |= (l & IORESOURCE_ROM_ENABLE);
265 l &= PCI_ROM_ADDRESS_MASK;
266 mask = (u32)PCI_ROM_ADDRESS_MASK;
267 }
268
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600269 if (res->flags & IORESOURCE_MEM_64) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400270 u64 l64 = l;
271 u64 sz64 = sz;
272 u64 mask64 = mask | (u64)~0 << 32;
273
274 pci_read_config_dword(dev, pos + 4, &l);
275 pci_write_config_dword(dev, pos + 4, ~0);
276 pci_read_config_dword(dev, pos + 4, &sz);
277 pci_write_config_dword(dev, pos + 4, l);
278
279 l64 |= ((u64)l << 32);
280 sz64 |= ((u64)sz << 32);
281
282 sz64 = pci_size(l64, sz64, mask64);
283
284 if (!sz64)
285 goto fail;
286
Matthew Wilcoxcc5499c2008-07-28 13:39:00 -0400287 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700288 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",
289 pos);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400290 goto fail;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600291 }
292
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600293 if ((sizeof(resource_size_t) < 8) && l) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400294 /* Address above 32-bit boundary; disable the BAR */
295 pci_write_config_dword(dev, pos, 0);
296 pci_write_config_dword(dev, pos + 4, 0);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700297 region.start = 0;
298 region.end = sz64;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700299 pcibios_bus_to_resource(dev, res, &region);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400300 } else {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700301 region.start = l64;
302 region.end = l64 + sz64;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700303 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600304 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
Bjorn Helgaasa369c792009-10-06 15:33:44 -0600305 pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400306 }
307 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600308 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400309
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600310 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400311 goto fail;
312
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700313 region.start = l;
314 region.end = l + sz;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700315 pcibios_bus_to_resource(dev, res, &region);
Vincent Legollf393d9b2008-10-12 12:26:12 +0200316
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600317 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400318 }
319
320 out:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600321 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400322 fail:
323 res->flags = 0;
324 goto out;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800325}
326
Linus Torvalds1da177e2005-04-16 15:20:36 -0700327static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
328{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400329 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700330
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400331 for (pos = 0; pos < howmany; pos++) {
332 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700333 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400334 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700335 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400336
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400338 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700339 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400340 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
341 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
342 IORESOURCE_SIZEALIGN;
343 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700344 }
345}
346
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700347static void __devinit pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700348{
349 struct pci_dev *dev = child->self;
350 u8 io_base_lo, io_limit_lo;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700351 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700352 struct pci_bus_region region;
353 struct resource *res, res2;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700354
Linus Torvalds1da177e2005-04-16 15:20:36 -0700355 res = child->resource[0];
356 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
357 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
358 base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
359 limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
360
361 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
362 u16 io_base_hi, io_limit_hi;
363 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
364 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
365 base |= (io_base_hi << 16);
366 limit |= (io_limit_hi << 16);
367 }
368
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800369 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaascf48fb62012-03-16 17:47:59 -0600371 res2.flags = res->flags;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700372 region.start = base;
373 region.end = limit + 0xfff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700374 pcibios_bus_to_resource(dev, &res2, &region);
Daniel Yeisley9d265122005-12-05 07:06:43 -0500375 if (!res->start)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700376 res->start = res2.start;
Daniel Yeisley9d265122005-12-05 07:06:43 -0500377 if (!res->end)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700378 res->end = res2.end;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600379 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700380 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700381}
382
383static void __devinit pci_read_bridge_mmio(struct pci_bus *child)
384{
385 struct pci_dev *dev = child->self;
386 u16 mem_base_lo, mem_limit_lo;
387 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700388 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700389 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700390
391 res = child->resource[1];
392 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
393 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
394 base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
395 limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800396 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700397 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700398 region.start = base;
399 region.end = limit + 0xfffff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700400 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600401 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700402 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700403}
404
405static void __devinit pci_read_bridge_mmio_pref(struct pci_bus *child)
406{
407 struct pci_dev *dev = child->self;
408 u16 mem_base_lo, mem_limit_lo;
409 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700410 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700411 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700412
413 res = child->resource[2];
414 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
415 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
416 base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
417 limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
418
419 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
420 u32 mem_base_hi, mem_limit_hi;
421 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
422 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
423
424 /*
425 * Some bridges set the base > limit by default, and some
426 * (broken) BIOSes do not initialize them. If we find
427 * this, just assume they are not being used.
428 */
429 if (mem_base_hi <= mem_limit_hi) {
430#if BITS_PER_LONG == 64
431 base |= ((long) mem_base_hi) << 32;
432 limit |= ((long) mem_limit_hi) << 32;
433#else
434 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600435 dev_err(&dev->dev, "can't handle 64-bit "
436 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700437 return;
438 }
439#endif
440 }
441 }
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800442 if (base && base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700443 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
444 IORESOURCE_MEM | IORESOURCE_PREFETCH;
445 if (res->flags & PCI_PREF_RANGE_TYPE_64)
446 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700447 region.start = base;
448 region.end = limit + 0xfffff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700449 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600450 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700451 }
452}
453
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700454void __devinit pci_read_bridge_bases(struct pci_bus *child)
455{
456 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700457 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700458 int i;
459
460 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
461 return;
462
463 dev_info(&dev->dev, "PCI bridge to [bus %02x-%02x]%s\n",
464 child->secondary, child->subordinate,
465 dev->transparent ? " (subtractive decode)" : "");
466
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700467 pci_bus_remove_resources(child);
468 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
469 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
470
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700471 pci_read_bridge_io(child);
472 pci_read_bridge_mmio(child);
473 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700474
475 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700476 pci_bus_for_each_resource(child->parent, res, i) {
477 if (res) {
478 pci_bus_add_resource(child, res,
479 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700480 dev_printk(KERN_DEBUG, &dev->dev,
481 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700482 res);
483 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700484 }
485 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700486}
487
Sam Ravnborg96bde062007-03-26 21:53:30 -0800488static struct pci_bus * pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700489{
490 struct pci_bus *b;
491
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100492 b = kzalloc(sizeof(*b), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700493 if (b) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700494 INIT_LIST_HEAD(&b->node);
495 INIT_LIST_HEAD(&b->children);
496 INIT_LIST_HEAD(&b->devices);
Alex Chiangf46753c2008-06-10 15:28:50 -0600497 INIT_LIST_HEAD(&b->slots);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700498 INIT_LIST_HEAD(&b->resources);
Matthew Wilcox3749c512009-12-13 08:11:32 -0500499 b->max_bus_speed = PCI_SPEED_UNKNOWN;
500 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700501 }
502 return b;
503}
504
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500505static unsigned char pcix_bus_speed[] = {
506 PCI_SPEED_UNKNOWN, /* 0 */
507 PCI_SPEED_66MHz_PCIX, /* 1 */
508 PCI_SPEED_100MHz_PCIX, /* 2 */
509 PCI_SPEED_133MHz_PCIX, /* 3 */
510 PCI_SPEED_UNKNOWN, /* 4 */
511 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
512 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
513 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
514 PCI_SPEED_UNKNOWN, /* 8 */
515 PCI_SPEED_66MHz_PCIX_266, /* 9 */
516 PCI_SPEED_100MHz_PCIX_266, /* A */
517 PCI_SPEED_133MHz_PCIX_266, /* B */
518 PCI_SPEED_UNKNOWN, /* C */
519 PCI_SPEED_66MHz_PCIX_533, /* D */
520 PCI_SPEED_100MHz_PCIX_533, /* E */
521 PCI_SPEED_133MHz_PCIX_533 /* F */
522};
523
Matthew Wilcox3749c512009-12-13 08:11:32 -0500524static unsigned char pcie_link_speed[] = {
525 PCI_SPEED_UNKNOWN, /* 0 */
526 PCIE_SPEED_2_5GT, /* 1 */
527 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500528 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500529 PCI_SPEED_UNKNOWN, /* 4 */
530 PCI_SPEED_UNKNOWN, /* 5 */
531 PCI_SPEED_UNKNOWN, /* 6 */
532 PCI_SPEED_UNKNOWN, /* 7 */
533 PCI_SPEED_UNKNOWN, /* 8 */
534 PCI_SPEED_UNKNOWN, /* 9 */
535 PCI_SPEED_UNKNOWN, /* A */
536 PCI_SPEED_UNKNOWN, /* B */
537 PCI_SPEED_UNKNOWN, /* C */
538 PCI_SPEED_UNKNOWN, /* D */
539 PCI_SPEED_UNKNOWN, /* E */
540 PCI_SPEED_UNKNOWN /* F */
541};
542
543void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
544{
545 bus->cur_bus_speed = pcie_link_speed[linksta & 0xf];
546}
547EXPORT_SYMBOL_GPL(pcie_update_link_speed);
548
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500549static unsigned char agp_speeds[] = {
550 AGP_UNKNOWN,
551 AGP_1X,
552 AGP_2X,
553 AGP_4X,
554 AGP_8X
555};
556
557static enum pci_bus_speed agp_speed(int agp3, int agpstat)
558{
559 int index = 0;
560
561 if (agpstat & 4)
562 index = 3;
563 else if (agpstat & 2)
564 index = 2;
565 else if (agpstat & 1)
566 index = 1;
567 else
568 goto out;
569
570 if (agp3) {
571 index += 2;
572 if (index == 5)
573 index = 0;
574 }
575
576 out:
577 return agp_speeds[index];
578}
579
580
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500581static void pci_set_bus_speed(struct pci_bus *bus)
582{
583 struct pci_dev *bridge = bus->self;
584 int pos;
585
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500586 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
587 if (!pos)
588 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
589 if (pos) {
590 u32 agpstat, agpcmd;
591
592 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
593 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
594
595 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
596 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
597 }
598
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500599 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
600 if (pos) {
601 u16 status;
602 enum pci_bus_speed max;
603 pci_read_config_word(bridge, pos + 2, &status);
604
605 if (status & 0x8000) {
606 max = PCI_SPEED_133MHz_PCIX_533;
607 } else if (status & 0x4000) {
608 max = PCI_SPEED_133MHz_PCIX_266;
609 } else if (status & 0x0002) {
610 if (((status >> 12) & 0x3) == 2) {
611 max = PCI_SPEED_133MHz_PCIX_ECC;
612 } else {
613 max = PCI_SPEED_133MHz_PCIX;
614 }
615 } else {
616 max = PCI_SPEED_66MHz_PCIX;
617 }
618
619 bus->max_bus_speed = max;
620 bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf];
621
622 return;
623 }
624
625 pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
626 if (pos) {
627 u32 linkcap;
628 u16 linksta;
629
630 pci_read_config_dword(bridge, pos + PCI_EXP_LNKCAP, &linkcap);
631 bus->max_bus_speed = pcie_link_speed[linkcap & 0xf];
632
633 pci_read_config_word(bridge, pos + PCI_EXP_LNKSTA, &linksta);
634 pcie_update_link_speed(bus, linksta);
635 }
636}
637
638
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700639static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
640 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700641{
642 struct pci_bus *child;
643 int i;
644
645 /*
646 * Allocate a new bus, and inherit stuff from the parent..
647 */
648 child = pci_alloc_bus();
649 if (!child)
650 return NULL;
651
Linus Torvalds1da177e2005-04-16 15:20:36 -0700652 child->parent = parent;
653 child->ops = parent->ops;
654 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200655 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700656
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400657 /* initialize some portions of the bus device, but don't register it
658 * now as the parent is not properly set up yet. This device will get
659 * registered later in pci_bus_add_devices()
660 */
661 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100662 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700663
664 /*
665 * Set up the primary, secondary and subordinate
666 * bus numbers.
667 */
668 child->number = child->secondary = busnr;
669 child->primary = parent->secondary;
670 child->subordinate = 0xff;
671
Yu Zhao3789fa82008-11-22 02:41:07 +0800672 if (!bridge)
673 return child;
674
675 child->self = bridge;
676 child->bridge = get_device(&bridge->dev);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +1000677 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500678 pci_set_bus_speed(child);
679
Linus Torvalds1da177e2005-04-16 15:20:36 -0700680 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800681 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700682 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
683 child->resource[i]->name = child->name;
684 }
685 bridge->subordinate = child;
686
687 return child;
688}
689
Sam Ravnborg451124a2008-02-02 22:33:43 +0100690struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700691{
692 struct pci_bus *child;
693
694 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700695 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800696 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700697 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800698 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700699 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700700 return child;
701}
702
Sam Ravnborg96bde062007-03-26 21:53:30 -0800703static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700704{
705 struct pci_bus *parent = child->parent;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700706
707 /* Attempts to fix that up are really dangerous unless
708 we're going to re-assign all bus numbers. */
709 if (!pcibios_assign_all_busses())
710 return;
711
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700712 while (parent->parent && parent->subordinate < max) {
713 parent->subordinate = max;
714 pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
715 parent = parent->parent;
716 }
717}
718
Linus Torvalds1da177e2005-04-16 15:20:36 -0700719/*
720 * If it's a bridge, configure it and scan the bus behind it.
721 * For CardBus bridges, we don't scan behind as the devices will
722 * be handled by the bridge driver itself.
723 *
724 * We need to process bridges in two passes -- first we scan those
725 * already configured by the BIOS and after we are done with all of
726 * them, we proceed to assigning numbers to the remaining buses in
727 * order to avoid overlaps between old and new bus numbers.
728 */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +0100729int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700730{
731 struct pci_bus *child;
732 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100733 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700734 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600735 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100736 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700737
738 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600739 primary = buses & 0xFF;
740 secondary = (buses >> 8) & 0xFF;
741 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700742
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600743 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
744 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700745
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100746 if (!primary && (primary != bus->number) && secondary && subordinate) {
747 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
748 primary = bus->number;
749 }
750
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100751 /* Check if setup is sensible at all */
752 if (!pass &&
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600753 (primary != bus->number || secondary <= bus->number)) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100754 dev_dbg(&dev->dev, "bus configuration invalid, reconfiguring\n");
755 broken = 1;
756 }
757
Linus Torvalds1da177e2005-04-16 15:20:36 -0700758 /* Disable MasterAbortMode during probing to avoid reporting
759 of bus errors (in some architectures) */
760 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
761 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
762 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
763
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600764 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
765 !is_cardbus && !broken) {
766 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700767 /*
768 * Bus already configured by firmware, process it in the first
769 * pass and just note the configuration.
770 */
771 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000772 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700773
774 /*
775 * If we already got to this bus through a different bridge,
Alex Chiang74710de2009-03-20 14:56:10 -0600776 * don't re-add it. This can happen with the i450NX chipset.
777 *
778 * However, we continue to descend down the hierarchy and
779 * scan remaining child buses.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700780 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600781 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600782 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600783 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600784 if (!child)
785 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600786 child->primary = primary;
787 child->subordinate = subordinate;
Alex Chiang74710de2009-03-20 14:56:10 -0600788 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700789 }
790
Linus Torvalds1da177e2005-04-16 15:20:36 -0700791 cmax = pci_scan_child_bus(child);
792 if (cmax > max)
793 max = cmax;
794 if (child->subordinate > max)
795 max = child->subordinate;
796 } else {
797 /*
798 * We need to assign a number to this bus which we always
799 * do in the second pass.
800 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700801 if (!pass) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100802 if (pcibios_assign_all_busses() || broken)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700803 /* Temporarily disable forwarding of the
804 configuration cycles on all bridges in
805 this bus segment to avoid possible
806 conflicts in the second pass between two
807 bridges programmed with overlapping
808 bus ranges. */
809 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
810 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000811 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700812 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700813
814 /* Clear errors */
815 pci_write_config_word(dev, PCI_STATUS, 0xffff);
816
Rajesh Shahcc574502005-04-28 00:25:47 -0700817 /* Prevent assigning a bus number that already exists.
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800818 * This can happen when a bridge is hot-plugged, so in
819 * this case we only re-scan this bus. */
820 child = pci_find_bus(pci_domain_nr(bus), max+1);
821 if (!child) {
822 child = pci_add_new_bus(bus, dev, ++max);
823 if (!child)
824 goto out;
825 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700826 buses = (buses & 0xff000000)
827 | ((unsigned int)(child->primary) << 0)
828 | ((unsigned int)(child->secondary) << 8)
829 | ((unsigned int)(child->subordinate) << 16);
830
831 /*
832 * yenta.c forces a secondary latency timer of 176.
833 * Copy that behaviour here.
834 */
835 if (is_cardbus) {
836 buses &= ~0xff000000;
837 buses |= CARDBUS_LATENCY_TIMER << 24;
838 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100839
Linus Torvalds1da177e2005-04-16 15:20:36 -0700840 /*
841 * We need to blast all three values with a single write.
842 */
843 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
844
845 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700846 child->bridge_ctl = bctl;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700847 /*
848 * Adjust subordinate busnr in parent buses.
849 * We do this before scanning for children because
850 * some devices may not be detected if the bios
851 * was lazy.
852 */
853 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700854 /* Now we can scan all subordinate buses... */
855 max = pci_scan_child_bus(child);
Kristen Accardie3ac86d2006-01-17 16:57:01 -0800856 /*
857 * now fix it up again since we have found
858 * the real value of max.
859 */
860 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861 } else {
862 /*
863 * For CardBus bridges, we leave 4 bus numbers
864 * as cards with a PCI-to-PCI bridge can be
865 * inserted later.
866 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100867 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
868 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700869 if (pci_find_bus(pci_domain_nr(bus),
870 max+i+1))
871 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100872 while (parent->parent) {
873 if ((!pcibios_assign_all_busses()) &&
874 (parent->subordinate > max) &&
875 (parent->subordinate <= max+i)) {
876 j = 1;
877 }
878 parent = parent->parent;
879 }
880 if (j) {
881 /*
882 * Often, there are two cardbus bridges
883 * -- try to leave one valid bus number
884 * for each one.
885 */
886 i /= 2;
887 break;
888 }
889 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700890 max += i;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700891 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700892 }
893 /*
894 * Set the subordinate bus number to its real value.
895 */
896 child->subordinate = max;
897 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
898 }
899
Gary Hadecb3576f2008-02-08 14:00:52 -0800900 sprintf(child->name,
901 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
902 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700903
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200904 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100905 while (bus->parent) {
906 if ((child->subordinate > bus->subordinate) ||
907 (child->number > bus->subordinate) ||
908 (child->number < bus->number) ||
909 (child->subordinate < bus->number)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700910 dev_info(&child->dev, "[bus %02x-%02x] %s "
911 "hidden behind%s bridge %s [bus %02x-%02x]\n",
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200912 child->number, child->subordinate,
913 (bus->number > child->subordinate &&
914 bus->subordinate < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800915 "wholly" : "partially",
916 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700917 dev_name(&bus->dev),
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200918 bus->number, bus->subordinate);
Dominik Brodowski49887942005-12-08 16:53:12 +0100919 }
920 bus = bus->parent;
921 }
922
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000923out:
924 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
925
Linus Torvalds1da177e2005-04-16 15:20:36 -0700926 return max;
927}
928
929/*
930 * Read interrupt line and base address registers.
931 * The architecture-dependent code can tweak these, of course.
932 */
933static void pci_read_irq(struct pci_dev *dev)
934{
935 unsigned char irq;
936
937 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800938 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700939 if (irq)
940 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
941 dev->irq = irq;
942}
943
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000944void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800945{
946 int pos;
947 u16 reg16;
948
949 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
950 if (!pos)
951 return;
952 pdev->is_pcie = 1;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900953 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800954 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
955 pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
Jon Masonb03e7492011-07-20 15:20:54 -0500956 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
957 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800958}
959
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000960void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700961{
962 int pos;
963 u16 reg16;
964 u32 reg32;
965
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +0900966 pos = pci_pcie_cap(pdev);
Eric W. Biederman28760482009-09-09 14:09:24 -0700967 if (!pos)
968 return;
969 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
970 if (!(reg16 & PCI_EXP_FLAGS_SLOT))
971 return;
972 pci_read_config_dword(pdev, pos + PCI_EXP_SLTCAP, &reg32);
973 if (reg32 & PCI_EXP_SLTCAP_HPC)
974 pdev->is_hotplug_bridge = 1;
975}
976
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +0200977#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -0800978
Linus Torvalds1da177e2005-04-16 15:20:36 -0700979/**
980 * pci_setup_device - fill in class and map information of a device
981 * @dev: the device structure to fill
982 *
983 * Initialize the device structure with information about the device's
984 * vendor,class,memory and IO-space addresses,IRQ lines etc.
985 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +0800986 * Returns 0 on success and negative if unknown type of device (not normal,
987 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700988 */
Yu Zhao480b93b2009-03-20 11:25:14 +0800989int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700990{
991 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +0800992 u8 hdr_type;
993 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -0500994 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700995 struct pci_bus_region region;
996 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +0800997
998 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
999 return -EIO;
1000
1001 dev->sysdata = dev->bus->sysdata;
1002 dev->dev.parent = dev->bus->bridge;
1003 dev->dev.bus = &pci_bus_type;
1004 dev->hdr_type = hdr_type & 0x7f;
1005 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001006 dev->error_state = pci_channel_io_normal;
1007 set_pcie_port_type(dev);
1008
1009 list_for_each_entry(slot, &dev->bus->slots, list)
1010 if (PCI_SLOT(dev->devfn) == slot->number)
1011 dev->slot = slot;
1012
1013 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1014 set this higher, assuming the system even supports it. */
1015 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001016
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001017 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1018 dev->bus->number, PCI_SLOT(dev->devfn),
1019 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001020
1021 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001022 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001023 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001024
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001025 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1026 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001027
Yu Zhao853346e2009-03-21 22:05:11 +08001028 /* need to have dev->class ready */
1029 dev->cfg_size = pci_cfg_space_size(dev);
1030
Linus Torvalds1da177e2005-04-16 15:20:36 -07001031 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001032 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001033
1034 /* Early fixups, before probing the BARs */
1035 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001036 /* device class may be changed after fixup */
1037 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001038
1039 switch (dev->hdr_type) { /* header type */
1040 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1041 if (class == PCI_CLASS_BRIDGE_PCI)
1042 goto bad;
1043 pci_read_irq(dev);
1044 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1045 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1046 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001047
1048 /*
1049 * Do the ugly legacy mode stuff here rather than broken chip
1050 * quirk code. Legacy mode ATA controllers have fixed
1051 * addresses. These are not always echoed in BAR0-3, and
1052 * BAR0-3 in a few cases contain junk!
1053 */
1054 if (class == PCI_CLASS_STORAGE_IDE) {
1055 u8 progif;
1056 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1057 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001058 region.start = 0x1F0;
1059 region.end = 0x1F7;
1060 res = &dev->resource[0];
1061 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001062 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001063 region.start = 0x3F6;
1064 region.end = 0x3F6;
1065 res = &dev->resource[1];
1066 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001067 pcibios_bus_to_resource(dev, res, &region);
Alan Cox368c73d2006-10-04 00:41:26 +01001068 }
1069 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001070 region.start = 0x170;
1071 region.end = 0x177;
1072 res = &dev->resource[2];
1073 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001074 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001075 region.start = 0x376;
1076 region.end = 0x376;
1077 res = &dev->resource[3];
1078 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001079 pcibios_bus_to_resource(dev, res, &region);
Alan Cox368c73d2006-10-04 00:41:26 +01001080 }
1081 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001082 break;
1083
1084 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1085 if (class != PCI_CLASS_BRIDGE_PCI)
1086 goto bad;
1087 /* The PCI-to-PCI bridge spec requires that subtractive
1088 decoding (i.e. transparent) bridge must have programming
1089 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001090 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001091 dev->transparent = ((dev->class & 0xff) == 1);
1092 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001093 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001094 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1095 if (pos) {
1096 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1097 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1098 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001099 break;
1100
1101 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1102 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1103 goto bad;
1104 pci_read_irq(dev);
1105 pci_read_bases(dev, 1, 0);
1106 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1107 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1108 break;
1109
1110 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001111 dev_err(&dev->dev, "unknown header type %02x, "
1112 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001113 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001114
1115 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001116 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1117 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001118 dev->class = PCI_CLASS_NOT_DEFINED;
1119 }
1120
1121 /* We found a fine healthy device, go go go... */
1122 return 0;
1123}
1124
Zhao, Yu201de562008-10-13 19:49:55 +08001125static void pci_release_capabilities(struct pci_dev *dev)
1126{
1127 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001128 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001129 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001130}
1131
Linus Torvalds1da177e2005-04-16 15:20:36 -07001132/**
1133 * pci_release_dev - free a pci device structure when all users of it are finished.
1134 * @dev: device that's been disconnected
1135 *
1136 * Will be called only by the device core when all users of this pci device are
1137 * done.
1138 */
1139static void pci_release_dev(struct device *dev)
1140{
1141 struct pci_dev *pci_dev;
1142
1143 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001144 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001145 pci_release_of_node(pci_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001146 kfree(pci_dev);
1147}
1148
1149/**
1150 * pci_cfg_space_size - get the configuration space size of the PCI device.
Randy Dunlap8f7020d2005-10-23 11:57:38 -07001151 * @dev: PCI device
Linus Torvalds1da177e2005-04-16 15:20:36 -07001152 *
1153 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1154 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1155 * access it. Maybe we don't have a way to generate extended config space
1156 * accesses, or the device is behind a reverse Express bridge. So we try
1157 * reading the dword at 0x100 which must either be 0 or a valid extended
1158 * capability header.
1159 */
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001160int pci_cfg_space_size_ext(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001161{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001162 u32 status;
Zhao, Yu557848c2008-10-13 19:18:07 +08001163 int pos = PCI_CFG_SPACE_SIZE;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001164
Zhao, Yu557848c2008-10-13 19:18:07 +08001165 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001166 goto fail;
1167 if (status == 0xffffffff)
1168 goto fail;
1169
1170 return PCI_CFG_SPACE_EXP_SIZE;
1171
1172 fail:
1173 return PCI_CFG_SPACE_SIZE;
1174}
1175
Yinghai Lu57741a72008-02-15 01:32:50 -08001176int pci_cfg_space_size(struct pci_dev *dev)
1177{
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001178 int pos;
1179 u32 status;
Yinghai Ludfadd9ed2009-03-08 21:35:37 -07001180 u16 class;
1181
1182 class = dev->class >> 8;
1183 if (class == PCI_CLASS_BRIDGE_HOST)
1184 return pci_cfg_space_size_ext(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001185
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +09001186 pos = pci_pcie_cap(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001187 if (!pos) {
1188 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1189 if (!pos)
1190 goto fail;
1191
1192 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1193 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1194 goto fail;
1195 }
1196
1197 return pci_cfg_space_size_ext(dev);
1198
1199 fail:
1200 return PCI_CFG_SPACE_SIZE;
Yinghai Lu57741a72008-02-15 01:32:50 -08001201}
1202
Linus Torvalds1da177e2005-04-16 15:20:36 -07001203static void pci_release_bus_bridge_dev(struct device *dev)
1204{
1205 kfree(dev);
1206}
1207
Michael Ellerman65891212007-04-05 17:19:08 +10001208struct pci_dev *alloc_pci_dev(void)
1209{
1210 struct pci_dev *dev;
1211
1212 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1213 if (!dev)
1214 return NULL;
1215
Michael Ellerman65891212007-04-05 17:19:08 +10001216 INIT_LIST_HEAD(&dev->bus_list);
1217
1218 return dev;
1219}
1220EXPORT_SYMBOL(alloc_pci_dev);
1221
Yinghai Luefdc87d2012-01-27 10:55:10 -08001222bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1223 int crs_timeout)
1224{
1225 int delay = 1;
1226
1227 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1228 return false;
1229
1230 /* some broken boards return 0 or ~0 if a slot is empty: */
1231 if (*l == 0xffffffff || *l == 0x00000000 ||
1232 *l == 0x0000ffff || *l == 0xffff0000)
1233 return false;
1234
1235 /* Configuration request Retry Status */
1236 while (*l == 0xffff0001) {
1237 if (!crs_timeout)
1238 return false;
1239
1240 msleep(delay);
1241 delay *= 2;
1242 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1243 return false;
1244 /* Card hasn't responded in 60 seconds? Must be stuck. */
1245 if (delay > crs_timeout) {
1246 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1247 "responding\n", pci_domain_nr(bus),
1248 bus->number, PCI_SLOT(devfn),
1249 PCI_FUNC(devfn));
1250 return false;
1251 }
1252 }
1253
1254 return true;
1255}
1256EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1257
Linus Torvalds1da177e2005-04-16 15:20:36 -07001258/*
1259 * Read the config data for a PCI device, sanity-check it
1260 * and fill in the dev structure...
1261 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001262static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001263{
1264 struct pci_dev *dev;
1265 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001266
Yinghai Luefdc87d2012-01-27 10:55:10 -08001267 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001268 return NULL;
1269
Michael Ellermanbab41e92007-04-05 17:19:09 +10001270 dev = alloc_pci_dev();
Linus Torvalds1da177e2005-04-16 15:20:36 -07001271 if (!dev)
1272 return NULL;
1273
Linus Torvalds1da177e2005-04-16 15:20:36 -07001274 dev->bus = bus;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001275 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001276 dev->vendor = l & 0xffff;
1277 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001278
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001279 pci_set_of_node(dev);
1280
Yu Zhao480b93b2009-03-20 11:25:14 +08001281 if (pci_setup_device(dev)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001282 kfree(dev);
1283 return NULL;
1284 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001285
1286 return dev;
1287}
1288
Zhao, Yu201de562008-10-13 19:49:55 +08001289static void pci_init_capabilities(struct pci_dev *dev)
1290{
1291 /* MSI/MSI-X list */
1292 pci_msi_init_pci_dev(dev);
1293
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001294 /* Buffers for saving PCIe and PCI-X capabilities */
1295 pci_allocate_cap_save_buffers(dev);
1296
Zhao, Yu201de562008-10-13 19:49:55 +08001297 /* Power Management */
1298 pci_pm_init(dev);
Jesse Barneseb9c39d2008-12-17 12:10:05 -08001299 platform_pci_wakeup_init(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001300
1301 /* Vital Product Data */
1302 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001303
1304 /* Alternative Routing-ID Forwarding */
1305 pci_enable_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001306
1307 /* Single Root I/O Virtualization */
1308 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001309
1310 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001311 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001312}
1313
Sam Ravnborg96bde062007-03-26 21:53:30 -08001314void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001315{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001316 device_initialize(&dev->dev);
1317 dev->dev.release = pci_release_dev;
1318 pci_dev_get(dev);
1319
Linus Torvalds1da177e2005-04-16 15:20:36 -07001320 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001321 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001322 dev->dev.coherent_dma_mask = 0xffffffffull;
1323
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001324 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001325 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001326
Linus Torvalds1da177e2005-04-16 15:20:36 -07001327 /* Fix up broken headers */
1328 pci_fixup_device(pci_fixup_header, dev);
1329
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001330 /* moved out from quirk header fixup code */
1331 pci_reassigndev_resource_alignment(dev);
1332
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001333 /* Clear the state_saved flag. */
1334 dev->state_saved = false;
1335
Zhao, Yu201de562008-10-13 19:49:55 +08001336 /* Initialize various capabilities */
1337 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001338
Linus Torvalds1da177e2005-04-16 15:20:36 -07001339 /*
1340 * Add the device to our list of discovered devices
1341 * and the bus list for fixup functions, etc.
1342 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001343 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001344 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001345 up_write(&pci_bus_sem);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001346}
1347
Sam Ravnborg451124a2008-02-02 22:33:43 +01001348struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001349{
1350 struct pci_dev *dev;
1351
Trent Piepho90bdb312009-03-20 14:56:00 -06001352 dev = pci_get_slot(bus, devfn);
1353 if (dev) {
1354 pci_dev_put(dev);
1355 return dev;
1356 }
1357
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001358 dev = pci_scan_device(bus, devfn);
1359 if (!dev)
1360 return NULL;
1361
1362 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001363
1364 return dev;
1365}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001366EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001367
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001368static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn)
1369{
1370 u16 cap;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001371 unsigned pos, next_fn;
1372
1373 if (!dev)
1374 return 0;
1375
1376 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001377 if (!pos)
1378 return 0;
1379 pci_read_config_word(dev, pos + 4, &cap);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001380 next_fn = cap >> 8;
1381 if (next_fn <= fn)
1382 return 0;
1383 return next_fn;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001384}
1385
1386static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn)
1387{
1388 return (fn + 1) % 8;
1389}
1390
1391static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
1392{
1393 return 0;
1394}
1395
1396static int only_one_child(struct pci_bus *bus)
1397{
1398 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001399
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001400 if (!parent || !pci_is_pcie(parent))
1401 return 0;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001402 if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT)
1403 return 1;
1404 if (parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM &&
1405 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001406 return 1;
1407 return 0;
1408}
1409
Linus Torvalds1da177e2005-04-16 15:20:36 -07001410/**
1411 * pci_scan_slot - scan a PCI slot on a bus for devices.
1412 * @bus: PCI bus to scan
1413 * @devfn: slot number to scan (must have zero function.)
1414 *
1415 * Scan a PCI slot on the specified PCI bus for devices, adding
1416 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001417 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001418 *
1419 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001420 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001421int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001422{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001423 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001424 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001425 unsigned (*next_fn)(struct pci_dev *, unsigned) = no_next_fn;
1426
1427 if (only_one_child(bus) && (devfn > 0))
1428 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001429
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001430 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001431 if (!dev)
1432 return 0;
1433 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001434 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001435
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001436 if (pci_ari_enabled(bus))
1437 next_fn = next_ari_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001438 else if (dev->multifunction)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001439 next_fn = next_trad_fn;
1440
1441 for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {
1442 dev = pci_scan_single_device(bus, devfn + fn);
1443 if (dev) {
1444 if (!dev->is_added)
1445 nr++;
1446 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001447 }
1448 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001449
Shaohua Li149e1632008-07-23 10:32:31 +08001450 /* only one slot has pcie device */
1451 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001452 pcie_aspm_init_link_state(bus->self);
1453
Linus Torvalds1da177e2005-04-16 15:20:36 -07001454 return nr;
1455}
1456
Jon Masonb03e7492011-07-20 15:20:54 -05001457static int pcie_find_smpss(struct pci_dev *dev, void *data)
1458{
1459 u8 *smpss = data;
1460
1461 if (!pci_is_pcie(dev))
1462 return 0;
1463
1464 /* For PCIE hotplug enabled slots not connected directly to a
1465 * PCI-E root port, there can be problems when hotplugging
1466 * devices. This is due to the possibility of hotplugging a
1467 * device into the fabric with a smaller MPS that the devices
1468 * currently running have configured. Modifying the MPS on the
1469 * running devices could cause a fatal bus error due to an
1470 * incoming frame being larger than the newly configured MPS.
1471 * To work around this, the MPS for the entire fabric must be
1472 * set to the minimum size. Any devices hotplugged into this
1473 * fabric will have the minimum MPS set. If the PCI hotplug
1474 * slot is directly connected to the root port and there are not
1475 * other devices on the fabric (which seems to be the most
1476 * common case), then this is not an issue and MPS discovery
1477 * will occur as normal.
1478 */
1479 if (dev->is_hotplug_bridge && (!list_is_singular(&dev->bus->devices) ||
Benjamin Herrenschmidt1a4b1a42011-09-13 15:16:33 -03001480 (dev->bus->self &&
1481 dev->bus->self->pcie_type != PCI_EXP_TYPE_ROOT_PORT)))
Jon Masonb03e7492011-07-20 15:20:54 -05001482 *smpss = 0;
1483
1484 if (*smpss > dev->pcie_mpss)
1485 *smpss = dev->pcie_mpss;
1486
1487 return 0;
1488}
1489
1490static void pcie_write_mps(struct pci_dev *dev, int mps)
1491{
Jon Mason62f392e2011-10-14 14:56:14 -05001492 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001493
1494 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001495 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001496
Jon Mason62f392e2011-10-14 14:56:14 -05001497 if (dev->pcie_type != PCI_EXP_TYPE_ROOT_PORT && dev->bus->self)
1498 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001499 * downstream communication will never be larger than
1500 * the MRRS. So, the MPS only needs to be configured
1501 * for the upstream communication. This being the case,
1502 * walk from the top down and set the MPS of the child
1503 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001504 *
1505 * Configure the device MPS with the smaller of the
1506 * device MPSS or the bridge MPS (which is assumed to be
1507 * properly configured at this point to the largest
1508 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001509 */
Jon Mason62f392e2011-10-14 14:56:14 -05001510 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001511 }
1512
1513 rc = pcie_set_mps(dev, mps);
1514 if (rc)
1515 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1516}
1517
Jon Mason62f392e2011-10-14 14:56:14 -05001518static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001519{
Jon Mason62f392e2011-10-14 14:56:14 -05001520 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001521
Jon Masoned2888e2011-09-08 16:41:18 -05001522 /* In the "safe" case, do not configure the MRRS. There appear to be
1523 * issues with setting MRRS to 0 on a number of devices.
1524 */
Jon Masoned2888e2011-09-08 16:41:18 -05001525 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1526 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001527
Jon Masoned2888e2011-09-08 16:41:18 -05001528 /* For Max performance, the MRRS must be set to the largest supported
1529 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001530 * device or the bus can support. This should already be properly
1531 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001532 */
Jon Mason62f392e2011-10-14 14:56:14 -05001533 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001534
1535 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001536 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001537 * If the MRRS value provided is not acceptable (e.g., too large),
1538 * shrink the value until it is acceptable to the HW.
1539 */
1540 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1541 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001542 if (!rc)
1543 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001544
Jon Mason62f392e2011-10-14 14:56:14 -05001545 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001546 mrrs /= 2;
1547 }
Jon Mason62f392e2011-10-14 14:56:14 -05001548
1549 if (mrrs < 128)
1550 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1551 "safe value. If problems are experienced, try running "
1552 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001553}
1554
1555static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1556{
Jon Masona513a992011-10-14 14:56:16 -05001557 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001558
1559 if (!pci_is_pcie(dev))
1560 return 0;
1561
Jon Masona513a992011-10-14 14:56:16 -05001562 mps = 128 << *(u8 *)data;
1563 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001564
1565 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001566 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001567
Jon Masona513a992011-10-14 14:56:16 -05001568 dev_info(&dev->dev, "PCI-E Max Payload Size set to %4d/%4d (was %4d), "
1569 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1570 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001571
1572 return 0;
1573}
1574
Jon Masona513a992011-10-14 14:56:16 -05001575/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001576 * parents then children fashion. If this changes, then this code will not
1577 * work as designed.
1578 */
1579void pcie_bus_configure_settings(struct pci_bus *bus, u8 mpss)
1580{
Jon Mason5f39e672011-10-03 09:50:20 -05001581 u8 smpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001582
Jon Masonb03e7492011-07-20 15:20:54 -05001583 if (!pci_is_pcie(bus->self))
1584 return;
1585
Jon Mason5f39e672011-10-03 09:50:20 -05001586 if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
1587 return;
1588
1589 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
1590 * to be aware to the MPS of the destination. To work around this,
1591 * simply force the MPS of the entire system to the smallest possible.
1592 */
1593 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1594 smpss = 0;
1595
Jon Masonb03e7492011-07-20 15:20:54 -05001596 if (pcie_bus_config == PCIE_BUS_SAFE) {
Jon Mason5f39e672011-10-03 09:50:20 -05001597 smpss = mpss;
1598
Jon Masonb03e7492011-07-20 15:20:54 -05001599 pcie_find_smpss(bus->self, &smpss);
1600 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1601 }
1602
1603 pcie_bus_configure_set(bus->self, &smpss);
1604 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1605}
Jon Masondebc3b72011-08-02 00:01:18 -05001606EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001607
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001608unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001609{
1610 unsigned int devfn, pass, max = bus->secondary;
1611 struct pci_dev *dev;
1612
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001613 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001614
1615 /* Go find them, Rover! */
1616 for (devfn = 0; devfn < 0x100; devfn += 8)
1617 pci_scan_slot(bus, devfn);
1618
Yu Zhaoa28724b2009-03-20 11:25:13 +08001619 /* Reserve buses for SR-IOV capability. */
1620 max += pci_iov_bus_range(bus);
1621
Linus Torvalds1da177e2005-04-16 15:20:36 -07001622 /*
1623 * After performing arch-dependent fixup of the bus, look behind
1624 * all PCI-to-PCI bridges on this bus.
1625 */
Alex Chiang74710de2009-03-20 14:56:10 -06001626 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001627 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001628 pcibios_fixup_bus(bus);
1629 if (pci_is_root_bus(bus))
1630 bus->is_added = 1;
1631 }
1632
Linus Torvalds1da177e2005-04-16 15:20:36 -07001633 for (pass=0; pass < 2; pass++)
1634 list_for_each_entry(dev, &bus->devices, bus_list) {
1635 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1636 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1637 max = pci_scan_bridge(bus, dev, max, pass);
1638 }
1639
1640 /*
1641 * We've scanned the bus and so we know all about what's on
1642 * the other side of any bridges that may be on this bus plus
1643 * any devices.
1644 *
1645 * Return how far we've got finding sub-buses.
1646 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001647 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001648 return max;
1649}
1650
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001651struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1652 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001653{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001654 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001655 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001656 struct pci_bus *b, *b2;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001657 struct device *dev;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001658 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001659 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001660 resource_size_t offset;
1661 char bus_addr[64];
1662 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001663
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001664 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
1665 if (!bridge)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001666 return NULL;
1667
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001668 b = pci_alloc_bus();
1669 if (!b)
1670 goto err_bus;
1671
Geert Uytterhoeven6a3b3e22009-03-15 20:14:37 +01001672 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001673 if (!dev)
1674 goto err_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001675
1676 b->sysdata = sysdata;
1677 b->ops = ops;
1678
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001679 b2 = pci_find_bus(pci_domain_nr(b), bus);
1680 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001681 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001682 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001683 goto err_out;
1684 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001685
Linus Torvalds1da177e2005-04-16 15:20:36 -07001686 dev->parent = parent;
1687 dev->release = pci_release_bus_bridge_dev;
Kay Sievers1a927132008-10-30 02:17:49 +01001688 dev_set_name(dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001689 error = device_register(dev);
1690 if (error)
1691 goto dev_reg_err;
1692 b->bridge = get_device(dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001693 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001694 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001695
Yinghai Lu0d358f22008-02-19 03:20:41 -08001696 if (!parent)
1697 set_dev_node(b->bridge, pcibus_to_node(b));
1698
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001699 b->dev.class = &pcibus_class;
1700 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001701 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001702 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001703 if (error)
1704 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001705
1706 /* Create legacy_io and legacy_mem files for this bus */
1707 pci_create_legacy_files(b);
1708
Linus Torvalds1da177e2005-04-16 15:20:36 -07001709 b->number = b->secondary = bus;
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001710
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001711 bridge->bus = b;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001712 INIT_LIST_HEAD(&bridge->windows);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001713
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001714 if (parent)
1715 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1716 else
1717 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1718
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001719 /* Add initial resources to the bus */
1720 list_for_each_entry_safe(window, n, resources, list) {
1721 list_move_tail(&window->list, &bridge->windows);
1722 res = window->res;
1723 offset = window->offset;
1724 pci_bus_add_resource(b, res, 0);
1725 if (offset) {
1726 if (resource_type(res) == IORESOURCE_IO)
1727 fmt = " (bus address [%#06llx-%#06llx])";
1728 else
1729 fmt = " (bus address [%#010llx-%#010llx])";
1730 snprintf(bus_addr, sizeof(bus_addr), fmt,
1731 (unsigned long long) (res->start - offset),
1732 (unsigned long long) (res->end - offset));
1733 } else
1734 bus_addr[0] = '\0';
1735 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001736 }
1737
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001738 down_write(&pci_bus_sem);
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001739 list_add_tail(&bridge->list, &pci_host_bridges);
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001740 list_add_tail(&b->node, &pci_root_buses);
1741 up_write(&pci_bus_sem);
1742
Linus Torvalds1da177e2005-04-16 15:20:36 -07001743 return b;
1744
Linus Torvalds1da177e2005-04-16 15:20:36 -07001745class_dev_reg_err:
1746 device_unregister(dev);
1747dev_reg_err:
Zhang Yanmind71374d2006-06-02 12:35:43 +08001748 down_write(&pci_bus_sem);
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001749 list_del(&bridge->list);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001750 list_del(&b->node);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001751 up_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001752err_out:
1753 kfree(dev);
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001754err_dev:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001755 kfree(b);
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001756err_bus:
1757 kfree(bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001758 return NULL;
1759}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001760
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001761struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
1762 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1763{
1764 struct pci_bus *b;
1765
1766 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1767 if (!b)
1768 return NULL;
1769
1770 b->subordinate = pci_scan_child_bus(b);
1771 pci_bus_add_devices(b);
1772 return b;
1773}
1774EXPORT_SYMBOL(pci_scan_root_bus);
1775
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001776/* Deprecated; use pci_scan_root_bus() instead */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001777struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001778 int bus, struct pci_ops *ops, void *sysdata)
1779{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001780 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001781 struct pci_bus *b;
1782
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001783 pci_add_resource(&resources, &ioport_resource);
1784 pci_add_resource(&resources, &iomem_resource);
1785 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001786 if (b)
1787 b->subordinate = pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001788 else
1789 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001790 return b;
1791}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001792EXPORT_SYMBOL(pci_scan_bus_parented);
1793
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001794struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
1795 void *sysdata)
1796{
1797 LIST_HEAD(resources);
1798 struct pci_bus *b;
1799
1800 pci_add_resource(&resources, &ioport_resource);
1801 pci_add_resource(&resources, &iomem_resource);
1802 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1803 if (b) {
1804 b->subordinate = pci_scan_child_bus(b);
1805 pci_bus_add_devices(b);
1806 } else {
1807 pci_free_resource_list(&resources);
1808 }
1809 return b;
1810}
1811EXPORT_SYMBOL(pci_scan_bus);
1812
Linus Torvalds1da177e2005-04-16 15:20:36 -07001813#ifdef CONFIG_HOTPLUG
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001814/**
Yinghai Lu2f320522012-01-21 02:08:22 -08001815 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1816 * @bridge: PCI bridge for the bus to scan
1817 *
1818 * Scan a PCI bus and child buses for new devices, add them,
1819 * and enable them, resizing bridge mmio/io resource if necessary
1820 * and possible. The caller must ensure the child devices are already
1821 * removed for resizing to occur.
1822 *
1823 * Returns the max number of subordinate bus discovered.
1824 */
1825unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1826{
1827 unsigned int max;
1828 struct pci_bus *bus = bridge->subordinate;
1829
1830 max = pci_scan_child_bus(bus);
1831
1832 pci_assign_unassigned_bridge_resources(bridge);
1833
1834 pci_bus_add_devices(bus);
1835
1836 return max;
1837}
1838
Linus Torvalds1da177e2005-04-16 15:20:36 -07001839EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001840EXPORT_SYMBOL(pci_scan_slot);
1841EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001842EXPORT_SYMBOL_GPL(pci_scan_child_bus);
1843#endif
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001844
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001845static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001846{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001847 const struct pci_dev *a = to_pci_dev(d_a);
1848 const struct pci_dev *b = to_pci_dev(d_b);
1849
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001850 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1851 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1852
1853 if (a->bus->number < b->bus->number) return -1;
1854 else if (a->bus->number > b->bus->number) return 1;
1855
1856 if (a->devfn < b->devfn) return -1;
1857 else if (a->devfn > b->devfn) return 1;
1858
1859 return 0;
1860}
1861
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08001862void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001863{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001864 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001865}