fix mali API_VERSION grep
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / pci / probe.c
CommitLineData
1da177e4
LT
1/*
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>
7d715a6c 12#include <linux/pci-aspm.h>
284f5f9d 13#include <asm-generic/pci-bridge.h>
bc56b9e0 14#include "pci.h"
1da177e4
LT
15
16#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
17#define CARDBUS_RESERVE_BUSNR 3
1da177e4 18
67cdc827
YL
19struct resource busn_resource = {
20 .name = "PCI busn",
21 .start = 0,
22 .end = 255,
23 .flags = IORESOURCE_BUS,
24};
25
1da177e4
LT
26/* Ugh. Need to stop exporting this to modules. */
27LIST_HEAD(pci_root_buses);
28EXPORT_SYMBOL(pci_root_buses);
29
5cc62c20
YL
30static LIST_HEAD(pci_domain_busn_res_list);
31
32struct pci_domain_busn_res {
33 struct list_head list;
34 struct resource res;
35 int domain_nr;
36};
37
38static struct resource *get_pci_domain_busn_res(int domain_nr)
39{
40 struct pci_domain_busn_res *r;
41
42 list_for_each_entry(r, &pci_domain_busn_res_list, list)
43 if (r->domain_nr == domain_nr)
44 return &r->res;
45
46 r = kzalloc(sizeof(*r), GFP_KERNEL);
47 if (!r)
48 return NULL;
49
50 r->domain_nr = domain_nr;
51 r->res.start = 0;
52 r->res.end = 0xff;
53 r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
54
55 list_add_tail(&r->list, &pci_domain_busn_res_list);
56
57 return &r->res;
58}
59
70308923
GKH
60static int find_anything(struct device *dev, void *data)
61{
62 return 1;
63}
1da177e4 64
ed4aaadb
ZY
65/*
66 * Some device drivers need know if pci is initiated.
67 * Basically, we think pci is not initiated when there
70308923 68 * is no device to be found on the pci_bus_type.
ed4aaadb
ZY
69 */
70int no_pci_devices(void)
71{
70308923
GKH
72 struct device *dev;
73 int no_devices;
ed4aaadb 74
70308923
GKH
75 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
76 no_devices = (dev == NULL);
77 put_device(dev);
78 return no_devices;
79}
ed4aaadb
ZY
80EXPORT_SYMBOL(no_pci_devices);
81
1da177e4
LT
82/*
83 * PCI Bus Class
84 */
fd7d1ced 85static void release_pcibus_dev(struct device *dev)
1da177e4 86{
fd7d1ced 87 struct pci_bus *pci_bus = to_pci_bus(dev);
1da177e4
LT
88
89 if (pci_bus->bridge)
90 put_device(pci_bus->bridge);
2fe2abf8 91 pci_bus_remove_resources(pci_bus);
98d9f30c 92 pci_release_bus_of_node(pci_bus);
1da177e4
LT
93 kfree(pci_bus);
94}
95
96static struct class pcibus_class = {
97 .name = "pci_bus",
fd7d1ced 98 .dev_release = &release_pcibus_dev,
b9d320fc 99 .dev_attrs = pcibus_dev_attrs,
1da177e4
LT
100};
101
102static int __init pcibus_class_init(void)
103{
104 return class_register(&pcibus_class);
105}
106postcore_initcall(pcibus_class_init);
107
6ac665c6 108static u64 pci_size(u64 base, u64 maxbase, u64 mask)
1da177e4 109{
6ac665c6 110 u64 size = mask & maxbase; /* Find the significant bits */
1da177e4
LT
111 if (!size)
112 return 0;
113
114 /* Get the lowest of them to find the decode size, and
115 from that the extent. */
116 size = (size & ~(size-1)) - 1;
117
118 /* base == maxbase can be valid only if the BAR has
119 already been programmed with all 1s. */
120 if (base == maxbase && ((base | size) & mask) != mask)
121 return 0;
122
123 return size;
124}
125
28c6821a 126static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
6ac665c6 127{
8d6a6a47 128 u32 mem_type;
28c6821a 129 unsigned long flags;
8d6a6a47 130
6ac665c6 131 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
28c6821a
BH
132 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
133 flags |= IORESOURCE_IO;
134 return flags;
6ac665c6 135 }
07eddf3d 136
28c6821a
BH
137 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
138 flags |= IORESOURCE_MEM;
139 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
140 flags |= IORESOURCE_PREFETCH;
07eddf3d 141
8d6a6a47
BH
142 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
143 switch (mem_type) {
144 case PCI_BASE_ADDRESS_MEM_TYPE_32:
145 break;
146 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
0ff9514b 147 /* 1M mem BAR treated as 32-bit BAR */
8d6a6a47
BH
148 break;
149 case PCI_BASE_ADDRESS_MEM_TYPE_64:
28c6821a
BH
150 flags |= IORESOURCE_MEM_64;
151 break;
8d6a6a47 152 default:
0ff9514b 153 /* mem unknown type treated as 32-bit BAR */
8d6a6a47
BH
154 break;
155 }
28c6821a 156 return flags;
07eddf3d
YL
157}
158
0b400c7e
YZ
159/**
160 * pci_read_base - read a PCI BAR
161 * @dev: the PCI device
162 * @type: type of the BAR
163 * @res: resource buffer to be filled in
164 * @pos: BAR position in the config space
165 *
166 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
6ac665c6 167 */
0b400c7e 168int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
6ac665c6 169 struct resource *res, unsigned int pos)
07eddf3d 170{
6ac665c6 171 u32 l, sz, mask;
253d2e54 172 u16 orig_cmd;
5bfa14ed 173 struct pci_bus_region region;
0ff9514b 174 bool bar_too_big = false, bar_disabled = false;
6ac665c6 175
1ed67439 176 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
6ac665c6 177
0ff9514b 178 /* No printks while decoding is disabled! */
253d2e54
JP
179 if (!dev->mmio_always_on) {
180 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
181 pci_write_config_word(dev, PCI_COMMAND,
182 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
183 }
184
6ac665c6
MW
185 res->name = pci_name(dev);
186
187 pci_read_config_dword(dev, pos, &l);
1ed67439 188 pci_write_config_dword(dev, pos, l | mask);
6ac665c6
MW
189 pci_read_config_dword(dev, pos, &sz);
190 pci_write_config_dword(dev, pos, l);
191
192 /*
193 * All bits set in sz means the device isn't working properly.
45aa23b4
BH
194 * If the BAR isn't implemented, all bits must be 0. If it's a
195 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
196 * 1 must be clear.
6ac665c6 197 */
45aa23b4 198 if (!sz || sz == 0xffffffff)
6ac665c6
MW
199 goto fail;
200
201 /*
202 * I don't know how l can have all bits set. Copied from old code.
203 * Maybe it fixes a bug on some ancient platform.
204 */
205 if (l == 0xffffffff)
206 l = 0;
207
208 if (type == pci_bar_unknown) {
28c6821a
BH
209 res->flags = decode_bar(dev, l);
210 res->flags |= IORESOURCE_SIZEALIGN;
211 if (res->flags & IORESOURCE_IO) {
6ac665c6 212 l &= PCI_BASE_ADDRESS_IO_MASK;
9670f1a4 213 sz &= PCI_BASE_ADDRESS_IO_MASK;
5aceca9d 214 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
6ac665c6
MW
215 } else {
216 l &= PCI_BASE_ADDRESS_MEM_MASK;
9670f1a4 217 sz &= PCI_BASE_ADDRESS_MEM_MASK;
6ac665c6
MW
218 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
219 }
220 } else {
221 res->flags |= (l & IORESOURCE_ROM_ENABLE);
222 l &= PCI_ROM_ADDRESS_MASK;
9670f1a4 223 sz &= PCI_ROM_ADDRESS_MASK;
6ac665c6
MW
224 mask = (u32)PCI_ROM_ADDRESS_MASK;
225 }
226
28c6821a 227 if (res->flags & IORESOURCE_MEM_64) {
6ac665c6
MW
228 u64 l64 = l;
229 u64 sz64 = sz;
230 u64 mask64 = mask | (u64)~0 << 32;
231
232 pci_read_config_dword(dev, pos + 4, &l);
233 pci_write_config_dword(dev, pos + 4, ~0);
234 pci_read_config_dword(dev, pos + 4, &sz);
235 pci_write_config_dword(dev, pos + 4, l);
236
237 l64 |= ((u64)l << 32);
238 sz64 |= ((u64)sz << 32);
239
240 sz64 = pci_size(l64, sz64, mask64);
241
242 if (!sz64)
243 goto fail;
244
cc5499c3 245 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
0ff9514b 246 bar_too_big = true;
6ac665c6 247 goto fail;
c7dabef8
BH
248 }
249
c7dabef8 250 if ((sizeof(resource_size_t) < 8) && l) {
6ac665c6
MW
251 /* Address above 32-bit boundary; disable the BAR */
252 pci_write_config_dword(dev, pos, 0);
253 pci_write_config_dword(dev, pos + 4, 0);
5bfa14ed
BH
254 region.start = 0;
255 region.end = sz64;
fb127cb9 256 pcibios_bus_to_resource(dev, res, &region);
0ff9514b 257 bar_disabled = true;
6ac665c6 258 } else {
5bfa14ed
BH
259 region.start = l64;
260 region.end = l64 + sz64;
fb127cb9 261 pcibios_bus_to_resource(dev, res, &region);
6ac665c6
MW
262 }
263 } else {
45aa23b4 264 sz = pci_size(l, sz, mask);
6ac665c6 265
45aa23b4 266 if (!sz)
6ac665c6
MW
267 goto fail;
268
5bfa14ed
BH
269 region.start = l;
270 region.end = l + sz;
fb127cb9 271 pcibios_bus_to_resource(dev, res, &region);
6ac665c6
MW
272 }
273
0ff9514b
BH
274 goto out;
275
276
277fail:
278 res->flags = 0;
279out:
bbffe435
BH
280 if (!dev->mmio_always_on)
281 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
282
0ff9514b
BH
283 if (bar_too_big)
284 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n", pos);
285 if (res->flags && !bar_disabled)
286 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
287
28c6821a 288 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
07eddf3d
YL
289}
290
1da177e4
LT
291static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
292{
6ac665c6 293 unsigned int pos, reg;
07eddf3d 294
f1fa6f72
PB
295 if (dev->non_compliant_bars)
296 return;
297
6ac665c6
MW
298 for (pos = 0; pos < howmany; pos++) {
299 struct resource *res = &dev->resource[pos];
1da177e4 300 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
6ac665c6 301 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
1da177e4 302 }
6ac665c6 303
1da177e4 304 if (rom) {
6ac665c6 305 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
1da177e4 306 dev->rom_base_reg = rom;
6ac665c6
MW
307 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
308 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
309 IORESOURCE_SIZEALIGN;
310 __pci_read_base(dev, pci_bar_mem32, res, rom);
1da177e4
LT
311 }
312}
313
15856ad5 314static void pci_read_bridge_io(struct pci_bus *child)
1da177e4
LT
315{
316 struct pci_dev *dev = child->self;
317 u8 io_base_lo, io_limit_lo;
2b28ae19 318 unsigned long io_mask, io_granularity, base, limit;
5bfa14ed 319 struct pci_bus_region region;
2b28ae19
BH
320 struct resource *res;
321
322 io_mask = PCI_IO_RANGE_MASK;
323 io_granularity = 0x1000;
324 if (dev->io_window_1k) {
325 /* Support 1K I/O space granularity */
326 io_mask = PCI_IO_1K_RANGE_MASK;
327 io_granularity = 0x400;
328 }
1da177e4 329
1da177e4
LT
330 res = child->resource[0];
331 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
332 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
2b28ae19
BH
333 base = (io_base_lo & io_mask) << 8;
334 limit = (io_limit_lo & io_mask) << 8;
1da177e4
LT
335
336 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
337 u16 io_base_hi, io_limit_hi;
8f38eaca 338
1da177e4
LT
339 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
340 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
8f38eaca
BH
341 base |= ((unsigned long) io_base_hi << 16);
342 limit |= ((unsigned long) io_limit_hi << 16);
1da177e4
LT
343 }
344
5dde383e 345 if (base <= limit) {
1da177e4 346 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
5bfa14ed 347 region.start = base;
2b28ae19
BH
348 region.end = limit + io_granularity - 1;
349 pcibios_bus_to_resource(dev, res, &region);
c7dabef8 350 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
1da177e4 351 }
fa27b2d1
BH
352}
353
15856ad5 354static void pci_read_bridge_mmio(struct pci_bus *child)
fa27b2d1
BH
355{
356 struct pci_dev *dev = child->self;
357 u16 mem_base_lo, mem_limit_lo;
358 unsigned long base, limit;
5bfa14ed 359 struct pci_bus_region region;
fa27b2d1 360 struct resource *res;
1da177e4
LT
361
362 res = child->resource[1];
363 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
364 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
8f38eaca
BH
365 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
366 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
5dde383e 367 if (base <= limit) {
1da177e4 368 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
5bfa14ed
BH
369 region.start = base;
370 region.end = limit + 0xfffff;
fb127cb9 371 pcibios_bus_to_resource(dev, res, &region);
c7dabef8 372 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
1da177e4 373 }
fa27b2d1
BH
374}
375
15856ad5 376static void pci_read_bridge_mmio_pref(struct pci_bus *child)
fa27b2d1
BH
377{
378 struct pci_dev *dev = child->self;
379 u16 mem_base_lo, mem_limit_lo;
380 unsigned long base, limit;
5bfa14ed 381 struct pci_bus_region region;
fa27b2d1 382 struct resource *res;
1da177e4
LT
383
384 res = child->resource[2];
385 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
386 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
8f38eaca
BH
387 base = ((unsigned long) mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
388 limit = ((unsigned long) mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
1da177e4
LT
389
390 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
391 u32 mem_base_hi, mem_limit_hi;
8f38eaca 392
1da177e4
LT
393 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
394 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
395
396 /*
397 * Some bridges set the base > limit by default, and some
398 * (broken) BIOSes do not initialize them. If we find
399 * this, just assume they are not being used.
400 */
401 if (mem_base_hi <= mem_limit_hi) {
402#if BITS_PER_LONG == 64
8f38eaca
BH
403 base |= ((unsigned long) mem_base_hi) << 32;
404 limit |= ((unsigned long) mem_limit_hi) << 32;
1da177e4
LT
405#else
406 if (mem_base_hi || mem_limit_hi) {
80ccba11
BH
407 dev_err(&dev->dev, "can't handle 64-bit "
408 "address space for bridge\n");
1da177e4
LT
409 return;
410 }
411#endif
412 }
413 }
5dde383e 414 if (base <= limit) {
1f82de10
YL
415 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
416 IORESOURCE_MEM | IORESOURCE_PREFETCH;
417 if (res->flags & PCI_PREF_RANGE_TYPE_64)
418 res->flags |= IORESOURCE_MEM_64;
5bfa14ed
BH
419 region.start = base;
420 region.end = limit + 0xfffff;
fb127cb9 421 pcibios_bus_to_resource(dev, res, &region);
c7dabef8 422 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
1da177e4
LT
423 }
424}
425
15856ad5 426void pci_read_bridge_bases(struct pci_bus *child)
fa27b2d1
BH
427{
428 struct pci_dev *dev = child->self;
2fe2abf8 429 struct resource *res;
fa27b2d1
BH
430 int i;
431
432 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
433 return;
434
b918c62e
YL
435 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
436 &child->busn_res,
fa27b2d1
BH
437 dev->transparent ? " (subtractive decode)" : "");
438
2fe2abf8
BH
439 pci_bus_remove_resources(child);
440 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
441 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
442
fa27b2d1
BH
443 pci_read_bridge_io(child);
444 pci_read_bridge_mmio(child);
445 pci_read_bridge_mmio_pref(child);
2adf7516
BH
446
447 if (dev->transparent) {
2fe2abf8
BH
448 pci_bus_for_each_resource(child->parent, res, i) {
449 if (res) {
450 pci_bus_add_resource(child, res,
451 PCI_SUBTRACTIVE_DECODE);
2adf7516
BH
452 dev_printk(KERN_DEBUG, &dev->dev,
453 " bridge window %pR (subtractive decode)\n",
2fe2abf8
BH
454 res);
455 }
2adf7516
BH
456 }
457 }
fa27b2d1
BH
458}
459
96bde06a 460static struct pci_bus * pci_alloc_bus(void)
1da177e4
LT
461{
462 struct pci_bus *b;
463
f5afe806 464 b = kzalloc(sizeof(*b), GFP_KERNEL);
1da177e4 465 if (b) {
1da177e4
LT
466 INIT_LIST_HEAD(&b->node);
467 INIT_LIST_HEAD(&b->children);
468 INIT_LIST_HEAD(&b->devices);
f46753c5 469 INIT_LIST_HEAD(&b->slots);
2fe2abf8 470 INIT_LIST_HEAD(&b->resources);
3749c51a
MW
471 b->max_bus_speed = PCI_SPEED_UNKNOWN;
472 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
1da177e4
LT
473 }
474 return b;
475}
476
7b543663
YL
477static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
478{
479 struct pci_host_bridge *bridge;
480
481 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
482 if (bridge) {
483 INIT_LIST_HEAD(&bridge->windows);
484 bridge->bus = b;
485 }
486
487 return bridge;
488}
489
9be60ca0
MW
490static unsigned char pcix_bus_speed[] = {
491 PCI_SPEED_UNKNOWN, /* 0 */
492 PCI_SPEED_66MHz_PCIX, /* 1 */
493 PCI_SPEED_100MHz_PCIX, /* 2 */
494 PCI_SPEED_133MHz_PCIX, /* 3 */
495 PCI_SPEED_UNKNOWN, /* 4 */
496 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
497 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
498 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
499 PCI_SPEED_UNKNOWN, /* 8 */
500 PCI_SPEED_66MHz_PCIX_266, /* 9 */
501 PCI_SPEED_100MHz_PCIX_266, /* A */
502 PCI_SPEED_133MHz_PCIX_266, /* B */
503 PCI_SPEED_UNKNOWN, /* C */
504 PCI_SPEED_66MHz_PCIX_533, /* D */
505 PCI_SPEED_100MHz_PCIX_533, /* E */
506 PCI_SPEED_133MHz_PCIX_533 /* F */
507};
508
3749c51a
MW
509static unsigned char pcie_link_speed[] = {
510 PCI_SPEED_UNKNOWN, /* 0 */
511 PCIE_SPEED_2_5GT, /* 1 */
512 PCIE_SPEED_5_0GT, /* 2 */
9dfd97fe 513 PCIE_SPEED_8_0GT, /* 3 */
3749c51a
MW
514 PCI_SPEED_UNKNOWN, /* 4 */
515 PCI_SPEED_UNKNOWN, /* 5 */
516 PCI_SPEED_UNKNOWN, /* 6 */
517 PCI_SPEED_UNKNOWN, /* 7 */
518 PCI_SPEED_UNKNOWN, /* 8 */
519 PCI_SPEED_UNKNOWN, /* 9 */
520 PCI_SPEED_UNKNOWN, /* A */
521 PCI_SPEED_UNKNOWN, /* B */
522 PCI_SPEED_UNKNOWN, /* C */
523 PCI_SPEED_UNKNOWN, /* D */
524 PCI_SPEED_UNKNOWN, /* E */
525 PCI_SPEED_UNKNOWN /* F */
526};
527
528void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
529{
231afea1 530 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
3749c51a
MW
531}
532EXPORT_SYMBOL_GPL(pcie_update_link_speed);
533
45b4cdd5
MW
534static unsigned char agp_speeds[] = {
535 AGP_UNKNOWN,
536 AGP_1X,
537 AGP_2X,
538 AGP_4X,
539 AGP_8X
540};
541
542static enum pci_bus_speed agp_speed(int agp3, int agpstat)
543{
544 int index = 0;
545
546 if (agpstat & 4)
547 index = 3;
548 else if (agpstat & 2)
549 index = 2;
550 else if (agpstat & 1)
551 index = 1;
552 else
553 goto out;
554
555 if (agp3) {
556 index += 2;
557 if (index == 5)
558 index = 0;
559 }
560
561 out:
562 return agp_speeds[index];
563}
564
565
9be60ca0
MW
566static void pci_set_bus_speed(struct pci_bus *bus)
567{
568 struct pci_dev *bridge = bus->self;
569 int pos;
570
45b4cdd5
MW
571 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
572 if (!pos)
573 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
574 if (pos) {
575 u32 agpstat, agpcmd;
576
577 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
578 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
579
580 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
581 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
582 }
583
9be60ca0
MW
584 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
585 if (pos) {
586 u16 status;
587 enum pci_bus_speed max;
9be60ca0 588
7793eeab
BH
589 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
590 &status);
591
592 if (status & PCI_X_SSTATUS_533MHZ) {
9be60ca0 593 max = PCI_SPEED_133MHz_PCIX_533;
7793eeab 594 } else if (status & PCI_X_SSTATUS_266MHZ) {
9be60ca0 595 max = PCI_SPEED_133MHz_PCIX_266;
7793eeab
BH
596 } else if (status & PCI_X_SSTATUS_133MHZ) {
597 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) {
9be60ca0
MW
598 max = PCI_SPEED_133MHz_PCIX_ECC;
599 } else {
600 max = PCI_SPEED_133MHz_PCIX;
601 }
602 } else {
603 max = PCI_SPEED_66MHz_PCIX;
604 }
605
606 bus->max_bus_speed = max;
7793eeab
BH
607 bus->cur_bus_speed = pcix_bus_speed[
608 (status & PCI_X_SSTATUS_FREQ) >> 6];
9be60ca0
MW
609
610 return;
611 }
612
613 pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
614 if (pos) {
615 u32 linkcap;
616 u16 linksta;
617
59875ae4 618 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
231afea1 619 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
9be60ca0 620
59875ae4 621 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
9be60ca0
MW
622 pcie_update_link_speed(bus, linksta);
623 }
624}
625
626
cbd4e055
AB
627static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
628 struct pci_dev *bridge, int busnr)
1da177e4
LT
629{
630 struct pci_bus *child;
631 int i;
4f535093 632 int ret;
1da177e4
LT
633
634 /*
635 * Allocate a new bus, and inherit stuff from the parent..
636 */
637 child = pci_alloc_bus();
638 if (!child)
639 return NULL;
640
1da177e4
LT
641 child->parent = parent;
642 child->ops = parent->ops;
643 child->sysdata = parent->sysdata;
6e325a62 644 child->bus_flags = parent->bus_flags;
1da177e4 645
fd7d1ced 646 /* initialize some portions of the bus device, but don't register it
4f535093 647 * now as the parent is not properly set up yet.
fd7d1ced
GKH
648 */
649 child->dev.class = &pcibus_class;
1a927133 650 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
1da177e4
LT
651
652 /*
653 * Set up the primary, secondary and subordinate
654 * bus numbers.
655 */
b918c62e
YL
656 child->number = child->busn_res.start = busnr;
657 child->primary = parent->busn_res.start;
658 child->busn_res.end = 0xff;
1da177e4 659
4f535093
YL
660 if (!bridge) {
661 child->dev.parent = parent->bridge;
662 goto add_dev;
663 }
3789fa8a
YZ
664
665 child->self = bridge;
666 child->bridge = get_device(&bridge->dev);
4f535093 667 child->dev.parent = child->bridge;
98d9f30c 668 pci_set_bus_of_node(child);
9be60ca0
MW
669 pci_set_bus_speed(child);
670
1da177e4 671 /* Set up default resource pointers and names.. */
fde09c6d 672 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
1da177e4
LT
673 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
674 child->resource[i]->name = child->name;
675 }
676 bridge->subordinate = child;
677
4f535093
YL
678add_dev:
679 ret = device_register(&child->dev);
680 WARN_ON(ret < 0);
681
10a95747
JL
682 pcibios_add_bus(child);
683
4f535093
YL
684 /* Create legacy_io and legacy_mem files for this bus */
685 pci_create_legacy_files(child);
686
1da177e4
LT
687 return child;
688}
689
451124a7 690struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
1da177e4
LT
691{
692 struct pci_bus *child;
693
694 child = pci_alloc_child_bus(parent, dev, busnr);
e4ea9bb7 695 if (child) {
d71374da 696 down_write(&pci_bus_sem);
1da177e4 697 list_add_tail(&child->node, &parent->children);
d71374da 698 up_write(&pci_bus_sem);
e4ea9bb7 699 }
1da177e4
LT
700 return child;
701}
702
96bde06a 703static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
26f674ae
GKH
704{
705 struct pci_bus *parent = child->parent;
12f44f46
IK
706
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
b918c62e
YL
712 while (parent->parent && parent->busn_res.end < max) {
713 parent->busn_res.end = max;
26f674ae
GKH
714 pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
715 parent = parent->parent;
716 }
717}
718
1da177e4
LT
719/*
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 */
15856ad5 729int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
1da177e4
LT
730{
731 struct pci_bus *child;
732 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
49887941 733 u32 buses, i, j = 0;
1da177e4 734 u16 bctl;
99ddd552 735 u8 primary, secondary, subordinate;
a1c19894 736 int broken = 0;
1da177e4
LT
737
738 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
99ddd552
BH
739 primary = buses & 0xFF;
740 secondary = (buses >> 8) & 0xFF;
741 subordinate = (buses >> 16) & 0xFF;
1da177e4 742
99ddd552
BH
743 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
744 secondary, subordinate, pass);
1da177e4 745
71f6bd4a
YL
746 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
a1c19894
BH
751 /* Check if setup is sensible at all */
752 if (!pass &&
1965f66e
YL
753 (primary != bus->number || secondary <= bus->number ||
754 secondary > subordinate)) {
755 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
756 secondary, subordinate);
a1c19894
BH
757 broken = 1;
758 }
759
1da177e4
LT
760 /* Disable MasterAbortMode during probing to avoid reporting
761 of bus errors (in some architectures) */
762 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
763 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
764 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
765
99ddd552
BH
766 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
767 !is_cardbus && !broken) {
768 unsigned int cmax;
1da177e4
LT
769 /*
770 * Bus already configured by firmware, process it in the first
771 * pass and just note the configuration.
772 */
773 if (pass)
bbe8f9a3 774 goto out;
1da177e4
LT
775
776 /*
777 * If we already got to this bus through a different bridge,
74710ded
AC
778 * don't re-add it. This can happen with the i450NX chipset.
779 *
780 * However, we continue to descend down the hierarchy and
781 * scan remaining child buses.
1da177e4 782 */
99ddd552 783 child = pci_find_bus(pci_domain_nr(bus), secondary);
74710ded 784 if (!child) {
99ddd552 785 child = pci_add_new_bus(bus, dev, secondary);
74710ded
AC
786 if (!child)
787 goto out;
99ddd552 788 child->primary = primary;
bc76b731 789 pci_bus_insert_busn_res(child, secondary, subordinate);
74710ded 790 child->bridge_ctl = bctl;
1da177e4
LT
791 }
792
1da177e4
LT
793 cmax = pci_scan_child_bus(child);
794 if (cmax > max)
795 max = cmax;
b918c62e
YL
796 if (child->busn_res.end > max)
797 max = child->busn_res.end;
1da177e4
LT
798 } else {
799 /*
800 * We need to assign a number to this bus which we always
801 * do in the second pass.
802 */
12f44f46 803 if (!pass) {
a1c19894 804 if (pcibios_assign_all_busses() || broken)
12f44f46
IK
805 /* Temporarily disable forwarding of the
806 configuration cycles on all bridges in
807 this bus segment to avoid possible
808 conflicts in the second pass between two
809 bridges programmed with overlapping
810 bus ranges. */
811 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
812 buses & ~0xffffff);
bbe8f9a3 813 goto out;
12f44f46 814 }
1da177e4
LT
815
816 /* Clear errors */
817 pci_write_config_word(dev, PCI_STATUS, 0xffff);
818
cc57450f 819 /* Prevent assigning a bus number that already exists.
b1a98b69
TC
820 * This can happen when a bridge is hot-plugged, so in
821 * this case we only re-scan this bus. */
822 child = pci_find_bus(pci_domain_nr(bus), max+1);
823 if (!child) {
824 child = pci_add_new_bus(bus, dev, ++max);
825 if (!child)
826 goto out;
bc76b731 827 pci_bus_insert_busn_res(child, max, 0xff);
b1a98b69 828 }
1da177e4
LT
829 buses = (buses & 0xff000000)
830 | ((unsigned int)(child->primary) << 0)
b918c62e
YL
831 | ((unsigned int)(child->busn_res.start) << 8)
832 | ((unsigned int)(child->busn_res.end) << 16);
1da177e4
LT
833
834 /*
835 * yenta.c forces a secondary latency timer of 176.
836 * Copy that behaviour here.
837 */
838 if (is_cardbus) {
839 buses &= ~0xff000000;
840 buses |= CARDBUS_LATENCY_TIMER << 24;
841 }
7c867c88 842
1da177e4
LT
843 /*
844 * We need to blast all three values with a single write.
845 */
846 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
847
848 if (!is_cardbus) {
11949255 849 child->bridge_ctl = bctl;
26f674ae
GKH
850 /*
851 * Adjust subordinate busnr in parent buses.
852 * We do this before scanning for children because
853 * some devices may not be detected if the bios
854 * was lazy.
855 */
856 pci_fixup_parent_subordinate_busnr(child, max);
1da177e4
LT
857 /* Now we can scan all subordinate buses... */
858 max = pci_scan_child_bus(child);
e3ac86d8
KA
859 /*
860 * now fix it up again since we have found
861 * the real value of max.
862 */
863 pci_fixup_parent_subordinate_busnr(child, max);
1da177e4
LT
864 } else {
865 /*
866 * For CardBus bridges, we leave 4 bus numbers
867 * as cards with a PCI-to-PCI bridge can be
868 * inserted later.
869 */
49887941
DB
870 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
871 struct pci_bus *parent = bus;
cc57450f
RS
872 if (pci_find_bus(pci_domain_nr(bus),
873 max+i+1))
874 break;
49887941
DB
875 while (parent->parent) {
876 if ((!pcibios_assign_all_busses()) &&
b918c62e
YL
877 (parent->busn_res.end > max) &&
878 (parent->busn_res.end <= max+i)) {
49887941
DB
879 j = 1;
880 }
881 parent = parent->parent;
882 }
883 if (j) {
884 /*
885 * Often, there are two cardbus bridges
886 * -- try to leave one valid bus number
887 * for each one.
888 */
889 i /= 2;
890 break;
891 }
892 }
cc57450f 893 max += i;
26f674ae 894 pci_fixup_parent_subordinate_busnr(child, max);
1da177e4
LT
895 }
896 /*
897 * Set the subordinate bus number to its real value.
898 */
bc76b731 899 pci_bus_update_busn_res_end(child, max);
1da177e4
LT
900 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
901 }
902
cb3576fa
GH
903 sprintf(child->name,
904 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
905 pci_domain_nr(bus), child->number);
1da177e4 906
d55bef51 907 /* Has only triggered on CardBus, fixup is in yenta_socket */
49887941 908 while (bus->parent) {
b918c62e
YL
909 if ((child->busn_res.end > bus->busn_res.end) ||
910 (child->number > bus->busn_res.end) ||
49887941 911 (child->number < bus->number) ||
b918c62e
YL
912 (child->busn_res.end < bus->number)) {
913 dev_info(&child->dev, "%pR %s "
914 "hidden behind%s bridge %s %pR\n",
915 &child->busn_res,
916 (bus->number > child->busn_res.end &&
917 bus->busn_res.end < child->number) ?
a6f29a98
JP
918 "wholly" : "partially",
919 bus->self->transparent ? " transparent" : "",
865df576 920 dev_name(&bus->dev),
b918c62e 921 &bus->busn_res);
49887941
DB
922 }
923 bus = bus->parent;
924 }
925
bbe8f9a3
RB
926out:
927 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
928
1da177e4
LT
929 return max;
930}
931
932/*
933 * Read interrupt line and base address registers.
934 * The architecture-dependent code can tweak these, of course.
935 */
936static void pci_read_irq(struct pci_dev *dev)
937{
938 unsigned char irq;
939
940 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
ffeff788 941 dev->pin = irq;
1da177e4
LT
942 if (irq)
943 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
944 dev->irq = irq;
945}
946
bb209c82 947void set_pcie_port_type(struct pci_dev *pdev)
480b93b7
YZ
948{
949 int pos;
950 u16 reg16;
951
952 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
953 if (!pos)
954 return;
955 pdev->is_pcie = 1;
0efea000 956 pdev->pcie_cap = pos;
480b93b7 957 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
786e2288 958 pdev->pcie_flags_reg = reg16;
b03e7495
JM
959 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
960 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
480b93b7
YZ
961}
962
bb209c82 963void set_pcie_hotplug_bridge(struct pci_dev *pdev)
28760489 964{
28760489
EB
965 u32 reg32;
966
59875ae4 967 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
28760489
EB
968 if (reg32 & PCI_EXP_SLTCAP_HPC)
969 pdev->is_hotplug_bridge = 1;
970}
971
01abc2aa 972#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
76e6a1d6 973
1da177e4
LT
974/**
975 * pci_setup_device - fill in class and map information of a device
976 * @dev: the device structure to fill
977 *
978 * Initialize the device structure with information about the device's
979 * vendor,class,memory and IO-space addresses,IRQ lines etc.
980 * Called at initialisation of the PCI subsystem and by CardBus services.
480b93b7
YZ
981 * Returns 0 on success and negative if unknown type of device (not normal,
982 * bridge or CardBus).
1da177e4 983 */
480b93b7 984int pci_setup_device(struct pci_dev *dev)
1da177e4
LT
985{
986 u32 class;
fa751152 987 u16 cmd;
480b93b7
YZ
988 u8 hdr_type;
989 struct pci_slot *slot;
bc577d2b 990 int pos = 0;
5bfa14ed
BH
991 struct pci_bus_region region;
992 struct resource *res;
480b93b7
YZ
993
994 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
995 return -EIO;
996
997 dev->sysdata = dev->bus->sysdata;
998 dev->dev.parent = dev->bus->bridge;
999 dev->dev.bus = &pci_bus_type;
1000 dev->hdr_type = hdr_type & 0x7f;
1001 dev->multifunction = !!(hdr_type & 0x80);
480b93b7
YZ
1002 dev->error_state = pci_channel_io_normal;
1003 set_pcie_port_type(dev);
1004
1005 list_for_each_entry(slot, &dev->bus->slots, list)
1006 if (PCI_SLOT(dev->devfn) == slot->number)
1007 dev->slot = slot;
1008
1009 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1010 set this higher, assuming the system even supports it. */
1011 dev->dma_mask = 0xffffffff;
1da177e4 1012
eebfcfb5
GKH
1013 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1014 dev->bus->number, PCI_SLOT(dev->devfn),
1015 PCI_FUNC(dev->devfn));
1da177e4
LT
1016
1017 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
b8a3a521 1018 dev->revision = class & 0xff;
2dd8ba92 1019 dev->class = class >> 8; /* upper 3 bytes */
1da177e4 1020
2dd8ba92
YL
1021 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1022 dev->vendor, dev->device, dev->hdr_type, dev->class);
1da177e4 1023
853346e4
YZ
1024 /* need to have dev->class ready */
1025 dev->cfg_size = pci_cfg_space_size(dev);
1026
1da177e4 1027 /* "Unknown power state" */
3fe9d19f 1028 dev->current_state = PCI_UNKNOWN;
1da177e4
LT
1029
1030 /* Early fixups, before probing the BARs */
1031 pci_fixup_device(pci_fixup_early, dev);
f79b1b14
YZ
1032 /* device class may be changed after fixup */
1033 class = dev->class >> 8;
1da177e4 1034
fa751152
BH
1035 if (dev->non_compliant_bars) {
1036 pci_read_config_word(dev, PCI_COMMAND, &cmd);
1037 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
1038 dev_info(&dev->dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
1039 cmd &= ~PCI_COMMAND_IO;
1040 cmd &= ~PCI_COMMAND_MEMORY;
1041 pci_write_config_word(dev, PCI_COMMAND, cmd);
1042 }
1043 }
1044
1da177e4
LT
1045 switch (dev->hdr_type) { /* header type */
1046 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1047 if (class == PCI_CLASS_BRIDGE_PCI)
1048 goto bad;
1049 pci_read_irq(dev);
1050 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1051 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1052 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
368c73d4
AC
1053
1054 /*
1055 * Do the ugly legacy mode stuff here rather than broken chip
1056 * quirk code. Legacy mode ATA controllers have fixed
1057 * addresses. These are not always echoed in BAR0-3, and
1058 * BAR0-3 in a few cases contain junk!
1059 */
1060 if (class == PCI_CLASS_STORAGE_IDE) {
1061 u8 progif;
1062 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1063 if ((progif & 1) == 0) {
5bfa14ed
BH
1064 region.start = 0x1F0;
1065 region.end = 0x1F7;
1066 res = &dev->resource[0];
1067 res->flags = LEGACY_IO_RESOURCE;
fb127cb9 1068 pcibios_bus_to_resource(dev, res, &region);
5bfa14ed
BH
1069 region.start = 0x3F6;
1070 region.end = 0x3F6;
1071 res = &dev->resource[1];
1072 res->flags = LEGACY_IO_RESOURCE;
fb127cb9 1073 pcibios_bus_to_resource(dev, res, &region);
368c73d4
AC
1074 }
1075 if ((progif & 4) == 0) {
5bfa14ed
BH
1076 region.start = 0x170;
1077 region.end = 0x177;
1078 res = &dev->resource[2];
1079 res->flags = LEGACY_IO_RESOURCE;
fb127cb9 1080 pcibios_bus_to_resource(dev, res, &region);
5bfa14ed
BH
1081 region.start = 0x376;
1082 region.end = 0x376;
1083 res = &dev->resource[3];
1084 res->flags = LEGACY_IO_RESOURCE;
fb127cb9 1085 pcibios_bus_to_resource(dev, res, &region);
368c73d4
AC
1086 }
1087 }
1da177e4
LT
1088 break;
1089
1090 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1091 if (class != PCI_CLASS_BRIDGE_PCI)
1092 goto bad;
1093 /* The PCI-to-PCI bridge spec requires that subtractive
1094 decoding (i.e. transparent) bridge must have programming
1095 interface code of 0x01. */
3efd273b 1096 pci_read_irq(dev);
1da177e4
LT
1097 dev->transparent = ((dev->class & 0xff) == 1);
1098 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
28760489 1099 set_pcie_hotplug_bridge(dev);
bc577d2b
GB
1100 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1101 if (pos) {
1102 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1103 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1104 }
1da177e4
LT
1105 break;
1106
1107 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1108 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1109 goto bad;
1110 pci_read_irq(dev);
1111 pci_read_bases(dev, 1, 0);
1112 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1113 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1114 break;
1115
1116 default: /* unknown header */
80ccba11
BH
1117 dev_err(&dev->dev, "unknown header type %02x, "
1118 "ignoring device\n", dev->hdr_type);
480b93b7 1119 return -EIO;
1da177e4
LT
1120
1121 bad:
2dd8ba92
YL
1122 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1123 "type %02x)\n", dev->class, dev->hdr_type);
1da177e4
LT
1124 dev->class = PCI_CLASS_NOT_DEFINED;
1125 }
1126
1127 /* We found a fine healthy device, go go go... */
1128 return 0;
1129}
1130
201de56e
ZY
1131static void pci_release_capabilities(struct pci_dev *dev)
1132{
1133 pci_vpd_release(dev);
d1b054da 1134 pci_iov_release(dev);
f796841e 1135 pci_free_cap_save_buffers(dev);
201de56e
ZY
1136}
1137
1da177e4
LT
1138/**
1139 * pci_release_dev - free a pci device structure when all users of it are finished.
1140 * @dev: device that's been disconnected
1141 *
1142 * Will be called only by the device core when all users of this pci device are
1143 * done.
1144 */
1145static void pci_release_dev(struct device *dev)
1146{
1147 struct pci_dev *pci_dev;
1148
1149 pci_dev = to_pci_dev(dev);
201de56e 1150 pci_release_capabilities(pci_dev);
98d9f30c 1151 pci_release_of_node(pci_dev);
1da177e4
LT
1152 kfree(pci_dev);
1153}
1154
1155/**
1156 * pci_cfg_space_size - get the configuration space size of the PCI device.
8f7020d3 1157 * @dev: PCI device
1da177e4
LT
1158 *
1159 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1160 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1161 * access it. Maybe we don't have a way to generate extended config space
1162 * accesses, or the device is behind a reverse Express bridge. So we try
1163 * reading the dword at 0x100 which must either be 0 or a valid extended
1164 * capability header.
1165 */
70b9f7dc 1166int pci_cfg_space_size_ext(struct pci_dev *dev)
1da177e4 1167{
1da177e4 1168 u32 status;
557848c3 1169 int pos = PCI_CFG_SPACE_SIZE;
1da177e4 1170
557848c3 1171 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
70b9f7dc
YL
1172 goto fail;
1173 if (status == 0xffffffff)
1174 goto fail;
1175
1176 return PCI_CFG_SPACE_EXP_SIZE;
1177
1178 fail:
1179 return PCI_CFG_SPACE_SIZE;
1180}
1181
1182int pci_cfg_space_size(struct pci_dev *dev)
1183{
1184 int pos;
1185 u32 status;
dfadd9ed
YL
1186 u16 class;
1187
1188 class = dev->class >> 8;
1189 if (class == PCI_CLASS_BRIDGE_HOST)
1190 return pci_cfg_space_size_ext(dev);
57741a77 1191
59875ae4 1192 if (!pci_is_pcie(dev)) {
1da177e4
LT
1193 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1194 if (!pos)
1195 goto fail;
1196
1197 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1198 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1199 goto fail;
1200 }
1201
70b9f7dc 1202 return pci_cfg_space_size_ext(dev);
1da177e4
LT
1203
1204 fail:
1205 return PCI_CFG_SPACE_SIZE;
1206}
1207
1208static void pci_release_bus_bridge_dev(struct device *dev)
1209{
7b543663
YL
1210 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
1211
4fa2649a
YL
1212 if (bridge->release_fn)
1213 bridge->release_fn(bridge);
7b543663
YL
1214
1215 pci_free_resource_list(&bridge->windows);
1216
1217 kfree(bridge);
1da177e4
LT
1218}
1219
65891215
ME
1220struct pci_dev *alloc_pci_dev(void)
1221{
1222 struct pci_dev *dev;
1223
1224 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1225 if (!dev)
1226 return NULL;
1227
65891215 1228 INIT_LIST_HEAD(&dev->bus_list);
88e7b167 1229 dev->dev.type = &pci_dev_type;
65891215
ME
1230
1231 return dev;
1232}
1233EXPORT_SYMBOL(alloc_pci_dev);
1234
efdc87da
YL
1235bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1236 int crs_timeout)
1da177e4 1237{
1da177e4
LT
1238 int delay = 1;
1239
efdc87da
YL
1240 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1241 return false;
1da177e4
LT
1242
1243 /* some broken boards return 0 or ~0 if a slot is empty: */
efdc87da
YL
1244 if (*l == 0xffffffff || *l == 0x00000000 ||
1245 *l == 0x0000ffff || *l == 0xffff0000)
1246 return false;
1da177e4
LT
1247
1248 /* Configuration request Retry Status */
efdc87da
YL
1249 while (*l == 0xffff0001) {
1250 if (!crs_timeout)
1251 return false;
1252
1da177e4
LT
1253 msleep(delay);
1254 delay *= 2;
efdc87da
YL
1255 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1256 return false;
1da177e4 1257 /* Card hasn't responded in 60 seconds? Must be stuck. */
efdc87da 1258 if (delay > crs_timeout) {
80ccba11 1259 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1da177e4
LT
1260 "responding\n", pci_domain_nr(bus),
1261 bus->number, PCI_SLOT(devfn),
1262 PCI_FUNC(devfn));
efdc87da 1263 return false;
1da177e4
LT
1264 }
1265 }
1266
efdc87da
YL
1267 return true;
1268}
1269EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1270
1271/*
1272 * Read the config data for a PCI device, sanity-check it
1273 * and fill in the dev structure...
1274 */
1275static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
1276{
1277 struct pci_dev *dev;
1278 u32 l;
1279
1280 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
1281 return NULL;
1282
bab41e9b 1283 dev = alloc_pci_dev();
1da177e4
LT
1284 if (!dev)
1285 return NULL;
1286
1da177e4 1287 dev->bus = bus;
1da177e4 1288 dev->devfn = devfn;
1da177e4
LT
1289 dev->vendor = l & 0xffff;
1290 dev->device = (l >> 16) & 0xffff;
cef354db 1291
98d9f30c
BH
1292 pci_set_of_node(dev);
1293
480b93b7 1294 if (pci_setup_device(dev)) {
1da177e4
LT
1295 kfree(dev);
1296 return NULL;
1297 }
1da177e4
LT
1298
1299 return dev;
1300}
1301
201de56e
ZY
1302static void pci_init_capabilities(struct pci_dev *dev)
1303{
1304 /* MSI/MSI-X list */
1305 pci_msi_init_pci_dev(dev);
1306
63f4898a
RW
1307 /* Buffers for saving PCIe and PCI-X capabilities */
1308 pci_allocate_cap_save_buffers(dev);
1309
201de56e
ZY
1310 /* Power Management */
1311 pci_pm_init(dev);
1312
1313 /* Vital Product Data */
1314 pci_vpd_pci22_init(dev);
58c3a727
YZ
1315
1316 /* Alternative Routing-ID Forwarding */
31ab2476 1317 pci_configure_ari(dev);
d1b054da
YZ
1318
1319 /* Single Root I/O Virtualization */
1320 pci_iov_init(dev);
ae21ee65
AK
1321
1322 /* Enable ACS P2P upstream forwarding */
5d990b62 1323 pci_enable_acs(dev);
201de56e
ZY
1324}
1325
96bde06a 1326void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
1da177e4 1327{
4f535093
YL
1328 int ret;
1329
cdb9b9f7
PM
1330 device_initialize(&dev->dev);
1331 dev->dev.release = pci_release_dev;
1da177e4 1332
7629d19a 1333 set_dev_node(&dev->dev, pcibus_to_node(bus));
cdb9b9f7 1334 dev->dev.dma_mask = &dev->dma_mask;
4d57cdfa 1335 dev->dev.dma_parms = &dev->dma_parms;
cdb9b9f7 1336 dev->dev.coherent_dma_mask = 0xffffffffull;
1da177e4 1337
4d57cdfa 1338 pci_set_dma_max_seg_size(dev, 65536);
59fc67de 1339 pci_set_dma_seg_boundary(dev, 0xffffffff);
4d57cdfa 1340
1da177e4
LT
1341 /* Fix up broken headers */
1342 pci_fixup_device(pci_fixup_header, dev);
1343
2069ecfb
YL
1344 /* moved out from quirk header fixup code */
1345 pci_reassigndev_resource_alignment(dev);
1346
4b77b0a2
RW
1347 /* Clear the state_saved flag. */
1348 dev->state_saved = false;
1349
201de56e
ZY
1350 /* Initialize various capabilities */
1351 pci_init_capabilities(dev);
eb9d0fe4 1352
1da177e4
LT
1353 /*
1354 * Add the device to our list of discovered devices
1355 * and the bus list for fixup functions, etc.
1356 */
d71374da 1357 down_write(&pci_bus_sem);
1da177e4 1358 list_add_tail(&dev->bus_list, &bus->devices);
d71374da 1359 up_write(&pci_bus_sem);
4f535093 1360
4f535093
YL
1361 ret = pcibios_add_device(dev);
1362 WARN_ON(ret < 0);
1363
1364 /* Notifier could use PCI capabilities */
1365 dev->match_driver = false;
1366 ret = device_add(&dev->dev);
1367 WARN_ON(ret < 0);
1368
1369 pci_proc_attach_device(dev);
cdb9b9f7
PM
1370}
1371
451124a7 1372struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
cdb9b9f7
PM
1373{
1374 struct pci_dev *dev;
1375
90bdb311
TP
1376 dev = pci_get_slot(bus, devfn);
1377 if (dev) {
1378 pci_dev_put(dev);
1379 return dev;
1380 }
1381
cdb9b9f7
PM
1382 dev = pci_scan_device(bus, devfn);
1383 if (!dev)
1384 return NULL;
1385
1386 pci_device_add(dev, bus);
1da177e4
LT
1387
1388 return dev;
1389}
b73e9687 1390EXPORT_SYMBOL(pci_scan_single_device);
1da177e4 1391
b1bd58e4 1392static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
f07852d6 1393{
b1bd58e4
YW
1394 int pos;
1395 u16 cap = 0;
1396 unsigned next_fn;
4fb88c1a 1397
b1bd58e4
YW
1398 if (pci_ari_enabled(bus)) {
1399 if (!dev)
1400 return 0;
1401 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1402 if (!pos)
1403 return 0;
4fb88c1a 1404
b1bd58e4
YW
1405 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1406 next_fn = PCI_ARI_CAP_NFN(cap);
1407 if (next_fn <= fn)
1408 return 0; /* protect against malformed list */
f07852d6 1409
b1bd58e4
YW
1410 return next_fn;
1411 }
1412
1413 /* dev may be NULL for non-contiguous multifunction devices */
1414 if (!dev || dev->multifunction)
1415 return (fn + 1) % 8;
f07852d6 1416
f07852d6
MW
1417 return 0;
1418}
1419
1420static int only_one_child(struct pci_bus *bus)
1421{
1422 struct pci_dev *parent = bus->self;
284f5f9d 1423
f07852d6
MW
1424 if (!parent || !pci_is_pcie(parent))
1425 return 0;
62f87c0e 1426 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
284f5f9d 1427 return 1;
62f87c0e 1428 if (pci_pcie_type(parent) == PCI_EXP_TYPE_DOWNSTREAM &&
284f5f9d 1429 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
f07852d6
MW
1430 return 1;
1431 return 0;
1432}
1433
1da177e4
LT
1434/**
1435 * pci_scan_slot - scan a PCI slot on a bus for devices.
1436 * @bus: PCI bus to scan
1437 * @devfn: slot number to scan (must have zero function.)
1438 *
1439 * Scan a PCI slot on the specified PCI bus for devices, adding
1440 * discovered devices to the @bus->devices list. New devices
8a1bc901 1441 * will not have is_added set.
1b69dfc6
TP
1442 *
1443 * Returns the number of new devices found.
1da177e4 1444 */
96bde06a 1445int pci_scan_slot(struct pci_bus *bus, int devfn)
1da177e4 1446{
f07852d6 1447 unsigned fn, nr = 0;
1b69dfc6 1448 struct pci_dev *dev;
f07852d6
MW
1449
1450 if (only_one_child(bus) && (devfn > 0))
1451 return 0; /* Already scanned the entire slot */
1da177e4 1452
1b69dfc6 1453 dev = pci_scan_single_device(bus, devfn);
4fb88c1a
MW
1454 if (!dev)
1455 return 0;
1456 if (!dev->is_added)
1b69dfc6
TP
1457 nr++;
1458
b1bd58e4 1459 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
f07852d6
MW
1460 dev = pci_scan_single_device(bus, devfn + fn);
1461 if (dev) {
1462 if (!dev->is_added)
1463 nr++;
1464 dev->multifunction = 1;
1da177e4
LT
1465 }
1466 }
7d715a6c 1467
149e1637
SL
1468 /* only one slot has pcie device */
1469 if (bus->self && nr)
7d715a6c
SL
1470 pcie_aspm_init_link_state(bus->self);
1471
1da177e4
LT
1472 return nr;
1473}
1474
b03e7495
JM
1475static int pcie_find_smpss(struct pci_dev *dev, void *data)
1476{
1477 u8 *smpss = data;
1478
1479 if (!pci_is_pcie(dev))
1480 return 0;
1481
1482 /* For PCIE hotplug enabled slots not connected directly to a
1483 * PCI-E root port, there can be problems when hotplugging
1484 * devices. This is due to the possibility of hotplugging a
1485 * device into the fabric with a smaller MPS that the devices
1486 * currently running have configured. Modifying the MPS on the
1487 * running devices could cause a fatal bus error due to an
1488 * incoming frame being larger than the newly configured MPS.
1489 * To work around this, the MPS for the entire fabric must be
1490 * set to the minimum size. Any devices hotplugged into this
1491 * fabric will have the minimum MPS set. If the PCI hotplug
1492 * slot is directly connected to the root port and there are not
1493 * other devices on the fabric (which seems to be the most
1494 * common case), then this is not an issue and MPS discovery
1495 * will occur as normal.
1496 */
1497 if (dev->is_hotplug_bridge && (!list_is_singular(&dev->bus->devices) ||
1a4b1a41 1498 (dev->bus->self &&
62f87c0e 1499 pci_pcie_type(dev->bus->self) != PCI_EXP_TYPE_ROOT_PORT)))
b03e7495
JM
1500 *smpss = 0;
1501
1502 if (*smpss > dev->pcie_mpss)
1503 *smpss = dev->pcie_mpss;
1504
1505 return 0;
1506}
1507
1508static void pcie_write_mps(struct pci_dev *dev, int mps)
1509{
62f392ea 1510 int rc;
b03e7495
JM
1511
1512 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
62f392ea 1513 mps = 128 << dev->pcie_mpss;
b03e7495 1514
62f87c0e
YW
1515 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1516 dev->bus->self)
62f392ea 1517 /* For "Performance", the assumption is made that
b03e7495
JM
1518 * downstream communication will never be larger than
1519 * the MRRS. So, the MPS only needs to be configured
1520 * for the upstream communication. This being the case,
1521 * walk from the top down and set the MPS of the child
1522 * to that of the parent bus.
62f392ea
JM
1523 *
1524 * Configure the device MPS with the smaller of the
1525 * device MPSS or the bridge MPS (which is assumed to be
1526 * properly configured at this point to the largest
1527 * allowable MPS based on its parent bus).
b03e7495 1528 */
62f392ea 1529 mps = min(mps, pcie_get_mps(dev->bus->self));
b03e7495
JM
1530 }
1531
1532 rc = pcie_set_mps(dev, mps);
1533 if (rc)
1534 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1535}
1536
62f392ea 1537static void pcie_write_mrrs(struct pci_dev *dev)
b03e7495 1538{
62f392ea 1539 int rc, mrrs;
b03e7495 1540
ed2888e9
JM
1541 /* In the "safe" case, do not configure the MRRS. There appear to be
1542 * issues with setting MRRS to 0 on a number of devices.
1543 */
ed2888e9
JM
1544 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1545 return;
1546
ed2888e9
JM
1547 /* For Max performance, the MRRS must be set to the largest supported
1548 * value. However, it cannot be configured larger than the MPS the
62f392ea
JM
1549 * device or the bus can support. This should already be properly
1550 * configured by a prior call to pcie_write_mps.
ed2888e9 1551 */
62f392ea 1552 mrrs = pcie_get_mps(dev);
b03e7495
JM
1553
1554 /* MRRS is a R/W register. Invalid values can be written, but a
ed2888e9 1555 * subsequent read will verify if the value is acceptable or not.
b03e7495
JM
1556 * If the MRRS value provided is not acceptable (e.g., too large),
1557 * shrink the value until it is acceptable to the HW.
1558 */
1559 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1560 rc = pcie_set_readrq(dev, mrrs);
62f392ea
JM
1561 if (!rc)
1562 break;
b03e7495 1563
62f392ea 1564 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
b03e7495
JM
1565 mrrs /= 2;
1566 }
62f392ea
JM
1567
1568 if (mrrs < 128)
1569 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1570 "safe value. If problems are experienced, try running "
1571 "with pci=pcie_bus_safe.\n");
b03e7495
JM
1572}
1573
1574static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1575{
a513a99a 1576 int mps, orig_mps;
b03e7495
JM
1577
1578 if (!pci_is_pcie(dev))
1579 return 0;
1580
a513a99a
JM
1581 mps = 128 << *(u8 *)data;
1582 orig_mps = pcie_get_mps(dev);
b03e7495
JM
1583
1584 pcie_write_mps(dev, mps);
62f392ea 1585 pcie_write_mrrs(dev);
b03e7495 1586
a513a99a
JM
1587 dev_info(&dev->dev, "PCI-E Max Payload Size set to %4d/%4d (was %4d), "
1588 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1589 orig_mps, pcie_get_readrq(dev));
b03e7495
JM
1590
1591 return 0;
1592}
1593
a513a99a 1594/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
b03e7495
JM
1595 * parents then children fashion. If this changes, then this code will not
1596 * work as designed.
1597 */
1598void pcie_bus_configure_settings(struct pci_bus *bus, u8 mpss)
1599{
5f39e670 1600 u8 smpss;
b03e7495 1601
b03e7495
JM
1602 if (!pci_is_pcie(bus->self))
1603 return;
1604
5f39e670
JM
1605 if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
1606 return;
1607
1608 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
1609 * to be aware to the MPS of the destination. To work around this,
1610 * simply force the MPS of the entire system to the smallest possible.
1611 */
1612 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1613 smpss = 0;
1614
b03e7495 1615 if (pcie_bus_config == PCIE_BUS_SAFE) {
5f39e670
JM
1616 smpss = mpss;
1617
b03e7495
JM
1618 pcie_find_smpss(bus->self, &smpss);
1619 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1620 }
1621
1622 pcie_bus_configure_set(bus->self, &smpss);
1623 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1624}
debc3b77 1625EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
b03e7495 1626
15856ad5 1627unsigned int pci_scan_child_bus(struct pci_bus *bus)
1da177e4 1628{
b918c62e 1629 unsigned int devfn, pass, max = bus->busn_res.start;
1da177e4
LT
1630 struct pci_dev *dev;
1631
0207c356 1632 dev_dbg(&bus->dev, "scanning bus\n");
1da177e4
LT
1633
1634 /* Go find them, Rover! */
1635 for (devfn = 0; devfn < 0x100; devfn += 8)
1636 pci_scan_slot(bus, devfn);
1637
a28724b0
YZ
1638 /* Reserve buses for SR-IOV capability. */
1639 max += pci_iov_bus_range(bus);
1640
1da177e4
LT
1641 /*
1642 * After performing arch-dependent fixup of the bus, look behind
1643 * all PCI-to-PCI bridges on this bus.
1644 */
74710ded 1645 if (!bus->is_added) {
0207c356 1646 dev_dbg(&bus->dev, "fixups for bus\n");
74710ded 1647 pcibios_fixup_bus(bus);
981cf9ea 1648 bus->is_added = 1;
74710ded
AC
1649 }
1650
1da177e4
LT
1651 for (pass=0; pass < 2; pass++)
1652 list_for_each_entry(dev, &bus->devices, bus_list) {
1653 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1654 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1655 max = pci_scan_bridge(bus, dev, max, pass);
1656 }
1657
1658 /*
1659 * We've scanned the bus and so we know all about what's on
1660 * the other side of any bridges that may be on this bus plus
1661 * any devices.
1662 *
1663 * Return how far we've got finding sub-buses.
1664 */
0207c356 1665 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
1da177e4
LT
1666 return max;
1667}
1668
6c0cc950
RW
1669/**
1670 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
1671 * @bridge: Host bridge to set up.
1672 *
1673 * Default empty implementation. Replace with an architecture-specific setup
1674 * routine, if necessary.
1675 */
1676int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
1677{
1678 return 0;
1679}
1680
10a95747
JL
1681void __weak pcibios_add_bus(struct pci_bus *bus)
1682{
1683}
1684
1685void __weak pcibios_remove_bus(struct pci_bus *bus)
1686{
1687}
1688
166c6370
BH
1689struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1690 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1da177e4 1691{
0efd5aab 1692 int error;
5a21d70d 1693 struct pci_host_bridge *bridge;
0207c356 1694 struct pci_bus *b, *b2;
0efd5aab 1695 struct pci_host_bridge_window *window, *n;
a9d9f527 1696 struct resource *res;
0efd5aab
BH
1697 resource_size_t offset;
1698 char bus_addr[64];
1699 char *fmt;
1da177e4
LT
1700
1701 b = pci_alloc_bus();
1702 if (!b)
7b543663 1703 return NULL;
1da177e4
LT
1704
1705 b->sysdata = sysdata;
1706 b->ops = ops;
4f535093 1707 b->number = b->busn_res.start = bus;
0207c356
BH
1708 b2 = pci_find_bus(pci_domain_nr(b), bus);
1709 if (b2) {
1da177e4 1710 /* If we already got to this bus through a different bridge, ignore it */
0207c356 1711 dev_dbg(&b2->dev, "bus already known\n");
1da177e4
LT
1712 goto err_out;
1713 }
d71374da 1714
7b543663
YL
1715 bridge = pci_alloc_host_bridge(b);
1716 if (!bridge)
1717 goto err_out;
1718
1719 bridge->dev.parent = parent;
1720 bridge->dev.release = pci_release_bus_bridge_dev;
1721 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
6c0cc950 1722 error = pcibios_root_bridge_prepare(bridge);
65a1fb23
JL
1723 if (error) {
1724 kfree(bridge);
1725 goto err_out;
1726 }
6c0cc950 1727
7b543663 1728 error = device_register(&bridge->dev);
65a1fb23
JL
1729 if (error) {
1730 put_device(&bridge->dev);
1731 goto err_out;
1732 }
7b543663 1733 b->bridge = get_device(&bridge->dev);
a1e4d72c 1734 device_enable_async_suspend(b->bridge);
98d9f30c 1735 pci_set_bus_of_node(b);
1da177e4 1736
0d358f22
YL
1737 if (!parent)
1738 set_dev_node(b->bridge, pcibus_to_node(b));
1739
fd7d1ced
GKH
1740 b->dev.class = &pcibus_class;
1741 b->dev.parent = b->bridge;
1a927133 1742 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
fd7d1ced 1743 error = device_register(&b->dev);
1da177e4
LT
1744 if (error)
1745 goto class_dev_reg_err;
1da177e4 1746
10a95747
JL
1747 pcibios_add_bus(b);
1748
1da177e4
LT
1749 /* Create legacy_io and legacy_mem files for this bus */
1750 pci_create_legacy_files(b);
1751
a9d9f527
BH
1752 if (parent)
1753 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1754 else
1755 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1756
0efd5aab
BH
1757 /* Add initial resources to the bus */
1758 list_for_each_entry_safe(window, n, resources, list) {
1759 list_move_tail(&window->list, &bridge->windows);
1760 res = window->res;
1761 offset = window->offset;
f848ffb1
YL
1762 if (res->flags & IORESOURCE_BUS)
1763 pci_bus_insert_busn_res(b, bus, res->end);
1764 else
1765 pci_bus_add_resource(b, res, 0);
0efd5aab
BH
1766 if (offset) {
1767 if (resource_type(res) == IORESOURCE_IO)
1768 fmt = " (bus address [%#06llx-%#06llx])";
1769 else
1770 fmt = " (bus address [%#010llx-%#010llx])";
1771 snprintf(bus_addr, sizeof(bus_addr), fmt,
1772 (unsigned long long) (res->start - offset),
1773 (unsigned long long) (res->end - offset));
1774 } else
1775 bus_addr[0] = '\0';
1776 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
a9d9f527
BH
1777 }
1778
a5390aa6
BH
1779 down_write(&pci_bus_sem);
1780 list_add_tail(&b->node, &pci_root_buses);
1781 up_write(&pci_bus_sem);
1782
1da177e4
LT
1783 return b;
1784
1da177e4 1785class_dev_reg_err:
7b543663
YL
1786 put_device(&bridge->dev);
1787 device_unregister(&bridge->dev);
1da177e4 1788err_out:
1da177e4
LT
1789 kfree(b);
1790 return NULL;
1791}
cdb9b9f7 1792
98a35831
YL
1793int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1794{
1795 struct resource *res = &b->busn_res;
1796 struct resource *parent_res, *conflict;
1797
1798 res->start = bus;
1799 res->end = bus_max;
1800 res->flags = IORESOURCE_BUS;
1801
1802 if (!pci_is_root_bus(b))
1803 parent_res = &b->parent->busn_res;
1804 else {
1805 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1806 res->flags |= IORESOURCE_PCI_FIXED;
1807 }
1808
1809 conflict = insert_resource_conflict(parent_res, res);
1810
1811 if (conflict)
1812 dev_printk(KERN_DEBUG, &b->dev,
1813 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1814 res, pci_is_root_bus(b) ? "domain " : "",
1815 parent_res, conflict->name, conflict);
98a35831
YL
1816
1817 return conflict == NULL;
1818}
1819
1820int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1821{
1822 struct resource *res = &b->busn_res;
1823 struct resource old_res = *res;
1824 resource_size_t size;
1825 int ret;
1826
1827 if (res->start > bus_max)
1828 return -EINVAL;
1829
1830 size = bus_max - res->start + 1;
1831 ret = adjust_resource(res, res->start, size);
1832 dev_printk(KERN_DEBUG, &b->dev,
1833 "busn_res: %pR end %s updated to %02x\n",
1834 &old_res, ret ? "can not be" : "is", bus_max);
1835
1836 if (!ret && !res->parent)
1837 pci_bus_insert_busn_res(b, res->start, res->end);
1838
1839 return ret;
1840}
1841
1842void pci_bus_release_busn_res(struct pci_bus *b)
1843{
1844 struct resource *res = &b->busn_res;
1845 int ret;
1846
1847 if (!res->flags || !res->parent)
1848 return;
1849
1850 ret = release_resource(res);
1851 dev_printk(KERN_DEBUG, &b->dev,
1852 "busn_res: %pR %s released\n",
1853 res, ret ? "can not be" : "is");
1854}
1855
15856ad5 1856struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
a2ebb827
BH
1857 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1858{
4d99f524
YL
1859 struct pci_host_bridge_window *window;
1860 bool found = false;
a2ebb827 1861 struct pci_bus *b;
4d99f524
YL
1862 int max;
1863
1864 list_for_each_entry(window, resources, list)
1865 if (window->res->flags & IORESOURCE_BUS) {
1866 found = true;
1867 break;
1868 }
a2ebb827
BH
1869
1870 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1871 if (!b)
1872 return NULL;
1873
4d99f524
YL
1874 if (!found) {
1875 dev_info(&b->dev,
1876 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1877 bus);
1878 pci_bus_insert_busn_res(b, bus, 255);
1879 }
1880
1881 max = pci_scan_child_bus(b);
1882
1883 if (!found)
1884 pci_bus_update_busn_res_end(b, max);
1885
a2ebb827
BH
1886 pci_bus_add_devices(b);
1887 return b;
1888}
1889EXPORT_SYMBOL(pci_scan_root_bus);
1890
7e00fe2e 1891/* Deprecated; use pci_scan_root_bus() instead */
15856ad5 1892struct pci_bus *pci_scan_bus_parented(struct device *parent,
cdb9b9f7
PM
1893 int bus, struct pci_ops *ops, void *sysdata)
1894{
1e39ae9f 1895 LIST_HEAD(resources);
cdb9b9f7
PM
1896 struct pci_bus *b;
1897
1e39ae9f
BH
1898 pci_add_resource(&resources, &ioport_resource);
1899 pci_add_resource(&resources, &iomem_resource);
857c3b66 1900 pci_add_resource(&resources, &busn_resource);
1e39ae9f 1901 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
cdb9b9f7 1902 if (b)
857c3b66 1903 pci_scan_child_bus(b);
1e39ae9f
BH
1904 else
1905 pci_free_resource_list(&resources);
cdb9b9f7
PM
1906 return b;
1907}
1da177e4
LT
1908EXPORT_SYMBOL(pci_scan_bus_parented);
1909
15856ad5 1910struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
de4b2f76
BH
1911 void *sysdata)
1912{
1913 LIST_HEAD(resources);
1914 struct pci_bus *b;
1915
1916 pci_add_resource(&resources, &ioport_resource);
1917 pci_add_resource(&resources, &iomem_resource);
857c3b66 1918 pci_add_resource(&resources, &busn_resource);
de4b2f76
BH
1919 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1920 if (b) {
857c3b66 1921 pci_scan_child_bus(b);
de4b2f76
BH
1922 pci_bus_add_devices(b);
1923 } else {
1924 pci_free_resource_list(&resources);
1925 }
1926 return b;
1927}
1928EXPORT_SYMBOL(pci_scan_bus);
1929
2f320521
YL
1930/**
1931 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1932 * @bridge: PCI bridge for the bus to scan
1933 *
1934 * Scan a PCI bus and child buses for new devices, add them,
1935 * and enable them, resizing bridge mmio/io resource if necessary
1936 * and possible. The caller must ensure the child devices are already
1937 * removed for resizing to occur.
1938 *
1939 * Returns the max number of subordinate bus discovered.
1940 */
1941unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1942{
1943 unsigned int max;
1944 struct pci_bus *bus = bridge->subordinate;
1945
1946 max = pci_scan_child_bus(bus);
1947
1948 pci_assign_unassigned_bridge_resources(bridge);
1949
1950 pci_bus_add_devices(bus);
1951
1952 return max;
1953}
1954
a5213a31
YL
1955/**
1956 * pci_rescan_bus - scan a PCI bus for devices.
1957 * @bus: PCI bus to scan
1958 *
1959 * Scan a PCI bus and child buses for new devices, adds them,
1960 * and enables them.
1961 *
1962 * Returns the max number of subordinate bus discovered.
1963 */
1964unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1965{
1966 unsigned int max;
1967
1968 max = pci_scan_child_bus(bus);
1969 pci_assign_unassigned_bus_resources(bus);
e164f658 1970 pci_enable_bridges(bus);
a5213a31
YL
1971 pci_bus_add_devices(bus);
1972
1973 return max;
1974}
1975EXPORT_SYMBOL_GPL(pci_rescan_bus);
1976
1da177e4 1977EXPORT_SYMBOL(pci_add_new_bus);
1da177e4
LT
1978EXPORT_SYMBOL(pci_scan_slot);
1979EXPORT_SYMBOL(pci_scan_bridge);
1da177e4 1980EXPORT_SYMBOL_GPL(pci_scan_child_bus);
6b4b78fe 1981
99178b03 1982static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
6b4b78fe 1983{
99178b03
GKH
1984 const struct pci_dev *a = to_pci_dev(d_a);
1985 const struct pci_dev *b = to_pci_dev(d_b);
1986
6b4b78fe
MD
1987 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1988 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1989
1990 if (a->bus->number < b->bus->number) return -1;
1991 else if (a->bus->number > b->bus->number) return 1;
1992
1993 if (a->devfn < b->devfn) return -1;
1994 else if (a->devfn > b->devfn) return 1;
1995
1996 return 0;
1997}
1998
5ff580c1 1999void __init pci_sort_breadthfirst(void)
6b4b78fe 2000{
99178b03 2001 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
6b4b78fe 2002}