blob: 868440f83939542104616d28ba52efa325e9237c [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -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>
12#include <linux/pci-aspm.h>
13#include "pci.h"
14
15#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
16#define CARDBUS_RESERVE_BUSNR 3
17
18static LIST_HEAD(pci_host_bridges);
19
20/* Ugh. Need to stop exporting this to modules. */
21LIST_HEAD(pci_root_buses);
22EXPORT_SYMBOL(pci_root_buses);
23
24
25static int find_anything(struct device *dev, void *data)
26{
27 return 1;
28}
29
30/*
31 * Some device drivers need know if pci is initiated.
32 * Basically, we think pci is not initiated when there
33 * is no device to be found on the pci_bus_type.
34 */
35int no_pci_devices(void)
36{
37 struct device *dev;
38 int no_devices;
39
40 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
41 no_devices = (dev == NULL);
42 put_device(dev);
43 return no_devices;
44}
45EXPORT_SYMBOL(no_pci_devices);
46
47static struct pci_host_bridge *pci_host_bridge(struct pci_bus *bus)
48{
49 struct pci_host_bridge *bridge;
50
51 while (bus->parent)
52 bus = bus->parent;
53
54 list_for_each_entry(bridge, &pci_host_bridges, list) {
55 if (bridge->bus == bus)
56 return bridge;
57 }
58
59 return NULL;
60}
61
62static bool resource_contains(struct resource *res1, struct resource *res2)
63{
64 return res1->start <= res2->start && res1->end >= res2->end;
65}
66
67void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region,
68 struct resource *res)
69{
70 struct pci_host_bridge *bridge = pci_host_bridge(bus);
71 struct pci_host_bridge_window *window;
72 resource_size_t offset = 0;
73
74 list_for_each_entry(window, &bridge->windows, list) {
75 if (resource_type(res) != resource_type(window->res))
76 continue;
77
78 if (resource_contains(window->res, res)) {
79 offset = window->offset;
80 break;
81 }
82 }
83
84 region->start = res->start - offset;
85 region->end = res->end - offset;
86}
87EXPORT_SYMBOL(pcibios_resource_to_bus);
88
89static bool region_contains(struct pci_bus_region *region1,
90 struct pci_bus_region *region2)
91{
92 return region1->start <= region2->start && region1->end >= region2->end;
93}
94
95void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res,
96 struct pci_bus_region *region)
97{
98 struct pci_host_bridge *bridge = pci_host_bridge(bus);
99 struct pci_host_bridge_window *window;
100 struct pci_bus_region bus_region;
101 resource_size_t offset = 0;
102
103 list_for_each_entry(window, &bridge->windows, list) {
104 if (resource_type(res) != resource_type(window->res))
105 continue;
106
107 bus_region.start = window->res->start - window->offset;
108 bus_region.end = window->res->end - window->offset;
109
110 if (region_contains(&bus_region, region)) {
111 offset = window->offset;
112 break;
113 }
114 }
115
116 res->start = region->start + offset;
117 res->end = region->end + offset;
118}
119EXPORT_SYMBOL(pcibios_bus_to_resource);
120
121/*
122 * PCI Bus Class
123 */
124static void release_pcibus_dev(struct device *dev)
125{
126 struct pci_bus *pci_bus = to_pci_bus(dev);
127
128 if (pci_bus->bridge)
129 put_device(pci_bus->bridge);
130 pci_bus_remove_resources(pci_bus);
131 pci_release_bus_of_node(pci_bus);
132 kfree(pci_bus);
133}
134
135static struct class pcibus_class = {
136 .name = "pci_bus",
137 .dev_release = &release_pcibus_dev,
138 .dev_attrs = pcibus_dev_attrs,
139};
140
141static int __init pcibus_class_init(void)
142{
143 return class_register(&pcibus_class);
144}
145postcore_initcall(pcibus_class_init);
146
147static u64 pci_size(u64 base, u64 maxbase, u64 mask)
148{
149 u64 size = mask & maxbase; /* Find the significant bits */
150 if (!size)
151 return 0;
152
153 /* Get the lowest of them to find the decode size, and
154 from that the extent. */
155 size = (size & ~(size-1)) - 1;
156
157 /* base == maxbase can be valid only if the BAR has
158 already been programmed with all 1s. */
159 if (base == maxbase && ((base | size) & mask) != mask)
160 return 0;
161
162 return size;
163}
164
165static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
166{
167 u32 mem_type;
168 unsigned long flags;
169
170 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
171 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
172 flags |= IORESOURCE_IO;
173 return flags;
174 }
175
176 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
177 flags |= IORESOURCE_MEM;
178 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
179 flags |= IORESOURCE_PREFETCH;
180
181 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
182 switch (mem_type) {
183 case PCI_BASE_ADDRESS_MEM_TYPE_32:
184 break;
185 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
186 dev_info(&dev->dev, "1M mem BAR treated as 32-bit BAR\n");
187 break;
188 case PCI_BASE_ADDRESS_MEM_TYPE_64:
189 flags |= IORESOURCE_MEM_64;
190 break;
191 default:
192 dev_warn(&dev->dev,
193 "mem unknown type %x treated as 32-bit BAR\n",
194 mem_type);
195 break;
196 }
197 return flags;
198}
199
200/**
201 * pci_read_base - read a PCI BAR
202 * @dev: the PCI device
203 * @type: type of the BAR
204 * @res: resource buffer to be filled in
205 * @pos: BAR position in the config space
206 *
207 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
208 */
209int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
210 struct resource *res, unsigned int pos)
211{
212 u32 l, sz, mask;
213 u16 orig_cmd;
214 struct pci_bus_region region;
215
216 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
217
218 if (!dev->mmio_always_on) {
219 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
220 pci_write_config_word(dev, PCI_COMMAND,
221 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
222 }
223
224 res->name = pci_name(dev);
225
226 pci_read_config_dword(dev, pos, &l);
227 pci_write_config_dword(dev, pos, l | mask);
228 pci_read_config_dword(dev, pos, &sz);
229 pci_write_config_dword(dev, pos, l);
230
231 if (!dev->mmio_always_on)
232 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
233
234 /*
235 * All bits set in sz means the device isn't working properly.
236 * If the BAR isn't implemented, all bits must be 0. If it's a
237 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
238 * 1 must be clear.
239 */
240 if (!sz || sz == 0xffffffff)
241 goto fail;
242
243 /*
244 * I don't know how l can have all bits set. Copied from old code.
245 * Maybe it fixes a bug on some ancient platform.
246 */
247 if (l == 0xffffffff)
248 l = 0;
249
250 if (type == pci_bar_unknown) {
251 res->flags = decode_bar(dev, l);
252 res->flags |= IORESOURCE_SIZEALIGN;
253 if (res->flags & IORESOURCE_IO) {
254 l &= PCI_BASE_ADDRESS_IO_MASK;
255 sz &= PCI_BASE_ADDRESS_IO_MASK;
256 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
257 } else {
258 l &= PCI_BASE_ADDRESS_MEM_MASK;
259 sz &= PCI_BASE_ADDRESS_MEM_MASK;
260 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
261 }
262 } else {
263 res->flags |= (l & IORESOURCE_ROM_ENABLE);
264 l &= PCI_ROM_ADDRESS_MASK;
265 sz &= PCI_ROM_ADDRESS_MASK;
266 mask = (u32)PCI_ROM_ADDRESS_MASK;
267 }
268
269 if (res->flags & IORESOURCE_MEM_64) {
270 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
287 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
288 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",
289 pos);
290 goto fail;
291 }
292
293 if ((sizeof(resource_size_t) < 8) && l) {
294 /* 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);
297 region.start = 0;
298 region.end = sz64;
299 pcibios_bus_to_resource(dev->bus, res, &region);
300 } else {
301 region.start = l64;
302 region.end = l64 + sz64;
303 pcibios_bus_to_resource(dev->bus, res, &region);
304 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
305 pos, res);
306 }
307 } else {
308 sz = pci_size(l, sz, mask);
309
310 if (!sz)
311 goto fail;
312
313 region.start = l;
314 region.end = l + sz;
315 pcibios_bus_to_resource(dev->bus, res, &region);
316
317 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
318 }
319
320 out:
321 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
322 fail:
323 res->flags = 0;
324 goto out;
325}
326
327static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
328{
329 unsigned int pos, reg;
330
331 for (pos = 0; pos < howmany; pos++) {
332 struct resource *res = &dev->resource[pos];
333 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
334 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
335 }
336
337 if (rom) {
338 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
339 dev->rom_base_reg = rom;
340 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
341 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
342 IORESOURCE_SIZEALIGN;
343 __pci_read_base(dev, pci_bar_mem32, res, rom);
344 }
345}
346
347static void __devinit pci_read_bridge_io(struct pci_bus *child)
348{
349 struct pci_dev *dev = child->self;
350 u8 io_base_lo, io_limit_lo;
351 unsigned long base, limit;
352 struct pci_bus_region region;
353 struct resource *res, res2;
354
355 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
369 if (base && base <= limit) {
370 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
371 res2.flags = res->flags;
372 region.start = base;
373 region.end = limit + 0xfff;
374 pcibios_bus_to_resource(dev->bus, &res2, &region);
375 if (!res->start)
376 res->start = res2.start;
377 if (!res->end)
378 res->end = res2.end;
379 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
380 }
381}
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;
388 struct pci_bus_region region;
389 struct resource *res;
390
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;
396 if (base && base <= limit) {
397 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
398 region.start = base;
399 region.end = limit + 0xfffff;
400 pcibios_bus_to_resource(dev->bus, res, &region);
401 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
402 }
403}
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;
410 struct pci_bus_region region;
411 struct resource *res;
412
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) {
435 dev_err(&dev->dev, "can't handle 64-bit "
436 "address space for bridge\n");
437 return;
438 }
439#endif
440 }
441 }
442 if (base && base <= limit) {
443 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;
447 region.start = base;
448 region.end = limit + 0xfffff;
449 pcibios_bus_to_resource(dev->bus, res, &region);
450 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
451 }
452}
453
454void __devinit pci_read_bridge_bases(struct pci_bus *child)
455{
456 struct pci_dev *dev = child->self;
457 struct resource *res;
458 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
467 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
471 pci_read_bridge_io(child);
472 pci_read_bridge_mmio(child);
473 pci_read_bridge_mmio_pref(child);
474
475 if (dev->transparent) {
476 pci_bus_for_each_resource(child->parent, res, i) {
477 if (res) {
478 pci_bus_add_resource(child, res,
479 PCI_SUBTRACTIVE_DECODE);
480 dev_printk(KERN_DEBUG, &dev->dev,
481 " bridge window %pR (subtractive decode)\n",
482 res);
483 }
484 }
485 }
486}
487
488static struct pci_bus * pci_alloc_bus(void)
489{
490 struct pci_bus *b;
491
492 b = kzalloc(sizeof(*b), GFP_KERNEL);
493 if (b) {
494 INIT_LIST_HEAD(&b->node);
495 INIT_LIST_HEAD(&b->children);
496 INIT_LIST_HEAD(&b->devices);
497 INIT_LIST_HEAD(&b->slots);
498 INIT_LIST_HEAD(&b->resources);
499 b->max_bus_speed = PCI_SPEED_UNKNOWN;
500 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
501 }
502 return b;
503}
504
505static 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
524static unsigned char pcie_link_speed[] = {
525 PCI_SPEED_UNKNOWN, /* 0 */
526 PCIE_SPEED_2_5GT, /* 1 */
527 PCIE_SPEED_5_0GT, /* 2 */
528 PCIE_SPEED_8_0GT, /* 3 */
529 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
549static 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
581static void pci_set_bus_speed(struct pci_bus *bus)
582{
583 struct pci_dev *bridge = bus->self;
584 int pos;
585
586 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
599 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
639static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
640 struct pci_dev *bridge, int busnr)
641{
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
652 child->parent = parent;
653 child->ops = parent->ops;
654 child->sysdata = parent->sysdata;
655 child->bus_flags = parent->bus_flags;
656
657 /* 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;
662 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
663
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
672 if (!bridge)
673 return child;
674
675 child->self = bridge;
676 child->bridge = get_device(&bridge->dev);
677 pci_set_bus_of_node(child);
678 pci_set_bus_speed(child);
679
680 /* Set up default resource pointers and names.. */
681 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
682 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
690struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
691{
692 struct pci_bus *child;
693
694 child = pci_alloc_child_bus(parent, dev, busnr);
695 if (child) {
696 down_write(&pci_bus_sem);
697 list_add_tail(&child->node, &parent->children);
698 up_write(&pci_bus_sem);
699 }
700 return child;
701}
702
703static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
704{
705 struct pci_bus *parent = child->parent;
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
712 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
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 */
729int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
730{
731 struct pci_bus *child;
732 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
733 u32 buses, i, j = 0;
734 u16 bctl;
735 u8 primary, secondary, subordinate;
736 int broken = 0;
737
738 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
739 primary = buses & 0xFF;
740 secondary = (buses >> 8) & 0xFF;
741 subordinate = (buses >> 16) & 0xFF;
742
743 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
744 secondary, subordinate, pass);
745
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
751 /* Check if setup is sensible at all */
752 if (!pass &&
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);
757 broken = 1;
758 }
759
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
766 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
767 !is_cardbus && !broken) {
768 unsigned int cmax;
769 /*
770 * Bus already configured by firmware, process it in the first
771 * pass and just note the configuration.
772 */
773 if (pass)
774 goto out;
775
776 /*
777 * If we already got to this bus through a different bridge,
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.
782 */
783 child = pci_find_bus(pci_domain_nr(bus), secondary);
784 if (!child) {
785 child = pci_add_new_bus(bus, dev, secondary);
786 if (!child)
787 goto out;
788 child->primary = primary;
789 child->subordinate = subordinate;
790 child->bridge_ctl = bctl;
791 }
792
793 cmax = pci_scan_child_bus(child);
794 if (cmax > max)
795 max = cmax;
796 if (child->subordinate > max)
797 max = child->subordinate;
798 } else {
799 /*
800 * We need to assign a number to this bus which we always
801 * do in the second pass.
802 */
803 if (!pass) {
804 if (pcibios_assign_all_busses() || broken)
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);
813 goto out;
814 }
815
816 /* Clear errors */
817 pci_write_config_word(dev, PCI_STATUS, 0xffff);
818
819 /* Prevent assigning a bus number that already exists.
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;
827 }
828 buses = (buses & 0xff000000)
829 | ((unsigned int)(child->primary) << 0)
830 | ((unsigned int)(child->secondary) << 8)
831 | ((unsigned int)(child->subordinate) << 16);
832
833 /*
834 * yenta.c forces a secondary latency timer of 176.
835 * Copy that behaviour here.
836 */
837 if (is_cardbus) {
838 buses &= ~0xff000000;
839 buses |= CARDBUS_LATENCY_TIMER << 24;
840 }
841
842 /*
843 * We need to blast all three values with a single write.
844 */
845 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
846
847 if (!is_cardbus) {
848 child->bridge_ctl = bctl;
849 /*
850 * Adjust subordinate busnr in parent buses.
851 * We do this before scanning for children because
852 * some devices may not be detected if the bios
853 * was lazy.
854 */
855 pci_fixup_parent_subordinate_busnr(child, max);
856 /* Now we can scan all subordinate buses... */
857 max = pci_scan_child_bus(child);
858 /*
859 * now fix it up again since we have found
860 * the real value of max.
861 */
862 pci_fixup_parent_subordinate_busnr(child, max);
863 } else {
864 /*
865 * For CardBus bridges, we leave 4 bus numbers
866 * as cards with a PCI-to-PCI bridge can be
867 * inserted later.
868 */
869 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
870 struct pci_bus *parent = bus;
871 if (pci_find_bus(pci_domain_nr(bus),
872 max+i+1))
873 break;
874 while (parent->parent) {
875 if ((!pcibios_assign_all_busses()) &&
876 (parent->subordinate > max) &&
877 (parent->subordinate <= max+i)) {
878 j = 1;
879 }
880 parent = parent->parent;
881 }
882 if (j) {
883 /*
884 * Often, there are two cardbus bridges
885 * -- try to leave one valid bus number
886 * for each one.
887 */
888 i /= 2;
889 break;
890 }
891 }
892 max += i;
893 pci_fixup_parent_subordinate_busnr(child, max);
894 }
895 /*
896 * Set the subordinate bus number to its real value.
897 */
898 child->subordinate = max;
899 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
900 }
901
902 sprintf(child->name,
903 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
904 pci_domain_nr(bus), child->number);
905
906 /* Has only triggered on CardBus, fixup is in yenta_socket */
907 while (bus->parent) {
908 if ((child->subordinate > bus->subordinate) ||
909 (child->number > bus->subordinate) ||
910 (child->number < bus->number) ||
911 (child->subordinate < bus->number)) {
912 dev_info(&child->dev, "[bus %02x-%02x] %s "
913 "hidden behind%s bridge %s [bus %02x-%02x]\n",
914 child->number, child->subordinate,
915 (bus->number > child->subordinate &&
916 bus->subordinate < child->number) ?
917 "wholly" : "partially",
918 bus->self->transparent ? " transparent" : "",
919 dev_name(&bus->dev),
920 bus->number, bus->subordinate);
921 }
922 bus = bus->parent;
923 }
924
925out:
926 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
927
928 return max;
929}
930
931/*
932 * Read interrupt line and base address registers.
933 * The architecture-dependent code can tweak these, of course.
934 */
935static void pci_read_irq(struct pci_dev *dev)
936{
937 unsigned char irq;
938
939 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
940 dev->pin = irq;
941 if (irq)
942 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
943 dev->irq = irq;
944}
945
946void set_pcie_port_type(struct pci_dev *pdev)
947{
948 int pos;
949 u16 reg16;
950
951 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
952 if (!pos)
953 return;
954 pdev->is_pcie = 1;
955 pdev->pcie_cap = pos;
956 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
957 pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
958 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
959 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
960}
961
962void set_pcie_hotplug_bridge(struct pci_dev *pdev)
963{
964 int pos;
965 u16 reg16;
966 u32 reg32;
967
968 pos = pci_pcie_cap(pdev);
969 if (!pos)
970 return;
971 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
972 if (!(reg16 & PCI_EXP_FLAGS_SLOT))
973 return;
974 pci_read_config_dword(pdev, pos + PCI_EXP_SLTCAP, &reg32);
975 if (reg32 & PCI_EXP_SLTCAP_HPC)
976 pdev->is_hotplug_bridge = 1;
977}
978
979#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
980
981/**
982 * pci_setup_device - fill in class and map information of a device
983 * @dev: the device structure to fill
984 *
985 * Initialize the device structure with information about the device's
986 * vendor,class,memory and IO-space addresses,IRQ lines etc.
987 * Called at initialisation of the PCI subsystem and by CardBus services.
988 * Returns 0 on success and negative if unknown type of device (not normal,
989 * bridge or CardBus).
990 */
991int pci_setup_device(struct pci_dev *dev)
992{
993 u32 class;
994 u8 hdr_type;
995 struct pci_slot *slot;
996 int pos = 0;
997 struct pci_bus_region region;
998 struct resource *res;
999
1000 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1001 return -EIO;
1002
1003 dev->sysdata = dev->bus->sysdata;
1004 dev->dev.parent = dev->bus->bridge;
1005 dev->dev.bus = &pci_bus_type;
1006 dev->hdr_type = hdr_type & 0x7f;
1007 dev->multifunction = !!(hdr_type & 0x80);
1008 dev->error_state = pci_channel_io_normal;
1009 set_pcie_port_type(dev);
1010
1011 list_for_each_entry(slot, &dev->bus->slots, list)
1012 if (PCI_SLOT(dev->devfn) == slot->number)
1013 dev->slot = slot;
1014
1015 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1016 set this higher, assuming the system even supports it. */
1017 dev->dma_mask = 0xffffffff;
1018
1019 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1020 dev->bus->number, PCI_SLOT(dev->devfn),
1021 PCI_FUNC(dev->devfn));
1022
1023 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
1024 dev->revision = class & 0xff;
1025 dev->class = class >> 8; /* upper 3 bytes */
1026
1027 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1028 dev->vendor, dev->device, dev->hdr_type, dev->class);
1029
1030 /* need to have dev->class ready */
1031 dev->cfg_size = pci_cfg_space_size(dev);
1032
1033 /* "Unknown power state" */
1034 dev->current_state = PCI_UNKNOWN;
1035
1036 /* Early fixups, before probing the BARs */
1037 pci_fixup_device(pci_fixup_early, dev);
1038 /* device class may be changed after fixup */
1039 class = dev->class >> 8;
1040
1041 switch (dev->hdr_type) { /* header type */
1042 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1043 if (class == PCI_CLASS_BRIDGE_PCI)
1044 goto bad;
1045 pci_read_irq(dev);
1046 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1047 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1048 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
1049
1050 /*
1051 * Do the ugly legacy mode stuff here rather than broken chip
1052 * quirk code. Legacy mode ATA controllers have fixed
1053 * addresses. These are not always echoed in BAR0-3, and
1054 * BAR0-3 in a few cases contain junk!
1055 */
1056 if (class == PCI_CLASS_STORAGE_IDE) {
1057 u8 progif;
1058 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1059 if ((progif & 1) == 0) {
1060 region.start = 0x1F0;
1061 region.end = 0x1F7;
1062 res = &dev->resource[0];
1063 res->flags = LEGACY_IO_RESOURCE;
1064 pcibios_bus_to_resource(dev->bus, res, &region);
1065 region.start = 0x3F6;
1066 region.end = 0x3F6;
1067 res = &dev->resource[1];
1068 res->flags = LEGACY_IO_RESOURCE;
1069 pcibios_bus_to_resource(dev->bus, res, &region);
1070 }
1071 if ((progif & 4) == 0) {
1072 region.start = 0x170;
1073 region.end = 0x177;
1074 res = &dev->resource[2];
1075 res->flags = LEGACY_IO_RESOURCE;
1076 pcibios_bus_to_resource(dev->bus, res, &region);
1077 region.start = 0x376;
1078 region.end = 0x376;
1079 res = &dev->resource[3];
1080 res->flags = LEGACY_IO_RESOURCE;
1081 pcibios_bus_to_resource(dev->bus, res, &region);
1082 }
1083 }
1084 break;
1085
1086 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1087 if (class != PCI_CLASS_BRIDGE_PCI)
1088 goto bad;
1089 /* The PCI-to-PCI bridge spec requires that subtractive
1090 decoding (i.e. transparent) bridge must have programming
1091 interface code of 0x01. */
1092 pci_read_irq(dev);
1093 dev->transparent = ((dev->class & 0xff) == 1);
1094 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
1095 set_pcie_hotplug_bridge(dev);
1096 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1097 if (pos) {
1098 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1099 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1100 }
1101 break;
1102
1103 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1104 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1105 goto bad;
1106 pci_read_irq(dev);
1107 pci_read_bases(dev, 1, 0);
1108 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1109 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1110 break;
1111
1112 default: /* unknown header */
1113 dev_err(&dev->dev, "unknown header type %02x, "
1114 "ignoring device\n", dev->hdr_type);
1115 return -EIO;
1116
1117 bad:
1118 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1119 "type %02x)\n", dev->class, dev->hdr_type);
1120 dev->class = PCI_CLASS_NOT_DEFINED;
1121 }
1122
1123 /* We found a fine healthy device, go go go... */
1124 return 0;
1125}
1126
1127static void pci_release_capabilities(struct pci_dev *dev)
1128{
1129 pci_vpd_release(dev);
1130 pci_iov_release(dev);
1131 pci_free_cap_save_buffers(dev);
1132}
1133
1134/**
1135 * pci_release_dev - free a pci device structure when all users of it are finished.
1136 * @dev: device that's been disconnected
1137 *
1138 * Will be called only by the device core when all users of this pci device are
1139 * done.
1140 */
1141static void pci_release_dev(struct device *dev)
1142{
1143 struct pci_dev *pci_dev;
1144
1145 pci_dev = to_pci_dev(dev);
1146 pci_release_capabilities(pci_dev);
1147 pci_release_of_node(pci_dev);
1148 kfree(pci_dev);
1149}
1150
1151/**
1152 * pci_cfg_space_size - get the configuration space size of the PCI device.
1153 * @dev: PCI device
1154 *
1155 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1156 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1157 * access it. Maybe we don't have a way to generate extended config space
1158 * accesses, or the device is behind a reverse Express bridge. So we try
1159 * reading the dword at 0x100 which must either be 0 or a valid extended
1160 * capability header.
1161 */
1162int pci_cfg_space_size_ext(struct pci_dev *dev)
1163{
1164 u32 status;
1165 int pos = PCI_CFG_SPACE_SIZE;
1166
1167 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1168 goto fail;
1169 if (status == 0xffffffff)
1170 goto fail;
1171
1172 return PCI_CFG_SPACE_EXP_SIZE;
1173
1174 fail:
1175 return PCI_CFG_SPACE_SIZE;
1176}
1177
1178int pci_cfg_space_size(struct pci_dev *dev)
1179{
1180 int pos;
1181 u32 status;
1182 u16 class;
1183
1184 class = dev->class >> 8;
1185 if (class == PCI_CLASS_BRIDGE_HOST)
1186 return pci_cfg_space_size_ext(dev);
1187
1188 pos = pci_pcie_cap(dev);
1189 if (!pos) {
1190 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1191 if (!pos)
1192 goto fail;
1193
1194 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1195 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1196 goto fail;
1197 }
1198
1199 return pci_cfg_space_size_ext(dev);
1200
1201 fail:
1202 return PCI_CFG_SPACE_SIZE;
1203}
1204
1205static void pci_release_bus_bridge_dev(struct device *dev)
1206{
1207 kfree(dev);
1208}
1209
1210struct pci_dev *alloc_pci_dev(void)
1211{
1212 struct pci_dev *dev;
1213
1214 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1215 if (!dev)
1216 return NULL;
1217
1218 INIT_LIST_HEAD(&dev->bus_list);
1219
1220 return dev;
1221}
1222EXPORT_SYMBOL(alloc_pci_dev);
1223
1224bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1225 int crs_timeout)
1226{
1227 int delay = 1;
1228
1229 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1230 return false;
1231
1232 /* some broken boards return 0 or ~0 if a slot is empty: */
1233 if (*l == 0xffffffff || *l == 0x00000000 ||
1234 *l == 0x0000ffff || *l == 0xffff0000)
1235 return false;
1236
1237 /* Configuration request Retry Status */
1238 while (*l == 0xffff0001) {
1239 if (!crs_timeout)
1240 return false;
1241
1242 msleep(delay);
1243 delay *= 2;
1244 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1245 return false;
1246 /* Card hasn't responded in 60 seconds? Must be stuck. */
1247 if (delay > crs_timeout) {
1248 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1249 "responding\n", pci_domain_nr(bus),
1250 bus->number, PCI_SLOT(devfn),
1251 PCI_FUNC(devfn));
1252 return false;
1253 }
1254 }
1255
1256 return true;
1257}
1258EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1259
1260/*
1261 * Read the config data for a PCI device, sanity-check it
1262 * and fill in the dev structure...
1263 */
1264static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
1265{
1266 struct pci_dev *dev;
1267 u32 l;
1268
1269 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
1270 return NULL;
1271
1272 dev = alloc_pci_dev();
1273 if (!dev)
1274 return NULL;
1275
1276 dev->bus = bus;
1277 dev->devfn = devfn;
1278 dev->vendor = l & 0xffff;
1279 dev->device = (l >> 16) & 0xffff;
1280
1281 pci_set_of_node(dev);
1282
1283 if (pci_setup_device(dev)) {
1284 kfree(dev);
1285 return NULL;
1286 }
1287
1288 return dev;
1289}
1290
1291static void pci_init_capabilities(struct pci_dev *dev)
1292{
1293 /* MSI/MSI-X list */
1294 pci_msi_init_pci_dev(dev);
1295
1296 /* Buffers for saving PCIe and PCI-X capabilities */
1297 pci_allocate_cap_save_buffers(dev);
1298
1299 /* Power Management */
1300 pci_pm_init(dev);
1301 platform_pci_wakeup_init(dev);
1302
1303 /* Vital Product Data */
1304 pci_vpd_pci22_init(dev);
1305
1306 /* Alternative Routing-ID Forwarding */
1307 pci_enable_ari(dev);
1308
1309 /* Single Root I/O Virtualization */
1310 pci_iov_init(dev);
1311
1312 /* Enable ACS P2P upstream forwarding */
1313 pci_enable_acs(dev);
1314}
1315
1316void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
1317{
1318 device_initialize(&dev->dev);
1319 dev->dev.release = pci_release_dev;
1320 pci_dev_get(dev);
1321
1322 dev->dev.dma_mask = &dev->dma_mask;
1323 dev->dev.dma_parms = &dev->dma_parms;
1324 dev->dev.coherent_dma_mask = 0xffffffffull;
1325
1326 pci_set_dma_max_seg_size(dev, 65536);
1327 pci_set_dma_seg_boundary(dev, 0xffffffff);
1328
1329 /* Fix up broken headers */
1330 pci_fixup_device(pci_fixup_header, dev);
1331
1332 /* moved out from quirk header fixup code */
1333 pci_reassigndev_resource_alignment(dev);
1334
1335 /* Clear the state_saved flag. */
1336 dev->state_saved = false;
1337
1338 /* Initialize various capabilities */
1339 pci_init_capabilities(dev);
1340
1341 /*
1342 * Add the device to our list of discovered devices
1343 * and the bus list for fixup functions, etc.
1344 */
1345 down_write(&pci_bus_sem);
1346 list_add_tail(&dev->bus_list, &bus->devices);
1347 up_write(&pci_bus_sem);
1348}
1349
1350struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
1351{
1352 struct pci_dev *dev;
1353
1354 dev = pci_get_slot(bus, devfn);
1355 if (dev) {
1356 pci_dev_put(dev);
1357 return dev;
1358 }
1359
1360 dev = pci_scan_device(bus, devfn);
1361 if (!dev)
1362 return NULL;
1363
1364 pci_device_add(dev, bus);
1365
1366 return dev;
1367}
1368EXPORT_SYMBOL(pci_scan_single_device);
1369
1370static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn)
1371{
1372 u16 cap;
1373 unsigned pos, next_fn;
1374
1375 if (!dev)
1376 return 0;
1377
1378 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1379 if (!pos)
1380 return 0;
1381 pci_read_config_word(dev, pos + 4, &cap);
1382 next_fn = cap >> 8;
1383 if (next_fn <= fn)
1384 return 0;
1385 return next_fn;
1386}
1387
1388static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn)
1389{
1390 return (fn + 1) % 8;
1391}
1392
1393static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
1394{
1395 return 0;
1396}
1397
1398static int only_one_child(struct pci_bus *bus)
1399{
1400 struct pci_dev *parent = bus->self;
1401 if (!parent || !pci_is_pcie(parent))
1402 return 0;
1403 if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
1404 parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
1405 return 1;
1406 return 0;
1407}
1408
1409/**
1410 * pci_scan_slot - scan a PCI slot on a bus for devices.
1411 * @bus: PCI bus to scan
1412 * @devfn: slot number to scan (must have zero function.)
1413 *
1414 * Scan a PCI slot on the specified PCI bus for devices, adding
1415 * discovered devices to the @bus->devices list. New devices
1416 * will not have is_added set.
1417 *
1418 * Returns the number of new devices found.
1419 */
1420int pci_scan_slot(struct pci_bus *bus, int devfn)
1421{
1422 unsigned fn, nr = 0;
1423 struct pci_dev *dev;
1424 unsigned (*next_fn)(struct pci_dev *, unsigned) = no_next_fn;
1425
1426 if (only_one_child(bus) && (devfn > 0))
1427 return 0; /* Already scanned the entire slot */
1428
1429 dev = pci_scan_single_device(bus, devfn);
1430 if (!dev)
1431 return 0;
1432 if (!dev->is_added)
1433 nr++;
1434
1435 if (pci_ari_enabled(bus))
1436 next_fn = next_ari_fn;
1437 else if (dev->multifunction)
1438 next_fn = next_trad_fn;
1439
1440 for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {
1441 dev = pci_scan_single_device(bus, devfn + fn);
1442 if (dev) {
1443 if (!dev->is_added)
1444 nr++;
1445 dev->multifunction = 1;
1446 }
1447 }
1448
1449 /* only one slot has pcie device */
1450 if (bus->self && nr)
1451 pcie_aspm_init_link_state(bus->self);
1452
1453 return nr;
1454}
1455
1456static int pcie_find_smpss(struct pci_dev *dev, void *data)
1457{
1458 u8 *smpss = data;
1459
1460 if (!pci_is_pcie(dev))
1461 return 0;
1462
1463 /* For PCIE hotplug enabled slots not connected directly to a
1464 * PCI-E root port, there can be problems when hotplugging
1465 * devices. This is due to the possibility of hotplugging a
1466 * device into the fabric with a smaller MPS that the devices
1467 * currently running have configured. Modifying the MPS on the
1468 * running devices could cause a fatal bus error due to an
1469 * incoming frame being larger than the newly configured MPS.
1470 * To work around this, the MPS for the entire fabric must be
1471 * set to the minimum size. Any devices hotplugged into this
1472 * fabric will have the minimum MPS set. If the PCI hotplug
1473 * slot is directly connected to the root port and there are not
1474 * other devices on the fabric (which seems to be the most
1475 * common case), then this is not an issue and MPS discovery
1476 * will occur as normal.
1477 */
1478 if (dev->is_hotplug_bridge && (!list_is_singular(&dev->bus->devices) ||
1479 (dev->bus->self &&
1480 dev->bus->self->pcie_type != PCI_EXP_TYPE_ROOT_PORT)))
1481 *smpss = 0;
1482
1483 if (*smpss > dev->pcie_mpss)
1484 *smpss = dev->pcie_mpss;
1485
1486 return 0;
1487}
1488
1489static void pcie_write_mps(struct pci_dev *dev, int mps)
1490{
1491 int rc;
1492
1493 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
1494 mps = 128 << dev->pcie_mpss;
1495
1496 if (dev->pcie_type != PCI_EXP_TYPE_ROOT_PORT && dev->bus->self)
1497 /* For "Performance", the assumption is made that
1498 * downstream communication will never be larger than
1499 * the MRRS. So, the MPS only needs to be configured
1500 * for the upstream communication. This being the case,
1501 * walk from the top down and set the MPS of the child
1502 * to that of the parent bus.
1503 *
1504 * Configure the device MPS with the smaller of the
1505 * device MPSS or the bridge MPS (which is assumed to be
1506 * properly configured at this point to the largest
1507 * allowable MPS based on its parent bus).
1508 */
1509 mps = min(mps, pcie_get_mps(dev->bus->self));
1510 }
1511
1512 rc = pcie_set_mps(dev, mps);
1513 if (rc)
1514 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1515}
1516
1517static void pcie_write_mrrs(struct pci_dev *dev)
1518{
1519 int rc, mrrs;
1520
1521 /* In the "safe" case, do not configure the MRRS. There appear to be
1522 * issues with setting MRRS to 0 on a number of devices.
1523 */
1524 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1525 return;
1526
1527 /* For Max performance, the MRRS must be set to the largest supported
1528 * value. However, it cannot be configured larger than the MPS the
1529 * device or the bus can support. This should already be properly
1530 * configured by a prior call to pcie_write_mps.
1531 */
1532 mrrs = pcie_get_mps(dev);
1533
1534 /* MRRS is a R/W register. Invalid values can be written, but a
1535 * subsequent read will verify if the value is acceptable or not.
1536 * If the MRRS value provided is not acceptable (e.g., too large),
1537 * shrink the value until it is acceptable to the HW.
1538 */
1539 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1540 rc = pcie_set_readrq(dev, mrrs);
1541 if (!rc)
1542 break;
1543
1544 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
1545 mrrs /= 2;
1546 }
1547
1548 if (mrrs < 128)
1549 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1550 "safe value. If problems are experienced, try running "
1551 "with pci=pcie_bus_safe.\n");
1552}
1553
1554static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1555{
1556 int mps, orig_mps;
1557
1558 if (!pci_is_pcie(dev))
1559 return 0;
1560
1561 mps = 128 << *(u8 *)data;
1562 orig_mps = pcie_get_mps(dev);
1563
1564 pcie_write_mps(dev, mps);
1565 pcie_write_mrrs(dev);
1566
1567 dev_info(&dev->dev, "PCI-E Max Payload Size set to %4d/%4d (was %4d), "
1568 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1569 orig_mps, pcie_get_readrq(dev));
1570
1571 return 0;
1572}
1573
1574/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
1575 * parents then children fashion. If this changes, then this code will not
1576 * work as designed.
1577 */
1578void pcie_bus_configure_settings(struct pci_bus *bus, u8 mpss)
1579{
1580 u8 smpss;
1581
1582 if (!pci_is_pcie(bus->self))
1583 return;
1584
1585 if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
1586 return;
1587
1588 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
1589 * to be aware to the MPS of the destination. To work around this,
1590 * simply force the MPS of the entire system to the smallest possible.
1591 */
1592 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1593 smpss = 0;
1594
1595 if (pcie_bus_config == PCIE_BUS_SAFE) {
1596 smpss = mpss;
1597
1598 pcie_find_smpss(bus->self, &smpss);
1599 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1600 }
1601
1602 pcie_bus_configure_set(bus->self, &smpss);
1603 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1604}
1605EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
1606
1607unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
1608{
1609 unsigned int devfn, pass, max = bus->secondary;
1610 struct pci_dev *dev;
1611
1612 dev_dbg(&bus->dev, "scanning bus\n");
1613
1614 /* Go find them, Rover! */
1615 for (devfn = 0; devfn < 0x100; devfn += 8)
1616 pci_scan_slot(bus, devfn);
1617
1618 /* Reserve buses for SR-IOV capability. */
1619 max += pci_iov_bus_range(bus);
1620
1621 /*
1622 * After performing arch-dependent fixup of the bus, look behind
1623 * all PCI-to-PCI bridges on this bus.
1624 */
1625 if (!bus->is_added) {
1626 dev_dbg(&bus->dev, "fixups for bus\n");
1627 pcibios_fixup_bus(bus);
1628 if (pci_is_root_bus(bus))
1629 bus->is_added = 1;
1630 }
1631
1632 for (pass=0; pass < 2; pass++)
1633 list_for_each_entry(dev, &bus->devices, bus_list) {
1634 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1635 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1636 max = pci_scan_bridge(bus, dev, max, pass);
1637 }
1638
1639 /*
1640 * We've scanned the bus and so we know all about what's on
1641 * the other side of any bridges that may be on this bus plus
1642 * any devices.
1643 *
1644 * Return how far we've got finding sub-buses.
1645 */
1646 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
1647 return max;
1648}
1649
1650struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1651 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1652{
1653 int error;
1654 struct pci_host_bridge *bridge;
1655 struct pci_bus *b, *b2;
1656 struct device *dev;
1657 struct pci_host_bridge_window *window, *n;
1658 struct resource *res;
1659 resource_size_t offset;
1660 char bus_addr[64];
1661 char *fmt;
1662
1663 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
1664 if (!bridge)
1665 return NULL;
1666
1667 b = pci_alloc_bus();
1668 if (!b)
1669 goto err_bus;
1670
1671 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1672 if (!dev)
1673 goto err_dev;
1674
1675 b->sysdata = sysdata;
1676 b->ops = ops;
1677
1678 b2 = pci_find_bus(pci_domain_nr(b), bus);
1679 if (b2) {
1680 /* If we already got to this bus through a different bridge, ignore it */
1681 dev_dbg(&b2->dev, "bus already known\n");
1682 goto err_out;
1683 }
1684
1685 dev->parent = parent;
1686 dev->release = pci_release_bus_bridge_dev;
1687 dev_set_name(dev, "pci%04x:%02x", pci_domain_nr(b), bus);
1688 error = device_register(dev);
1689 if (error)
1690 goto dev_reg_err;
1691 b->bridge = get_device(dev);
1692 device_enable_async_suspend(b->bridge);
1693 pci_set_bus_of_node(b);
1694
1695 if (!parent)
1696 set_dev_node(b->bridge, pcibus_to_node(b));
1697
1698 b->dev.class = &pcibus_class;
1699 b->dev.parent = b->bridge;
1700 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
1701 error = device_register(&b->dev);
1702 if (error)
1703 goto class_dev_reg_err;
1704
1705 /* Create legacy_io and legacy_mem files for this bus */
1706 pci_create_legacy_files(b);
1707
1708 b->number = b->secondary = bus;
1709
1710 bridge->bus = b;
1711 INIT_LIST_HEAD(&bridge->windows);
1712
1713 if (parent)
1714 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1715 else
1716 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1717
1718 /* Add initial resources to the bus */
1719 list_for_each_entry_safe(window, n, resources, list) {
1720 list_move_tail(&window->list, &bridge->windows);
1721 res = window->res;
1722 offset = window->offset;
1723 pci_bus_add_resource(b, res, 0);
1724 if (offset) {
1725 if (resource_type(res) == IORESOURCE_IO)
1726 fmt = " (bus address [%#06llx-%#06llx])";
1727 else
1728 fmt = " (bus address [%#010llx-%#010llx])";
1729 snprintf(bus_addr, sizeof(bus_addr), fmt,
1730 (unsigned long long) (res->start - offset),
1731 (unsigned long long) (res->end - offset));
1732 } else
1733 bus_addr[0] = '\0';
1734 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
1735 }
1736
1737 down_write(&pci_bus_sem);
1738 list_add_tail(&bridge->list, &pci_host_bridges);
1739 list_add_tail(&b->node, &pci_root_buses);
1740 up_write(&pci_bus_sem);
1741
1742 return b;
1743
1744class_dev_reg_err:
1745 device_unregister(dev);
1746dev_reg_err:
1747 down_write(&pci_bus_sem);
1748 list_del(&bridge->list);
1749 list_del(&b->node);
1750 up_write(&pci_bus_sem);
1751err_out:
1752 kfree(dev);
1753err_dev:
1754 kfree(b);
1755err_bus:
1756 kfree(bridge);
1757 return NULL;
1758}
1759
1760struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
1761 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1762{
1763 struct pci_bus *b;
1764
1765 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1766 if (!b)
1767 return NULL;
1768
1769 b->subordinate = pci_scan_child_bus(b);
1770 pci_bus_add_devices(b);
1771 return b;
1772}
1773EXPORT_SYMBOL(pci_scan_root_bus);
1774
1775/* Deprecated; use pci_scan_root_bus() instead */
1776struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
1777 int bus, struct pci_ops *ops, void *sysdata)
1778{
1779 LIST_HEAD(resources);
1780 struct pci_bus *b;
1781
1782 pci_add_resource(&resources, &ioport_resource);
1783 pci_add_resource(&resources, &iomem_resource);
1784 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
1785 if (b)
1786 b->subordinate = pci_scan_child_bus(b);
1787 else
1788 pci_free_resource_list(&resources);
1789 return b;
1790}
1791EXPORT_SYMBOL(pci_scan_bus_parented);
1792
1793struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
1794 void *sysdata)
1795{
1796 LIST_HEAD(resources);
1797 struct pci_bus *b;
1798
1799 pci_add_resource(&resources, &ioport_resource);
1800 pci_add_resource(&resources, &iomem_resource);
1801 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1802 if (b) {
1803 b->subordinate = pci_scan_child_bus(b);
1804 pci_bus_add_devices(b);
1805 } else {
1806 pci_free_resource_list(&resources);
1807 }
1808 return b;
1809}
1810EXPORT_SYMBOL(pci_scan_bus);
1811
1812#ifdef CONFIG_HOTPLUG
1813/**
1814 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1815 * @bridge: PCI bridge for the bus to scan
1816 *
1817 * Scan a PCI bus and child buses for new devices, add them,
1818 * and enable them, resizing bridge mmio/io resource if necessary
1819 * and possible. The caller must ensure the child devices are already
1820 * removed for resizing to occur.
1821 *
1822 * Returns the max number of subordinate bus discovered.
1823 */
1824unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1825{
1826 unsigned int max;
1827 struct pci_bus *bus = bridge->subordinate;
1828
1829 max = pci_scan_child_bus(bus);
1830
1831 pci_assign_unassigned_bridge_resources(bridge);
1832
1833 pci_bus_add_devices(bus);
1834
1835 return max;
1836}
1837
1838EXPORT_SYMBOL(pci_add_new_bus);
1839EXPORT_SYMBOL(pci_scan_slot);
1840EXPORT_SYMBOL(pci_scan_bridge);
1841EXPORT_SYMBOL_GPL(pci_scan_child_bus);
1842#endif
1843
1844static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
1845{
1846 const struct pci_dev *a = to_pci_dev(d_a);
1847 const struct pci_dev *b = to_pci_dev(d_b);
1848
1849 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1850 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1851
1852 if (a->bus->number < b->bus->number) return -1;
1853 else if (a->bus->number > b->bus->number) return 1;
1854
1855 if (a->devfn < b->devfn) return -1;
1856 else if (a->devfn > b->devfn) return 1;
1857
1858 return 0;
1859}
1860
1861void __init pci_sort_breadthfirst(void)
1862{
1863 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
1864}