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