1
2
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/of_device.h>
10#include <linux/of_pci.h>
11#include <linux/pci_hotplug.h>
12#include <linux/slab.h>
13#include <linux/module.h>
14#include <linux/cpumask.h>
15#include <linux/pci-aspm.h>
16#include <linux/aer.h>
17#include <linux/acpi.h>
18#include <linux/irqdomain.h>
19#include <linux/pm_runtime.h>
20#include "pci.h"
21
22#define CARDBUS_LATENCY_TIMER 176
23#define CARDBUS_RESERVE_BUSNR 3
24
25static struct resource busn_resource = {
26 .name = "PCI busn",
27 .start = 0,
28 .end = 255,
29 .flags = IORESOURCE_BUS,
30};
31
32
33LIST_HEAD(pci_root_buses);
34EXPORT_SYMBOL(pci_root_buses);
35
36static LIST_HEAD(pci_domain_busn_res_list);
37
38struct pci_domain_busn_res {
39 struct list_head list;
40 struct resource res;
41 int domain_nr;
42};
43
44static struct resource *get_pci_domain_busn_res(int domain_nr)
45{
46 struct pci_domain_busn_res *r;
47
48 list_for_each_entry(r, &pci_domain_busn_res_list, list)
49 if (r->domain_nr == domain_nr)
50 return &r->res;
51
52 r = kzalloc(sizeof(*r), GFP_KERNEL);
53 if (!r)
54 return NULL;
55
56 r->domain_nr = domain_nr;
57 r->res.start = 0;
58 r->res.end = 0xff;
59 r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
60
61 list_add_tail(&r->list, &pci_domain_busn_res_list);
62
63 return &r->res;
64}
65
66static int find_anything(struct device *dev, void *data)
67{
68 return 1;
69}
70
71
72
73
74
75
76int no_pci_devices(void)
77{
78 struct device *dev;
79 int no_devices;
80
81 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
82 no_devices = (dev == NULL);
83 put_device(dev);
84 return no_devices;
85}
86EXPORT_SYMBOL(no_pci_devices);
87
88
89
90
91static void release_pcibus_dev(struct device *dev)
92{
93 struct pci_bus *pci_bus = to_pci_bus(dev);
94
95 put_device(pci_bus->bridge);
96 pci_bus_remove_resources(pci_bus);
97 pci_release_bus_of_node(pci_bus);
98 kfree(pci_bus);
99}
100
101static struct class pcibus_class = {
102 .name = "pci_bus",
103 .dev_release = &release_pcibus_dev,
104 .dev_groups = pcibus_groups,
105};
106
107static int __init pcibus_class_init(void)
108{
109 return class_register(&pcibus_class);
110}
111postcore_initcall(pcibus_class_init);
112
113static u64 pci_size(u64 base, u64 maxbase, u64 mask)
114{
115 u64 size = mask & maxbase;
116 if (!size)
117 return 0;
118
119
120
121 size = (size & ~(size-1)) - 1;
122
123
124
125 if (base == maxbase && ((base | size) & mask) != mask)
126 return 0;
127
128 return size;
129}
130
131static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
132{
133 u32 mem_type;
134 unsigned long flags;
135
136 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
137 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
138 flags |= IORESOURCE_IO;
139 return flags;
140 }
141
142 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
143 flags |= IORESOURCE_MEM;
144 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
145 flags |= IORESOURCE_PREFETCH;
146
147 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
148 switch (mem_type) {
149 case PCI_BASE_ADDRESS_MEM_TYPE_32:
150 break;
151 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
152
153 break;
154 case PCI_BASE_ADDRESS_MEM_TYPE_64:
155 flags |= IORESOURCE_MEM_64;
156 break;
157 default:
158
159 break;
160 }
161 return flags;
162}
163
164#define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
165
166
167
168
169
170
171
172
173
174
175int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
176 struct resource *res, unsigned int pos)
177{
178 u32 l, sz, mask;
179 u64 l64, sz64, mask64;
180 u16 orig_cmd;
181 struct pci_bus_region region, inverted_region;
182
183 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
184
185
186 if (!dev->mmio_always_on) {
187 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
188 if (orig_cmd & PCI_COMMAND_DECODE_ENABLE) {
189 pci_write_config_word(dev, PCI_COMMAND,
190 orig_cmd & ~PCI_COMMAND_DECODE_ENABLE);
191 }
192 }
193
194 res->name = pci_name(dev);
195
196 pci_read_config_dword(dev, pos, &l);
197 pci_write_config_dword(dev, pos, l | mask);
198 pci_read_config_dword(dev, pos, &sz);
199 pci_write_config_dword(dev, pos, l);
200
201
202
203
204
205
206
207 if (sz == 0xffffffff)
208 sz = 0;
209
210
211
212
213
214 if (l == 0xffffffff)
215 l = 0;
216
217 if (type == pci_bar_unknown) {
218 res->flags = decode_bar(dev, l);
219 res->flags |= IORESOURCE_SIZEALIGN;
220 if (res->flags & IORESOURCE_IO) {
221 l64 = l & PCI_BASE_ADDRESS_IO_MASK;
222 sz64 = sz & PCI_BASE_ADDRESS_IO_MASK;
223 mask64 = PCI_BASE_ADDRESS_IO_MASK & (u32)IO_SPACE_LIMIT;
224 } else {
225 l64 = l & PCI_BASE_ADDRESS_MEM_MASK;
226 sz64 = sz & PCI_BASE_ADDRESS_MEM_MASK;
227 mask64 = (u32)PCI_BASE_ADDRESS_MEM_MASK;
228 }
229 } else {
230 res->flags |= (l & IORESOURCE_ROM_ENABLE);
231 l64 = l & PCI_ROM_ADDRESS_MASK;
232 sz64 = sz & PCI_ROM_ADDRESS_MASK;
233 mask64 = (u32)PCI_ROM_ADDRESS_MASK;
234 }
235
236 if (res->flags & IORESOURCE_MEM_64) {
237 pci_read_config_dword(dev, pos + 4, &l);
238 pci_write_config_dword(dev, pos + 4, ~0);
239 pci_read_config_dword(dev, pos + 4, &sz);
240 pci_write_config_dword(dev, pos + 4, l);
241
242 l64 |= ((u64)l << 32);
243 sz64 |= ((u64)sz << 32);
244 mask64 |= ((u64)~0 << 32);
245 }
246
247 if (!dev->mmio_always_on && (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
248 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
249
250 if (!sz64)
251 goto fail;
252
253 sz64 = pci_size(l64, sz64, mask64);
254 if (!sz64) {
255 dev_info(&dev->dev, FW_BUG "reg 0x%x: invalid BAR (can't size)\n",
256 pos);
257 goto fail;
258 }
259
260 if (res->flags & IORESOURCE_MEM_64) {
261 if ((sizeof(pci_bus_addr_t) < 8 || sizeof(resource_size_t) < 8)
262 && sz64 > 0x100000000ULL) {
263 res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
264 res->start = 0;
265 res->end = 0;
266 dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
267 pos, (unsigned long long)sz64);
268 goto out;
269 }
270
271 if ((sizeof(pci_bus_addr_t) < 8) && l) {
272
273 res->flags |= IORESOURCE_UNSET;
274 res->start = 0;
275 res->end = sz64;
276 dev_info(&dev->dev, "reg 0x%x: can't handle BAR above 4GB (bus address %#010llx)\n",
277 pos, (unsigned long long)l64);
278 goto out;
279 }
280 }
281
282 region.start = l64;
283 region.end = l64 + sz64;
284
285 pcibios_bus_to_resource(dev->bus, res, ®ion);
286 pcibios_resource_to_bus(dev->bus, &inverted_region, res);
287
288
289
290
291
292
293
294
295
296
297
298
299 if (inverted_region.start != region.start) {
300 res->flags |= IORESOURCE_UNSET;
301 res->start = 0;
302 res->end = region.end - region.start;
303 dev_info(&dev->dev, "reg 0x%x: initial BAR value %#010llx invalid\n",
304 pos, (unsigned long long)region.start);
305 }
306
307 goto out;
308
309
310fail:
311 res->flags = 0;
312out:
313 if (res->flags)
314 dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
315
316 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
317}
318
319static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
320{
321 unsigned int pos, reg;
322
323 if (dev->non_compliant_bars)
324 return;
325
326 for (pos = 0; pos < howmany; pos++) {
327 struct resource *res = &dev->resource[pos];
328 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
329 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
330 }
331
332 if (rom) {
333 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
334 dev->rom_base_reg = rom;
335 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
336 IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
337 __pci_read_base(dev, pci_bar_mem32, res, rom);
338 }
339}
340
341static void pci_read_bridge_io(struct pci_bus *child)
342{
343 struct pci_dev *dev = child->self;
344 u8 io_base_lo, io_limit_lo;
345 unsigned long io_mask, io_granularity, base, limit;
346 struct pci_bus_region region;
347 struct resource *res;
348
349 io_mask = PCI_IO_RANGE_MASK;
350 io_granularity = 0x1000;
351 if (dev->io_window_1k) {
352
353 io_mask = PCI_IO_1K_RANGE_MASK;
354 io_granularity = 0x400;
355 }
356
357 res = child->resource[0];
358 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
359 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
360 base = (io_base_lo & io_mask) << 8;
361 limit = (io_limit_lo & io_mask) << 8;
362
363 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
364 u16 io_base_hi, io_limit_hi;
365
366 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
367 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
368 base |= ((unsigned long) io_base_hi << 16);
369 limit |= ((unsigned long) io_limit_hi << 16);
370 }
371
372 if (base <= limit) {
373 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
374 region.start = base;
375 region.end = limit + io_granularity - 1;
376 pcibios_bus_to_resource(dev->bus, res, ®ion);
377 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
378 }
379}
380
381static void pci_read_bridge_mmio(struct pci_bus *child)
382{
383 struct pci_dev *dev = child->self;
384 u16 mem_base_lo, mem_limit_lo;
385 unsigned long base, limit;
386 struct pci_bus_region region;
387 struct resource *res;
388
389 res = child->resource[1];
390 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
391 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
392 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
393 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
394 if (base <= limit) {
395 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
396 region.start = base;
397 region.end = limit + 0xfffff;
398 pcibios_bus_to_resource(dev->bus, res, ®ion);
399 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
400 }
401}
402
403static void pci_read_bridge_mmio_pref(struct pci_bus *child)
404{
405 struct pci_dev *dev = child->self;
406 u16 mem_base_lo, mem_limit_lo;
407 u64 base64, limit64;
408 pci_bus_addr_t base, limit;
409 struct pci_bus_region region;
410 struct resource *res;
411
412 res = child->resource[2];
413 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
414 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
415 base64 = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
416 limit64 = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
417
418 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
419 u32 mem_base_hi, mem_limit_hi;
420
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
426
427
428
429 if (mem_base_hi <= mem_limit_hi) {
430 base64 |= (u64) mem_base_hi << 32;
431 limit64 |= (u64) mem_limit_hi << 32;
432 }
433 }
434
435 base = (pci_bus_addr_t) base64;
436 limit = (pci_bus_addr_t) limit64;
437
438 if (base != base64) {
439 dev_err(&dev->dev, "can't handle bridge window above 4GB (bus address %#010llx)\n",
440 (unsigned long long) base64);
441 return;
442 }
443
444 if (base <= limit) {
445 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
446 IORESOURCE_MEM | IORESOURCE_PREFETCH;
447 if (res->flags & PCI_PREF_RANGE_TYPE_64)
448 res->flags |= IORESOURCE_MEM_64;
449 region.start = base;
450 region.end = limit + 0xfffff;
451 pcibios_bus_to_resource(dev->bus, res, ®ion);
452 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
453 }
454}
455
456void pci_read_bridge_bases(struct pci_bus *child)
457{
458 struct pci_dev *dev = child->self;
459 struct resource *res;
460 int i;
461
462 if (pci_is_root_bus(child))
463 return;
464
465 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
466 &child->busn_res,
467 dev->transparent ? " (subtractive decode)" : "");
468
469 pci_bus_remove_resources(child);
470 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
471 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
472
473 pci_read_bridge_io(child);
474 pci_read_bridge_mmio(child);
475 pci_read_bridge_mmio_pref(child);
476
477 if (dev->transparent) {
478 pci_bus_for_each_resource(child->parent, res, i) {
479 if (res && res->flags) {
480 pci_bus_add_resource(child, res,
481 PCI_SUBTRACTIVE_DECODE);
482 dev_printk(KERN_DEBUG, &dev->dev,
483 " bridge window %pR (subtractive decode)\n",
484 res);
485 }
486 }
487 }
488}
489
490static struct pci_bus *pci_alloc_bus(struct pci_bus *parent)
491{
492 struct pci_bus *b;
493
494 b = kzalloc(sizeof(*b), GFP_KERNEL);
495 if (!b)
496 return NULL;
497
498 INIT_LIST_HEAD(&b->node);
499 INIT_LIST_HEAD(&b->children);
500 INIT_LIST_HEAD(&b->devices);
501 INIT_LIST_HEAD(&b->slots);
502 INIT_LIST_HEAD(&b->resources);
503 b->max_bus_speed = PCI_SPEED_UNKNOWN;
504 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
505#ifdef CONFIG_PCI_DOMAINS_GENERIC
506 if (parent)
507 b->domain_nr = parent->domain_nr;
508#endif
509 return b;
510}
511
512static void pci_release_host_bridge_dev(struct device *dev)
513{
514 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
515
516 if (bridge->release_fn)
517 bridge->release_fn(bridge);
518
519 pci_free_resource_list(&bridge->windows);
520
521 kfree(bridge);
522}
523
524static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
525{
526 struct pci_host_bridge *bridge;
527
528 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
529 if (!bridge)
530 return NULL;
531
532 INIT_LIST_HEAD(&bridge->windows);
533 bridge->bus = b;
534 return bridge;
535}
536
537static const unsigned char pcix_bus_speed[] = {
538 PCI_SPEED_UNKNOWN,
539 PCI_SPEED_66MHz_PCIX,
540 PCI_SPEED_100MHz_PCIX,
541 PCI_SPEED_133MHz_PCIX,
542 PCI_SPEED_UNKNOWN,
543 PCI_SPEED_66MHz_PCIX_ECC,
544 PCI_SPEED_100MHz_PCIX_ECC,
545 PCI_SPEED_133MHz_PCIX_ECC,
546 PCI_SPEED_UNKNOWN,
547 PCI_SPEED_66MHz_PCIX_266,
548 PCI_SPEED_100MHz_PCIX_266,
549 PCI_SPEED_133MHz_PCIX_266,
550 PCI_SPEED_UNKNOWN,
551 PCI_SPEED_66MHz_PCIX_533,
552 PCI_SPEED_100MHz_PCIX_533,
553 PCI_SPEED_133MHz_PCIX_533
554};
555
556const unsigned char pcie_link_speed[] = {
557 PCI_SPEED_UNKNOWN,
558 PCIE_SPEED_2_5GT,
559 PCIE_SPEED_5_0GT,
560 PCIE_SPEED_8_0GT,
561 PCI_SPEED_UNKNOWN,
562 PCI_SPEED_UNKNOWN,
563 PCI_SPEED_UNKNOWN,
564 PCI_SPEED_UNKNOWN,
565 PCI_SPEED_UNKNOWN,
566 PCI_SPEED_UNKNOWN,
567 PCI_SPEED_UNKNOWN,
568 PCI_SPEED_UNKNOWN,
569 PCI_SPEED_UNKNOWN,
570 PCI_SPEED_UNKNOWN,
571 PCI_SPEED_UNKNOWN,
572 PCI_SPEED_UNKNOWN
573};
574
575void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
576{
577 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
578}
579EXPORT_SYMBOL_GPL(pcie_update_link_speed);
580
581static unsigned char agp_speeds[] = {
582 AGP_UNKNOWN,
583 AGP_1X,
584 AGP_2X,
585 AGP_4X,
586 AGP_8X
587};
588
589static enum pci_bus_speed agp_speed(int agp3, int agpstat)
590{
591 int index = 0;
592
593 if (agpstat & 4)
594 index = 3;
595 else if (agpstat & 2)
596 index = 2;
597 else if (agpstat & 1)
598 index = 1;
599 else
600 goto out;
601
602 if (agp3) {
603 index += 2;
604 if (index == 5)
605 index = 0;
606 }
607
608 out:
609 return agp_speeds[index];
610}
611
612static void pci_set_bus_speed(struct pci_bus *bus)
613{
614 struct pci_dev *bridge = bus->self;
615 int pos;
616
617 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
618 if (!pos)
619 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
620 if (pos) {
621 u32 agpstat, agpcmd;
622
623 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
624 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
625
626 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
627 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
628 }
629
630 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
631 if (pos) {
632 u16 status;
633 enum pci_bus_speed max;
634
635 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
636 &status);
637
638 if (status & PCI_X_SSTATUS_533MHZ) {
639 max = PCI_SPEED_133MHz_PCIX_533;
640 } else if (status & PCI_X_SSTATUS_266MHZ) {
641 max = PCI_SPEED_133MHz_PCIX_266;
642 } else if (status & PCI_X_SSTATUS_133MHZ) {
643 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2)
644 max = PCI_SPEED_133MHz_PCIX_ECC;
645 else
646 max = PCI_SPEED_133MHz_PCIX;
647 } else {
648 max = PCI_SPEED_66MHz_PCIX;
649 }
650
651 bus->max_bus_speed = max;
652 bus->cur_bus_speed = pcix_bus_speed[
653 (status & PCI_X_SSTATUS_FREQ) >> 6];
654
655 return;
656 }
657
658 if (pci_is_pcie(bridge)) {
659 u32 linkcap;
660 u16 linksta;
661
662 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
663 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
664
665 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
666 pcie_update_link_speed(bus, linksta);
667 }
668}
669
670static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
671{
672 struct irq_domain *d;
673
674
675
676
677
678 d = pci_host_bridge_of_msi_domain(bus);
679 if (!d)
680 d = pci_host_bridge_acpi_msi_domain(bus);
681
682#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
683
684
685
686
687 if (!d) {
688 struct fwnode_handle *fwnode = pci_root_bus_fwnode(bus);
689
690 if (fwnode)
691 d = irq_find_matching_fwnode(fwnode,
692 DOMAIN_BUS_PCI_MSI);
693 }
694#endif
695
696 return d;
697}
698
699static void pci_set_bus_msi_domain(struct pci_bus *bus)
700{
701 struct irq_domain *d;
702 struct pci_bus *b;
703
704
705
706
707
708
709 for (b = bus, d = NULL; !d && !pci_is_root_bus(b); b = b->parent) {
710 if (b->self)
711 d = dev_get_msi_domain(&b->self->dev);
712 }
713
714 if (!d)
715 d = pci_host_bridge_msi_domain(b);
716
717 dev_set_msi_domain(&bus->dev, d);
718}
719
720static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
721 struct pci_dev *bridge, int busnr)
722{
723 struct pci_bus *child;
724 int i;
725 int ret;
726
727
728
729
730 child = pci_alloc_bus(parent);
731 if (!child)
732 return NULL;
733
734 child->parent = parent;
735 child->ops = parent->ops;
736 child->msi = parent->msi;
737 child->sysdata = parent->sysdata;
738 child->bus_flags = parent->bus_flags;
739
740
741
742
743 child->dev.class = &pcibus_class;
744 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
745
746
747
748
749
750 child->number = child->busn_res.start = busnr;
751 child->primary = parent->busn_res.start;
752 child->busn_res.end = 0xff;
753
754 if (!bridge) {
755 child->dev.parent = parent->bridge;
756 goto add_dev;
757 }
758
759 child->self = bridge;
760 child->bridge = get_device(&bridge->dev);
761 child->dev.parent = child->bridge;
762 pci_set_bus_of_node(child);
763 pci_set_bus_speed(child);
764
765
766 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
767 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
768 child->resource[i]->name = child->name;
769 }
770 bridge->subordinate = child;
771
772add_dev:
773 pci_set_bus_msi_domain(child);
774 ret = device_register(&child->dev);
775 WARN_ON(ret < 0);
776
777 pcibios_add_bus(child);
778
779 if (child->ops->add_bus) {
780 ret = child->ops->add_bus(child);
781 if (WARN_ON(ret < 0))
782 dev_err(&child->dev, "failed to add bus: %d\n", ret);
783 }
784
785
786 pci_create_legacy_files(child);
787
788 return child;
789}
790
791struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
792 int busnr)
793{
794 struct pci_bus *child;
795
796 child = pci_alloc_child_bus(parent, dev, busnr);
797 if (child) {
798 down_write(&pci_bus_sem);
799 list_add_tail(&child->node, &parent->children);
800 up_write(&pci_bus_sem);
801 }
802 return child;
803}
804EXPORT_SYMBOL(pci_add_new_bus);
805
806static void pci_enable_crs(struct pci_dev *pdev)
807{
808 u16 root_cap = 0;
809
810
811 pcie_capability_read_word(pdev, PCI_EXP_RTCAP, &root_cap);
812 if (root_cap & PCI_EXP_RTCAP_CRSVIS)
813 pcie_capability_set_word(pdev, PCI_EXP_RTCTL,
814 PCI_EXP_RTCTL_CRSSVE);
815}
816
817
818
819
820
821
822
823
824
825
826
827int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
828{
829 struct pci_bus *child;
830 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
831 u32 buses, i, j = 0;
832 u16 bctl;
833 u8 primary, secondary, subordinate;
834 int broken = 0;
835
836
837
838
839
840 pm_runtime_get_sync(&dev->dev);
841
842 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
843 primary = buses & 0xFF;
844 secondary = (buses >> 8) & 0xFF;
845 subordinate = (buses >> 16) & 0xFF;
846
847 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
848 secondary, subordinate, pass);
849
850 if (!primary && (primary != bus->number) && secondary && subordinate) {
851 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
852 primary = bus->number;
853 }
854
855
856 if (!pass &&
857 (primary != bus->number || secondary <= bus->number ||
858 secondary > subordinate)) {
859 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
860 secondary, subordinate);
861 broken = 1;
862 }
863
864
865
866 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
867 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
868 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
869
870 pci_enable_crs(dev);
871
872 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
873 !is_cardbus && !broken) {
874 unsigned int cmax;
875
876
877
878
879 if (pass)
880 goto out;
881
882
883
884
885
886
887
888 child = pci_find_bus(pci_domain_nr(bus), secondary);
889 if (!child) {
890 child = pci_add_new_bus(bus, dev, secondary);
891 if (!child)
892 goto out;
893 child->primary = primary;
894 pci_bus_insert_busn_res(child, secondary, subordinate);
895 child->bridge_ctl = bctl;
896 }
897
898 cmax = pci_scan_child_bus(child);
899 if (cmax > subordinate)
900 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
901 subordinate, cmax);
902
903 if (subordinate > max)
904 max = subordinate;
905 } else {
906
907
908
909
910 if (!pass) {
911 if (pcibios_assign_all_busses() || broken || is_cardbus)
912
913
914
915
916
917
918 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
919 buses & ~0xffffff);
920 goto out;
921 }
922
923
924 pci_write_config_word(dev, PCI_STATUS, 0xffff);
925
926
927
928
929 child = pci_find_bus(pci_domain_nr(bus), max+1);
930 if (!child) {
931 child = pci_add_new_bus(bus, dev, max+1);
932 if (!child)
933 goto out;
934 pci_bus_insert_busn_res(child, max+1, 0xff);
935 }
936 max++;
937 buses = (buses & 0xff000000)
938 | ((unsigned int)(child->primary) << 0)
939 | ((unsigned int)(child->busn_res.start) << 8)
940 | ((unsigned int)(child->busn_res.end) << 16);
941
942
943
944
945
946 if (is_cardbus) {
947 buses &= ~0xff000000;
948 buses |= CARDBUS_LATENCY_TIMER << 24;
949 }
950
951
952
953
954 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
955
956 if (!is_cardbus) {
957 child->bridge_ctl = bctl;
958 max = pci_scan_child_bus(child);
959 } else {
960
961
962
963
964
965 for (i = 0; i < CARDBUS_RESERVE_BUSNR; i++) {
966 struct pci_bus *parent = bus;
967 if (pci_find_bus(pci_domain_nr(bus),
968 max+i+1))
969 break;
970 while (parent->parent) {
971 if ((!pcibios_assign_all_busses()) &&
972 (parent->busn_res.end > max) &&
973 (parent->busn_res.end <= max+i)) {
974 j = 1;
975 }
976 parent = parent->parent;
977 }
978 if (j) {
979
980
981
982
983
984 i /= 2;
985 break;
986 }
987 }
988 max += i;
989 }
990
991
992
993 pci_bus_update_busn_res_end(child, max);
994 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
995 }
996
997 sprintf(child->name,
998 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
999 pci_domain_nr(bus), child->number);
1000
1001
1002 while (bus->parent) {
1003 if ((child->busn_res.end > bus->busn_res.end) ||
1004 (child->number > bus->busn_res.end) ||
1005 (child->number < bus->number) ||
1006 (child->busn_res.end < bus->number)) {
1007 dev_info(&child->dev, "%pR %s hidden behind%s bridge %s %pR\n",
1008 &child->busn_res,
1009 (bus->number > child->busn_res.end &&
1010 bus->busn_res.end < child->number) ?
1011 "wholly" : "partially",
1012 bus->self->transparent ? " transparent" : "",
1013 dev_name(&bus->dev),
1014 &bus->busn_res);
1015 }
1016 bus = bus->parent;
1017 }
1018
1019out:
1020 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
1021
1022 pm_runtime_put(&dev->dev);
1023
1024 return max;
1025}
1026EXPORT_SYMBOL(pci_scan_bridge);
1027
1028
1029
1030
1031
1032static void pci_read_irq(struct pci_dev *dev)
1033{
1034 unsigned char irq;
1035
1036 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
1037 dev->pin = irq;
1038 if (irq)
1039 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
1040 dev->irq = irq;
1041}
1042
1043void set_pcie_port_type(struct pci_dev *pdev)
1044{
1045 int pos;
1046 u16 reg16;
1047 int type;
1048 struct pci_dev *parent;
1049
1050 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
1051 if (!pos)
1052 return;
1053 pdev->pcie_cap = pos;
1054 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, ®16);
1055 pdev->pcie_flags_reg = reg16;
1056 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, ®16);
1057 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
1058
1059
1060
1061
1062
1063
1064
1065 type = pci_pcie_type(pdev);
1066 if (type == PCI_EXP_TYPE_ROOT_PORT)
1067 pdev->has_secondary_link = 1;
1068 else if (type == PCI_EXP_TYPE_UPSTREAM ||
1069 type == PCI_EXP_TYPE_DOWNSTREAM) {
1070 parent = pci_upstream_bridge(pdev);
1071
1072
1073
1074
1075
1076 if (parent && !parent->has_secondary_link)
1077 pdev->has_secondary_link = 1;
1078 }
1079}
1080
1081void set_pcie_hotplug_bridge(struct pci_dev *pdev)
1082{
1083 u32 reg32;
1084
1085 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, ®32);
1086 if (reg32 & PCI_EXP_SLTCAP_HPC)
1087 pdev->is_hotplug_bridge = 1;
1088}
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
1107{
1108#ifdef CONFIG_PCI_QUIRKS
1109 int pos;
1110 u32 header, tmp;
1111
1112 pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
1113
1114 for (pos = PCI_CFG_SPACE_SIZE;
1115 pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
1116 if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
1117 || header != tmp)
1118 return false;
1119 }
1120
1121 return true;
1122#else
1123 return false;
1124#endif
1125}
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138static int pci_cfg_space_size_ext(struct pci_dev *dev)
1139{
1140 u32 status;
1141 int pos = PCI_CFG_SPACE_SIZE;
1142
1143 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1144 return PCI_CFG_SPACE_SIZE;
1145 if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
1146 return PCI_CFG_SPACE_SIZE;
1147
1148 return PCI_CFG_SPACE_EXP_SIZE;
1149}
1150
1151int pci_cfg_space_size(struct pci_dev *dev)
1152{
1153 int pos;
1154 u32 status;
1155 u16 class;
1156
1157 class = dev->class >> 8;
1158 if (class == PCI_CLASS_BRIDGE_HOST)
1159 return pci_cfg_space_size_ext(dev);
1160
1161 if (pci_is_pcie(dev))
1162 return pci_cfg_space_size_ext(dev);
1163
1164 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1165 if (!pos)
1166 return PCI_CFG_SPACE_SIZE;
1167
1168 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1169 if (status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ))
1170 return pci_cfg_space_size_ext(dev);
1171
1172 return PCI_CFG_SPACE_SIZE;
1173}
1174
1175#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
1176
1177static void pci_msi_setup_pci_dev(struct pci_dev *dev)
1178{
1179
1180
1181
1182
1183
1184 dev->msi_cap = pci_find_capability(dev, PCI_CAP_ID_MSI);
1185 if (dev->msi_cap)
1186 pci_msi_set_enable(dev, 0);
1187
1188 dev->msix_cap = pci_find_capability(dev, PCI_CAP_ID_MSIX);
1189 if (dev->msix_cap)
1190 pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
1191}
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203int pci_setup_device(struct pci_dev *dev)
1204{
1205 u32 class;
1206 u16 cmd;
1207 u8 hdr_type;
1208 int pos = 0;
1209 struct pci_bus_region region;
1210 struct resource *res;
1211
1212 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1213 return -EIO;
1214
1215 dev->sysdata = dev->bus->sysdata;
1216 dev->dev.parent = dev->bus->bridge;
1217 dev->dev.bus = &pci_bus_type;
1218 dev->hdr_type = hdr_type & 0x7f;
1219 dev->multifunction = !!(hdr_type & 0x80);
1220 dev->error_state = pci_channel_io_normal;
1221 set_pcie_port_type(dev);
1222
1223 pci_dev_assign_slot(dev);
1224
1225
1226 dev->dma_mask = 0xffffffff;
1227
1228 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1229 dev->bus->number, PCI_SLOT(dev->devfn),
1230 PCI_FUNC(dev->devfn));
1231
1232 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
1233 dev->revision = class & 0xff;
1234 dev->class = class >> 8;
1235
1236 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1237 dev->vendor, dev->device, dev->hdr_type, dev->class);
1238
1239
1240 dev->cfg_size = pci_cfg_space_size(dev);
1241
1242
1243 dev->current_state = PCI_UNKNOWN;
1244
1245
1246 pci_fixup_device(pci_fixup_early, dev);
1247
1248 class = dev->class >> 8;
1249
1250 if (dev->non_compliant_bars) {
1251 pci_read_config_word(dev, PCI_COMMAND, &cmd);
1252 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
1253 dev_info(&dev->dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
1254 cmd &= ~PCI_COMMAND_IO;
1255 cmd &= ~PCI_COMMAND_MEMORY;
1256 pci_write_config_word(dev, PCI_COMMAND, cmd);
1257 }
1258 }
1259
1260 switch (dev->hdr_type) {
1261 case PCI_HEADER_TYPE_NORMAL:
1262 if (class == PCI_CLASS_BRIDGE_PCI)
1263 goto bad;
1264 pci_read_irq(dev);
1265 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1266 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1267 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
1268
1269
1270
1271
1272
1273
1274
1275 if (class == PCI_CLASS_STORAGE_IDE) {
1276 u8 progif;
1277 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1278 if ((progif & 1) == 0) {
1279 region.start = 0x1F0;
1280 region.end = 0x1F7;
1281 res = &dev->resource[0];
1282 res->flags = LEGACY_IO_RESOURCE;
1283 pcibios_bus_to_resource(dev->bus, res, ®ion);
1284 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1285 res);
1286 region.start = 0x3F6;
1287 region.end = 0x3F6;
1288 res = &dev->resource[1];
1289 res->flags = LEGACY_IO_RESOURCE;
1290 pcibios_bus_to_resource(dev->bus, res, ®ion);
1291 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1292 res);
1293 }
1294 if ((progif & 4) == 0) {
1295 region.start = 0x170;
1296 region.end = 0x177;
1297 res = &dev->resource[2];
1298 res->flags = LEGACY_IO_RESOURCE;
1299 pcibios_bus_to_resource(dev->bus, res, ®ion);
1300 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1301 res);
1302 region.start = 0x376;
1303 region.end = 0x376;
1304 res = &dev->resource[3];
1305 res->flags = LEGACY_IO_RESOURCE;
1306 pcibios_bus_to_resource(dev->bus, res, ®ion);
1307 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1308 res);
1309 }
1310 }
1311 break;
1312
1313 case PCI_HEADER_TYPE_BRIDGE:
1314 if (class != PCI_CLASS_BRIDGE_PCI)
1315 goto bad;
1316
1317
1318
1319 pci_read_irq(dev);
1320 dev->transparent = ((dev->class & 0xff) == 1);
1321 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
1322 set_pcie_hotplug_bridge(dev);
1323 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1324 if (pos) {
1325 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1326 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1327 }
1328 break;
1329
1330 case PCI_HEADER_TYPE_CARDBUS:
1331 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1332 goto bad;
1333 pci_read_irq(dev);
1334 pci_read_bases(dev, 1, 0);
1335 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1336 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1337 break;
1338
1339 default:
1340 dev_err(&dev->dev, "unknown header type %02x, ignoring device\n",
1341 dev->hdr_type);
1342 return -EIO;
1343
1344 bad:
1345 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header type %02x)\n",
1346 dev->class, dev->hdr_type);
1347 dev->class = PCI_CLASS_NOT_DEFINED << 8;
1348 }
1349
1350
1351 return 0;
1352}
1353
1354static void pci_configure_mps(struct pci_dev *dev)
1355{
1356 struct pci_dev *bridge = pci_upstream_bridge(dev);
1357 int mps, p_mps, rc;
1358
1359 if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
1360 return;
1361
1362 mps = pcie_get_mps(dev);
1363 p_mps = pcie_get_mps(bridge);
1364
1365 if (mps == p_mps)
1366 return;
1367
1368 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1369 dev_warn(&dev->dev, "Max Payload Size %d, but upstream %s set to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
1370 mps, pci_name(bridge), p_mps);
1371 return;
1372 }
1373
1374
1375
1376
1377
1378 if (pcie_bus_config != PCIE_BUS_DEFAULT)
1379 return;
1380
1381 rc = pcie_set_mps(dev, p_mps);
1382 if (rc) {
1383 dev_warn(&dev->dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
1384 p_mps);
1385 return;
1386 }
1387
1388 dev_info(&dev->dev, "Max Payload Size set to %d (was %d, max %d)\n",
1389 p_mps, mps, 128 << dev->pcie_mpss);
1390}
1391
1392static struct hpp_type0 pci_default_type0 = {
1393 .revision = 1,
1394 .cache_line_size = 8,
1395 .latency_timer = 0x40,
1396 .enable_serr = 0,
1397 .enable_perr = 0,
1398};
1399
1400static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
1401{
1402 u16 pci_cmd, pci_bctl;
1403
1404 if (!hpp)
1405 hpp = &pci_default_type0;
1406
1407 if (hpp->revision > 1) {
1408 dev_warn(&dev->dev,
1409 "PCI settings rev %d not supported; using defaults\n",
1410 hpp->revision);
1411 hpp = &pci_default_type0;
1412 }
1413
1414 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp->cache_line_size);
1415 pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp->latency_timer);
1416 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
1417 if (hpp->enable_serr)
1418 pci_cmd |= PCI_COMMAND_SERR;
1419 if (hpp->enable_perr)
1420 pci_cmd |= PCI_COMMAND_PARITY;
1421 pci_write_config_word(dev, PCI_COMMAND, pci_cmd);
1422
1423
1424 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
1425 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
1426 hpp->latency_timer);
1427 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
1428 if (hpp->enable_serr)
1429 pci_bctl |= PCI_BRIDGE_CTL_SERR;
1430 if (hpp->enable_perr)
1431 pci_bctl |= PCI_BRIDGE_CTL_PARITY;
1432 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, pci_bctl);
1433 }
1434}
1435
1436static void program_hpp_type1(struct pci_dev *dev, struct hpp_type1 *hpp)
1437{
1438 if (hpp)
1439 dev_warn(&dev->dev, "PCI-X settings not supported\n");
1440}
1441
1442static bool pcie_root_rcb_set(struct pci_dev *dev)
1443{
1444 struct pci_dev *rp = pcie_find_root_port(dev);
1445 u16 lnkctl;
1446
1447 if (!rp)
1448 return false;
1449
1450 pcie_capability_read_word(rp, PCI_EXP_LNKCTL, &lnkctl);
1451 if (lnkctl & PCI_EXP_LNKCTL_RCB)
1452 return true;
1453
1454 return false;
1455}
1456
1457static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
1458{
1459 int pos;
1460 u32 reg32;
1461
1462 if (!hpp)
1463 return;
1464
1465 if (hpp->revision > 1) {
1466 dev_warn(&dev->dev, "PCIe settings rev %d not supported\n",
1467 hpp->revision);
1468 return;
1469 }
1470
1471
1472
1473
1474
1475
1476 hpp->pci_exp_devctl_and |= PCI_EXP_DEVCTL_PAYLOAD |
1477 PCI_EXP_DEVCTL_READRQ;
1478 hpp->pci_exp_devctl_or &= ~(PCI_EXP_DEVCTL_PAYLOAD |
1479 PCI_EXP_DEVCTL_READRQ);
1480
1481
1482 pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
1483 ~hpp->pci_exp_devctl_and, hpp->pci_exp_devctl_or);
1484
1485
1486 if (pcie_cap_has_lnkctl(dev)) {
1487
1488
1489
1490
1491
1492 hpp->pci_exp_lnkctl_and |= PCI_EXP_LNKCTL_RCB;
1493 hpp->pci_exp_lnkctl_or &= ~PCI_EXP_LNKCTL_RCB;
1494 if (pcie_root_rcb_set(dev))
1495 hpp->pci_exp_lnkctl_or |= PCI_EXP_LNKCTL_RCB;
1496
1497 pcie_capability_clear_and_set_word(dev, PCI_EXP_LNKCTL,
1498 ~hpp->pci_exp_lnkctl_and, hpp->pci_exp_lnkctl_or);
1499 }
1500
1501
1502 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
1503 if (!pos)
1504 return;
1505
1506
1507 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, ®32);
1508 reg32 = (reg32 & hpp->unc_err_mask_and) | hpp->unc_err_mask_or;
1509 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, reg32);
1510
1511
1512 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, ®32);
1513 reg32 = (reg32 & hpp->unc_err_sever_and) | hpp->unc_err_sever_or;
1514 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, reg32);
1515
1516
1517 pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, ®32);
1518 reg32 = (reg32 & hpp->cor_err_mask_and) | hpp->cor_err_mask_or;
1519 pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg32);
1520
1521
1522 pci_read_config_dword(dev, pos + PCI_ERR_CAP, ®32);
1523 reg32 = (reg32 & hpp->adv_err_cap_and) | hpp->adv_err_cap_or;
1524 pci_write_config_dword(dev, pos + PCI_ERR_CAP, reg32);
1525
1526
1527
1528
1529
1530
1531
1532}
1533
1534static void pci_configure_device(struct pci_dev *dev)
1535{
1536 struct hotplug_params hpp;
1537 int ret;
1538
1539 pci_configure_mps(dev);
1540
1541 memset(&hpp, 0, sizeof(hpp));
1542 ret = pci_get_hp_params(dev, &hpp);
1543 if (ret)
1544 return;
1545
1546 program_hpp_type2(dev, hpp.t2);
1547 program_hpp_type1(dev, hpp.t1);
1548 program_hpp_type0(dev, hpp.t0);
1549}
1550
1551static void pci_release_capabilities(struct pci_dev *dev)
1552{
1553 pci_vpd_release(dev);
1554 pci_iov_release(dev);
1555 pci_free_cap_save_buffers(dev);
1556}
1557
1558
1559
1560
1561
1562
1563
1564
1565static void pci_release_dev(struct device *dev)
1566{
1567 struct pci_dev *pci_dev;
1568
1569 pci_dev = to_pci_dev(dev);
1570 pci_release_capabilities(pci_dev);
1571 pci_release_of_node(pci_dev);
1572 pcibios_release_device(pci_dev);
1573 pci_bus_put(pci_dev->bus);
1574 kfree(pci_dev->driver_override);
1575 kfree(pci_dev->dma_alias_mask);
1576 kfree(pci_dev);
1577}
1578
1579struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
1580{
1581 struct pci_dev *dev;
1582
1583 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1584 if (!dev)
1585 return NULL;
1586
1587 INIT_LIST_HEAD(&dev->bus_list);
1588 dev->dev.type = &pci_dev_type;
1589 dev->bus = pci_bus_get(bus);
1590
1591 return dev;
1592}
1593EXPORT_SYMBOL(pci_alloc_dev);
1594
1595bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1596 int crs_timeout)
1597{
1598 int delay = 1;
1599
1600 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1601 return false;
1602
1603
1604 if (*l == 0xffffffff || *l == 0x00000000 ||
1605 *l == 0x0000ffff || *l == 0xffff0000)
1606 return false;
1607
1608
1609
1610
1611
1612
1613
1614 while ((*l & 0xffff) == 0x0001) {
1615 if (!crs_timeout)
1616 return false;
1617
1618 msleep(delay);
1619 delay *= 2;
1620 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1621 return false;
1622
1623 if (delay > crs_timeout) {
1624 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not responding\n",
1625 pci_domain_nr(bus), bus->number, PCI_SLOT(devfn),
1626 PCI_FUNC(devfn));
1627 return false;
1628 }
1629 }
1630
1631 return true;
1632}
1633EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1634
1635
1636
1637
1638
1639static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
1640{
1641 struct pci_dev *dev;
1642 u32 l;
1643
1644 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
1645 return NULL;
1646
1647 dev = pci_alloc_dev(bus);
1648 if (!dev)
1649 return NULL;
1650
1651 dev->devfn = devfn;
1652 dev->vendor = l & 0xffff;
1653 dev->device = (l >> 16) & 0xffff;
1654
1655 pci_set_of_node(dev);
1656
1657 if (pci_setup_device(dev)) {
1658 pci_bus_put(dev->bus);
1659 kfree(dev);
1660 return NULL;
1661 }
1662
1663 return dev;
1664}
1665
1666static void pci_init_capabilities(struct pci_dev *dev)
1667{
1668
1669 pci_ea_init(dev);
1670
1671
1672 pci_msi_setup_pci_dev(dev);
1673
1674
1675 pci_allocate_cap_save_buffers(dev);
1676
1677
1678 pci_pm_init(dev);
1679
1680
1681 pci_vpd_init(dev);
1682
1683
1684 pci_configure_ari(dev);
1685
1686
1687 pci_iov_init(dev);
1688
1689
1690 pci_ats_init(dev);
1691
1692
1693 pci_enable_acs(dev);
1694
1695
1696 pci_ptm_init(dev);
1697
1698
1699 pci_aer_init(dev);
1700}
1701
1702
1703
1704
1705
1706
1707static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev)
1708{
1709 struct irq_domain *d;
1710
1711
1712
1713
1714
1715 d = dev_get_msi_domain(&dev->dev);
1716 if (d)
1717 return d;
1718
1719
1720
1721
1722
1723 d = pci_msi_get_device_domain(dev);
1724 if (d)
1725 return d;
1726
1727 return NULL;
1728}
1729
1730static void pci_set_msi_domain(struct pci_dev *dev)
1731{
1732 struct irq_domain *d;
1733
1734
1735
1736
1737
1738
1739 d = pci_dev_msi_domain(dev);
1740 if (!d)
1741 d = dev_get_msi_domain(&dev->bus->dev);
1742
1743 dev_set_msi_domain(&dev->dev, d);
1744}
1745
1746
1747
1748
1749
1750
1751
1752
1753static void pci_dma_configure(struct pci_dev *dev)
1754{
1755 struct device *bridge = pci_get_host_bridge_device(dev);
1756
1757 if (IS_ENABLED(CONFIG_OF) &&
1758 bridge->parent && bridge->parent->of_node) {
1759 of_dma_configure(&dev->dev, bridge->parent->of_node);
1760 } else if (has_acpi_companion(bridge)) {
1761 struct acpi_device *adev = to_acpi_device_node(bridge->fwnode);
1762 enum dev_dma_attr attr = acpi_get_dma_attr(adev);
1763
1764 if (attr == DEV_DMA_NOT_SUPPORTED)
1765 dev_warn(&dev->dev, "DMA not supported.\n");
1766 else
1767 arch_setup_dma_ops(&dev->dev, 0, 0, NULL,
1768 attr == DEV_DMA_COHERENT);
1769 }
1770
1771 pci_put_host_bridge_device(bridge);
1772}
1773
1774void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
1775{
1776 int ret;
1777
1778 pci_configure_device(dev);
1779
1780 device_initialize(&dev->dev);
1781 dev->dev.release = pci_release_dev;
1782
1783 set_dev_node(&dev->dev, pcibus_to_node(bus));
1784 dev->dev.dma_mask = &dev->dma_mask;
1785 dev->dev.dma_parms = &dev->dma_parms;
1786 dev->dev.coherent_dma_mask = 0xffffffffull;
1787 pci_dma_configure(dev);
1788
1789 pci_set_dma_max_seg_size(dev, 65536);
1790 pci_set_dma_seg_boundary(dev, 0xffffffff);
1791
1792
1793 pci_fixup_device(pci_fixup_header, dev);
1794
1795
1796 pci_reassigndev_resource_alignment(dev);
1797
1798
1799 dev->state_saved = false;
1800
1801
1802 pci_init_capabilities(dev);
1803
1804
1805
1806
1807
1808 down_write(&pci_bus_sem);
1809 list_add_tail(&dev->bus_list, &bus->devices);
1810 up_write(&pci_bus_sem);
1811
1812 ret = pcibios_add_device(dev);
1813 WARN_ON(ret < 0);
1814
1815
1816 pci_set_msi_domain(dev);
1817
1818
1819 dev->match_driver = false;
1820 ret = device_add(&dev->dev);
1821 WARN_ON(ret < 0);
1822}
1823
1824struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
1825{
1826 struct pci_dev *dev;
1827
1828 dev = pci_get_slot(bus, devfn);
1829 if (dev) {
1830 pci_dev_put(dev);
1831 return dev;
1832 }
1833
1834 dev = pci_scan_device(bus, devfn);
1835 if (!dev)
1836 return NULL;
1837
1838 pci_device_add(dev, bus);
1839
1840 return dev;
1841}
1842EXPORT_SYMBOL(pci_scan_single_device);
1843
1844static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
1845{
1846 int pos;
1847 u16 cap = 0;
1848 unsigned next_fn;
1849
1850 if (pci_ari_enabled(bus)) {
1851 if (!dev)
1852 return 0;
1853 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1854 if (!pos)
1855 return 0;
1856
1857 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1858 next_fn = PCI_ARI_CAP_NFN(cap);
1859 if (next_fn <= fn)
1860 return 0;
1861
1862 return next_fn;
1863 }
1864
1865
1866 if (!dev || dev->multifunction)
1867 return (fn + 1) % 8;
1868
1869 return 0;
1870}
1871
1872static int only_one_child(struct pci_bus *bus)
1873{
1874 struct pci_dev *parent = bus->self;
1875
1876 if (!parent || !pci_is_pcie(parent))
1877 return 0;
1878 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
1879 return 1;
1880
1881
1882
1883
1884
1885
1886
1887 if (parent->has_secondary_link &&
1888 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
1889 return 1;
1890 return 0;
1891}
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904int pci_scan_slot(struct pci_bus *bus, int devfn)
1905{
1906 unsigned fn, nr = 0;
1907 struct pci_dev *dev;
1908
1909 if (only_one_child(bus) && (devfn > 0))
1910 return 0;
1911
1912 dev = pci_scan_single_device(bus, devfn);
1913 if (!dev)
1914 return 0;
1915 if (!dev->is_added)
1916 nr++;
1917
1918 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
1919 dev = pci_scan_single_device(bus, devfn + fn);
1920 if (dev) {
1921 if (!dev->is_added)
1922 nr++;
1923 dev->multifunction = 1;
1924 }
1925 }
1926
1927
1928 if (bus->self && nr)
1929 pcie_aspm_init_link_state(bus->self);
1930
1931 return nr;
1932}
1933EXPORT_SYMBOL(pci_scan_slot);
1934
1935static int pcie_find_smpss(struct pci_dev *dev, void *data)
1936{
1937 u8 *smpss = data;
1938
1939 if (!pci_is_pcie(dev))
1940 return 0;
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957 if (dev->is_hotplug_bridge &&
1958 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
1959 *smpss = 0;
1960
1961 if (*smpss > dev->pcie_mpss)
1962 *smpss = dev->pcie_mpss;
1963
1964 return 0;
1965}
1966
1967static void pcie_write_mps(struct pci_dev *dev, int mps)
1968{
1969 int rc;
1970
1971 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
1972 mps = 128 << dev->pcie_mpss;
1973
1974 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1975 dev->bus->self)
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988 mps = min(mps, pcie_get_mps(dev->bus->self));
1989 }
1990
1991 rc = pcie_set_mps(dev, mps);
1992 if (rc)
1993 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1994}
1995
1996static void pcie_write_mrrs(struct pci_dev *dev)
1997{
1998 int rc, mrrs;
1999
2000
2001
2002
2003 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
2004 return;
2005
2006
2007
2008
2009
2010
2011 mrrs = pcie_get_mps(dev);
2012
2013
2014
2015
2016
2017
2018 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
2019 rc = pcie_set_readrq(dev, mrrs);
2020 if (!rc)
2021 break;
2022
2023 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
2024 mrrs /= 2;
2025 }
2026
2027 if (mrrs < 128)
2028 dev_err(&dev->dev, "MRRS was unable to be configured with a safe value. If problems are experienced, try running with pci=pcie_bus_safe\n");
2029}
2030
2031static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
2032{
2033 int mps, orig_mps;
2034
2035 if (!pci_is_pcie(dev))
2036 return 0;
2037
2038 if (pcie_bus_config == PCIE_BUS_TUNE_OFF ||
2039 pcie_bus_config == PCIE_BUS_DEFAULT)
2040 return 0;
2041
2042 mps = 128 << *(u8 *)data;
2043 orig_mps = pcie_get_mps(dev);
2044
2045 pcie_write_mps(dev, mps);
2046 pcie_write_mrrs(dev);
2047
2048 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), Max Read Rq %4d\n",
2049 pcie_get_mps(dev), 128 << dev->pcie_mpss,
2050 orig_mps, pcie_get_readrq(dev));
2051
2052 return 0;
2053}
2054
2055
2056
2057
2058
2059void pcie_bus_configure_settings(struct pci_bus *bus)
2060{
2061 u8 smpss = 0;
2062
2063 if (!bus->self)
2064 return;
2065
2066 if (!pci_is_pcie(bus->self))
2067 return;
2068
2069
2070
2071
2072
2073 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
2074 smpss = 0;
2075
2076 if (pcie_bus_config == PCIE_BUS_SAFE) {
2077 smpss = bus->self->pcie_mpss;
2078
2079 pcie_find_smpss(bus->self, &smpss);
2080 pci_walk_bus(bus, pcie_find_smpss, &smpss);
2081 }
2082
2083 pcie_bus_configure_set(bus->self, &smpss);
2084 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
2085}
2086EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
2087
2088unsigned int pci_scan_child_bus(struct pci_bus *bus)
2089{
2090 unsigned int devfn, pass, max = bus->busn_res.start;
2091 struct pci_dev *dev;
2092
2093 dev_dbg(&bus->dev, "scanning bus\n");
2094
2095
2096 for (devfn = 0; devfn < 0x100; devfn += 8)
2097 pci_scan_slot(bus, devfn);
2098
2099
2100 max += pci_iov_bus_range(bus);
2101
2102
2103
2104
2105
2106 if (!bus->is_added) {
2107 dev_dbg(&bus->dev, "fixups for bus\n");
2108 pcibios_fixup_bus(bus);
2109 bus->is_added = 1;
2110 }
2111
2112 for (pass = 0; pass < 2; pass++)
2113 list_for_each_entry(dev, &bus->devices, bus_list) {
2114 if (pci_is_bridge(dev))
2115 max = pci_scan_bridge(bus, dev, max, pass);
2116 }
2117
2118
2119
2120
2121
2122 if (bus->self && bus->self->is_hotplug_bridge && pci_hotplug_bus_size) {
2123 if (max - bus->busn_res.start < pci_hotplug_bus_size - 1)
2124 max = bus->busn_res.start + pci_hotplug_bus_size - 1;
2125 }
2126
2127
2128
2129
2130
2131
2132
2133
2134 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
2135 return max;
2136}
2137EXPORT_SYMBOL_GPL(pci_scan_child_bus);
2138
2139
2140
2141
2142
2143
2144
2145
2146int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
2147{
2148 return 0;
2149}
2150
2151void __weak pcibios_add_bus(struct pci_bus *bus)
2152{
2153}
2154
2155void __weak pcibios_remove_bus(struct pci_bus *bus)
2156{
2157}
2158
2159struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
2160 struct pci_ops *ops, void *sysdata, struct list_head *resources)
2161{
2162 int error;
2163 struct pci_host_bridge *bridge;
2164 struct pci_bus *b, *b2;
2165 struct resource_entry *window, *n;
2166 struct resource *res;
2167 resource_size_t offset;
2168 char bus_addr[64];
2169 char *fmt;
2170
2171 b = pci_alloc_bus(NULL);
2172 if (!b)
2173 return NULL;
2174
2175 b->sysdata = sysdata;
2176 b->ops = ops;
2177 b->number = b->busn_res.start = bus;
2178#ifdef CONFIG_PCI_DOMAINS_GENERIC
2179 b->domain_nr = pci_bus_find_domain_nr(b, parent);
2180#endif
2181 b2 = pci_find_bus(pci_domain_nr(b), bus);
2182 if (b2) {
2183
2184 dev_dbg(&b2->dev, "bus already known\n");
2185 goto err_out;
2186 }
2187
2188 bridge = pci_alloc_host_bridge(b);
2189 if (!bridge)
2190 goto err_out;
2191
2192 bridge->dev.parent = parent;
2193 bridge->dev.release = pci_release_host_bridge_dev;
2194 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
2195 error = pcibios_root_bridge_prepare(bridge);
2196 if (error) {
2197 kfree(bridge);
2198 goto err_out;
2199 }
2200
2201 error = device_register(&bridge->dev);
2202 if (error) {
2203 put_device(&bridge->dev);
2204 goto err_out;
2205 }
2206 b->bridge = get_device(&bridge->dev);
2207 device_enable_async_suspend(b->bridge);
2208 pci_set_bus_of_node(b);
2209 pci_set_bus_msi_domain(b);
2210
2211 if (!parent)
2212 set_dev_node(b->bridge, pcibus_to_node(b));
2213
2214 b->dev.class = &pcibus_class;
2215 b->dev.parent = b->bridge;
2216 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
2217 error = device_register(&b->dev);
2218 if (error)
2219 goto class_dev_reg_err;
2220
2221 pcibios_add_bus(b);
2222
2223
2224 pci_create_legacy_files(b);
2225
2226 if (parent)
2227 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
2228 else
2229 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
2230
2231
2232 resource_list_for_each_entry_safe(window, n, resources) {
2233 list_move_tail(&window->node, &bridge->windows);
2234 res = window->res;
2235 offset = window->offset;
2236 if (res->flags & IORESOURCE_BUS)
2237 pci_bus_insert_busn_res(b, bus, res->end);
2238 else
2239 pci_bus_add_resource(b, res, 0);
2240 if (offset) {
2241 if (resource_type(res) == IORESOURCE_IO)
2242 fmt = " (bus address [%#06llx-%#06llx])";
2243 else
2244 fmt = " (bus address [%#010llx-%#010llx])";
2245 snprintf(bus_addr, sizeof(bus_addr), fmt,
2246 (unsigned long long) (res->start - offset),
2247 (unsigned long long) (res->end - offset));
2248 } else
2249 bus_addr[0] = '\0';
2250 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
2251 }
2252
2253 down_write(&pci_bus_sem);
2254 list_add_tail(&b->node, &pci_root_buses);
2255 up_write(&pci_bus_sem);
2256
2257 return b;
2258
2259class_dev_reg_err:
2260 put_device(&bridge->dev);
2261 device_unregister(&bridge->dev);
2262err_out:
2263 kfree(b);
2264 return NULL;
2265}
2266EXPORT_SYMBOL_GPL(pci_create_root_bus);
2267
2268int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
2269{
2270 struct resource *res = &b->busn_res;
2271 struct resource *parent_res, *conflict;
2272
2273 res->start = bus;
2274 res->end = bus_max;
2275 res->flags = IORESOURCE_BUS;
2276
2277 if (!pci_is_root_bus(b))
2278 parent_res = &b->parent->busn_res;
2279 else {
2280 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
2281 res->flags |= IORESOURCE_PCI_FIXED;
2282 }
2283
2284 conflict = request_resource_conflict(parent_res, res);
2285
2286 if (conflict)
2287 dev_printk(KERN_DEBUG, &b->dev,
2288 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
2289 res, pci_is_root_bus(b) ? "domain " : "",
2290 parent_res, conflict->name, conflict);
2291
2292 return conflict == NULL;
2293}
2294
2295int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
2296{
2297 struct resource *res = &b->busn_res;
2298 struct resource old_res = *res;
2299 resource_size_t size;
2300 int ret;
2301
2302 if (res->start > bus_max)
2303 return -EINVAL;
2304
2305 size = bus_max - res->start + 1;
2306 ret = adjust_resource(res, res->start, size);
2307 dev_printk(KERN_DEBUG, &b->dev,
2308 "busn_res: %pR end %s updated to %02x\n",
2309 &old_res, ret ? "can not be" : "is", bus_max);
2310
2311 if (!ret && !res->parent)
2312 pci_bus_insert_busn_res(b, res->start, res->end);
2313
2314 return ret;
2315}
2316
2317void pci_bus_release_busn_res(struct pci_bus *b)
2318{
2319 struct resource *res = &b->busn_res;
2320 int ret;
2321
2322 if (!res->flags || !res->parent)
2323 return;
2324
2325 ret = release_resource(res);
2326 dev_printk(KERN_DEBUG, &b->dev,
2327 "busn_res: %pR %s released\n",
2328 res, ret ? "can not be" : "is");
2329}
2330
2331struct pci_bus *pci_scan_root_bus_msi(struct device *parent, int bus,
2332 struct pci_ops *ops, void *sysdata,
2333 struct list_head *resources, struct msi_controller *msi)
2334{
2335 struct resource_entry *window;
2336 bool found = false;
2337 struct pci_bus *b;
2338 int max;
2339
2340 resource_list_for_each_entry(window, resources)
2341 if (window->res->flags & IORESOURCE_BUS) {
2342 found = true;
2343 break;
2344 }
2345
2346 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
2347 if (!b)
2348 return NULL;
2349
2350 b->msi = msi;
2351
2352 if (!found) {
2353 dev_info(&b->dev,
2354 "No busn resource found for root bus, will use [bus %02x-ff]\n",
2355 bus);
2356 pci_bus_insert_busn_res(b, bus, 255);
2357 }
2358
2359 max = pci_scan_child_bus(b);
2360
2361 if (!found)
2362 pci_bus_update_busn_res_end(b, max);
2363
2364 return b;
2365}
2366
2367struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
2368 struct pci_ops *ops, void *sysdata, struct list_head *resources)
2369{
2370 return pci_scan_root_bus_msi(parent, bus, ops, sysdata, resources,
2371 NULL);
2372}
2373EXPORT_SYMBOL(pci_scan_root_bus);
2374
2375struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
2376 void *sysdata)
2377{
2378 LIST_HEAD(resources);
2379 struct pci_bus *b;
2380
2381 pci_add_resource(&resources, &ioport_resource);
2382 pci_add_resource(&resources, &iomem_resource);
2383 pci_add_resource(&resources, &busn_resource);
2384 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
2385 if (b) {
2386 pci_scan_child_bus(b);
2387 } else {
2388 pci_free_resource_list(&resources);
2389 }
2390 return b;
2391}
2392EXPORT_SYMBOL(pci_scan_bus);
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
2406{
2407 unsigned int max;
2408 struct pci_bus *bus = bridge->subordinate;
2409
2410 max = pci_scan_child_bus(bus);
2411
2412 pci_assign_unassigned_bridge_resources(bridge);
2413
2414 pci_bus_add_devices(bus);
2415
2416 return max;
2417}
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428unsigned int pci_rescan_bus(struct pci_bus *bus)
2429{
2430 unsigned int max;
2431
2432 max = pci_scan_child_bus(bus);
2433 pci_assign_unassigned_bus_resources(bus);
2434 pci_bus_add_devices(bus);
2435
2436 return max;
2437}
2438EXPORT_SYMBOL_GPL(pci_rescan_bus);
2439
2440
2441
2442
2443
2444static DEFINE_MUTEX(pci_rescan_remove_lock);
2445
2446void pci_lock_rescan_remove(void)
2447{
2448 mutex_lock(&pci_rescan_remove_lock);
2449}
2450EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2451
2452void pci_unlock_rescan_remove(void)
2453{
2454 mutex_unlock(&pci_rescan_remove_lock);
2455}
2456EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2457
2458static int __init pci_sort_bf_cmp(const struct device *d_a,
2459 const struct device *d_b)
2460{
2461 const struct pci_dev *a = to_pci_dev(d_a);
2462 const struct pci_dev *b = to_pci_dev(d_b);
2463
2464 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2465 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2466
2467 if (a->bus->number < b->bus->number) return -1;
2468 else if (a->bus->number > b->bus->number) return 1;
2469
2470 if (a->devfn < b->devfn) return -1;
2471 else if (a->devfn > b->devfn) return 1;
2472
2473 return 0;
2474}
2475
2476void __init pci_sort_breadthfirst(void)
2477{
2478 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
2479}
2480