blob: afae3bf405fa53ff49a04d30925850392c091545 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * probe.c - PCI detection and setup code
3 */
4
5#include <linux/kernel.h>
6#include <linux/delay.h>
7#include <linux/init.h>
8#include <linux/pci.h>
9#include <linux/slab.h>
10#include <linux/module.h>
11#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080012#include <linux/pci-aspm.h>
Bjorn Helgaas284f5f92012-04-30 15:21:02 -060013#include <asm-generic/pci-bridge.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090014#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
17#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070018
Stephen Hemminger0b950f02014-01-10 17:14:48 -070019static struct resource busn_resource = {
Yinghai Lu67cdc822012-05-17 18:51:12 -070020 .name = "PCI busn",
21 .start = 0,
22 .end = 255,
23 .flags = IORESOURCE_BUS,
24};
25
Linus Torvalds1da177e2005-04-16 15:20:36 -070026/* Ugh. Need to stop exporting this to modules. */
27LIST_HEAD(pci_root_buses);
28EXPORT_SYMBOL(pci_root_buses);
29
Yinghai Lu5cc62c22012-05-17 18:51:11 -070030static LIST_HEAD(pci_domain_busn_res_list);
31
32struct pci_domain_busn_res {
33 struct list_head list;
34 struct resource res;
35 int domain_nr;
36};
37
38static struct resource *get_pci_domain_busn_res(int domain_nr)
39{
40 struct pci_domain_busn_res *r;
41
42 list_for_each_entry(r, &pci_domain_busn_res_list, list)
43 if (r->domain_nr == domain_nr)
44 return &r->res;
45
46 r = kzalloc(sizeof(*r), GFP_KERNEL);
47 if (!r)
48 return NULL;
49
50 r->domain_nr = domain_nr;
51 r->res.start = 0;
52 r->res.end = 0xff;
53 r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
54
55 list_add_tail(&r->list, &pci_domain_busn_res_list);
56
57 return &r->res;
58}
59
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080060static int find_anything(struct device *dev, void *data)
61{
62 return 1;
63}
Linus Torvalds1da177e2005-04-16 15:20:36 -070064
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070065/*
66 * Some device drivers need know if pci is initiated.
67 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080068 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070069 */
70int no_pci_devices(void)
71{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080072 struct device *dev;
73 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070074
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080075 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
76 no_devices = (dev == NULL);
77 put_device(dev);
78 return no_devices;
79}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070080EXPORT_SYMBOL(no_pci_devices);
81
Linus Torvalds1da177e2005-04-16 15:20:36 -070082/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070083 * PCI Bus Class
84 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040085static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -070086{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040087 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -070088
89 if (pci_bus->bridge)
90 put_device(pci_bus->bridge);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -070091 pci_bus_remove_resources(pci_bus);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +100092 pci_release_bus_of_node(pci_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -070093 kfree(pci_bus);
94}
95
96static struct class pcibus_class = {
97 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040098 .dev_release = &release_pcibus_dev,
Greg Kroah-Hartman56039e62013-07-24 15:05:17 -070099 .dev_groups = pcibus_groups,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700100};
101
102static int __init pcibus_class_init(void)
103{
104 return class_register(&pcibus_class);
105}
106postcore_initcall(pcibus_class_init);
107
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400108static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800109{
110 u64 size = mask & maxbase; /* Find the significant bits */
111 if (!size)
112 return 0;
113
114 /* Get the lowest of them to find the decode size, and
115 from that the extent. */
116 size = (size & ~(size-1)) - 1;
117
118 /* base == maxbase can be valid only if the BAR has
119 already been programmed with all 1s. */
120 if (base == maxbase && ((base | size) & mask) != mask)
121 return 0;
122
123 return size;
124}
125
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600126static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800127{
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600128 u32 mem_type;
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600129 unsigned long flags;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600130
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400131 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600132 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
133 flags |= IORESOURCE_IO;
134 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400135 }
136
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600137 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
138 flags |= IORESOURCE_MEM;
139 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
140 flags |= IORESOURCE_PREFETCH;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400141
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600142 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
143 switch (mem_type) {
144 case PCI_BASE_ADDRESS_MEM_TYPE_32:
145 break;
146 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600147 /* 1M mem BAR treated as 32-bit BAR */
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600148 break;
149 case PCI_BASE_ADDRESS_MEM_TYPE_64:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600150 flags |= IORESOURCE_MEM_64;
151 break;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600152 default:
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600153 /* mem unknown type treated as 32-bit BAR */
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600154 break;
155 }
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600156 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400157}
158
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100159#define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
160
Yu Zhao0b400c72008-11-22 02:40:40 +0800161/**
162 * pci_read_base - read a PCI BAR
163 * @dev: the PCI device
164 * @type: type of the BAR
165 * @res: resource buffer to be filled in
166 * @pos: BAR position in the config space
167 *
168 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400169 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800170int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400171 struct resource *res, unsigned int pos)
172{
173 u32 l, sz, mask;
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600174 u64 l64, sz64, mask64;
Jacob Pan253d2e52010-07-16 10:19:22 -0700175 u16 orig_cmd;
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800176 struct pci_bus_region region, inverted_region;
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600177 bool bar_too_big = false, bar_disabled = false;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400178
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200179 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400180
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600181 /* No printks while decoding is disabled! */
Jacob Pan253d2e52010-07-16 10:19:22 -0700182 if (!dev->mmio_always_on) {
183 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100184 if (orig_cmd & PCI_COMMAND_DECODE_ENABLE) {
185 pci_write_config_word(dev, PCI_COMMAND,
186 orig_cmd & ~PCI_COMMAND_DECODE_ENABLE);
187 }
Jacob Pan253d2e52010-07-16 10:19:22 -0700188 }
189
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400190 res->name = pci_name(dev);
191
192 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200193 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400194 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.
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600199 * 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.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400202 */
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600203 if (!sz || sz == 0xffffffff)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400204 goto fail;
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) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600214 res->flags = decode_bar(dev, l);
215 res->flags |= IORESOURCE_SIZEALIGN;
216 if (res->flags & IORESOURCE_IO) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400217 l &= PCI_BASE_ADDRESS_IO_MASK;
David S. Miller5aceca92011-05-23 17:12:22 -0700218 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400219 } else {
220 l &= PCI_BASE_ADDRESS_MEM_MASK;
221 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
222 }
223 } else {
224 res->flags |= (l & IORESOURCE_ROM_ENABLE);
225 l &= PCI_ROM_ADDRESS_MASK;
226 mask = (u32)PCI_ROM_ADDRESS_MASK;
227 }
228
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600229 if (res->flags & IORESOURCE_MEM_64) {
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600230 l64 = l;
231 sz64 = sz;
232 mask64 = mask | (u64)~0 << 32;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400233
234 pci_read_config_dword(dev, pos + 4, &l);
235 pci_write_config_dword(dev, pos + 4, ~0);
236 pci_read_config_dword(dev, pos + 4, &sz);
237 pci_write_config_dword(dev, pos + 4, l);
238
239 l64 |= ((u64)l << 32);
240 sz64 |= ((u64)sz << 32);
241
242 sz64 = pci_size(l64, sz64, mask64);
243
244 if (!sz64)
245 goto fail;
246
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600247 if ((sizeof(dma_addr_t) < 8 || sizeof(resource_size_t) < 8) &&
248 sz64 > 0x100000000ULL) {
249 res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
250 res->start = 0;
251 res->end = 0;
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600252 bar_too_big = true;
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600253 goto out;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600254 }
255
Bjorn Helgaasd1a313e2014-04-29 18:33:09 -0600256 if ((sizeof(dma_addr_t) < 8) && l) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400257 /* Address above 32-bit boundary; disable the BAR */
258 pci_write_config_dword(dev, pos, 0);
259 pci_write_config_dword(dev, pos + 4, 0);
Bjorn Helgaasc83bd902014-02-26 11:26:00 -0700260 res->flags |= IORESOURCE_UNSET;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700261 region.start = 0;
262 region.end = sz64;
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600263 bar_disabled = true;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400264 } else {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700265 region.start = l64;
266 region.end = l64 + sz64;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400267 }
268 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600269 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400270
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600271 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400272 goto fail;
273
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700274 region.start = l;
275 region.end = l + sz;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400276 }
277
Yinghai Lufc279852013-12-09 22:54:40 -0800278 pcibios_bus_to_resource(dev->bus, res, &region);
279 pcibios_resource_to_bus(dev->bus, &inverted_region, res);
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800280
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) {
293 dev_info(&dev->dev, "reg 0x%x: initial BAR value %pa invalid; forcing reassignment\n",
294 pos, &region.start);
295 res->flags |= IORESOURCE_UNSET;
296 res->end -= res->start;
297 res->start = 0;
298 }
Kevin Hao96ddef22013-05-25 19:36:26 +0800299
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600300 goto out;
301
302
303fail:
304 res->flags = 0;
305out:
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100306 if (!dev->mmio_always_on &&
307 (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
Bjorn Helgaasbbffe432012-07-06 12:08:18 -0600308 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
309
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600310 if (bar_too_big)
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600311 dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
312 pos, (unsigned long long) sz64);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600313 if (res->flags && !bar_disabled)
Kevin Hao33963e302013-05-25 19:36:25 +0800314 dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600315
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600316 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800317}
318
Linus Torvalds1da177e2005-04-16 15:20:36 -0700319static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
320{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400321 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700322
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400323 for (pos = 0; pos < howmany; pos++) {
324 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700325 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400326 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700327 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400328
Linus Torvalds1da177e2005-04-16 15:20:36 -0700329 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400330 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700331 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400332 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
333 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
334 IORESOURCE_SIZEALIGN;
335 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700336 }
337}
338
Bill Pemberton15856ad2012-11-21 15:35:00 -0500339static void pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700340{
341 struct pci_dev *dev = child->self;
342 u8 io_base_lo, io_limit_lo;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600343 unsigned long io_mask, io_granularity, base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700344 struct pci_bus_region region;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600345 struct resource *res;
346
347 io_mask = PCI_IO_RANGE_MASK;
348 io_granularity = 0x1000;
349 if (dev->io_window_1k) {
350 /* Support 1K I/O space granularity */
351 io_mask = PCI_IO_1K_RANGE_MASK;
352 io_granularity = 0x400;
353 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700354
Linus Torvalds1da177e2005-04-16 15:20:36 -0700355 res = child->resource[0];
356 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
357 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600358 base = (io_base_lo & io_mask) << 8;
359 limit = (io_limit_lo & io_mask) << 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700360
361 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
362 u16 io_base_hi, io_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600363
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
365 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600366 base |= ((unsigned long) io_base_hi << 16);
367 limit |= ((unsigned long) io_limit_hi << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700368 }
369
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600370 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700371 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700372 region.start = base;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600373 region.end = limit + io_granularity - 1;
Yinghai Lufc279852013-12-09 22:54:40 -0800374 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600375 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700376 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700377}
378
Bill Pemberton15856ad2012-11-21 15:35:00 -0500379static void pci_read_bridge_mmio(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700380{
381 struct pci_dev *dev = child->self;
382 u16 mem_base_lo, mem_limit_lo;
383 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700384 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700385 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700386
387 res = child->resource[1];
388 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
389 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600390 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
391 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600392 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700393 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700394 region.start = base;
395 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800396 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600397 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700398 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700399}
400
Bill Pemberton15856ad2012-11-21 15:35:00 -0500401static void pci_read_bridge_mmio_pref(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700402{
403 struct pci_dev *dev = child->self;
404 u16 mem_base_lo, mem_limit_lo;
405 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700406 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700407 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700408
409 res = child->resource[2];
410 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
411 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600412 base = ((unsigned long) mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
413 limit = ((unsigned long) mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700414
415 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
416 u32 mem_base_hi, mem_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600417
Linus Torvalds1da177e2005-04-16 15:20:36 -0700418 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
419 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
420
421 /*
422 * Some bridges set the base > limit by default, and some
423 * (broken) BIOSes do not initialize them. If we find
424 * this, just assume they are not being used.
425 */
426 if (mem_base_hi <= mem_limit_hi) {
427#if BITS_PER_LONG == 64
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600428 base |= ((unsigned long) mem_base_hi) << 32;
429 limit |= ((unsigned long) mem_limit_hi) << 32;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700430#else
431 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600432 dev_err(&dev->dev, "can't handle 64-bit "
433 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700434 return;
435 }
436#endif
437 }
438 }
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600439 if (base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700440 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
441 IORESOURCE_MEM | IORESOURCE_PREFETCH;
442 if (res->flags & PCI_PREF_RANGE_TYPE_64)
443 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700444 region.start = base;
445 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800446 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600447 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700448 }
449}
450
Bill Pemberton15856ad2012-11-21 15:35:00 -0500451void pci_read_bridge_bases(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700452{
453 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700454 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700455 int i;
456
457 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
458 return;
459
Yinghai Lub918c622012-05-17 18:51:11 -0700460 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
461 &child->busn_res,
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700462 dev->transparent ? " (subtractive decode)" : "");
463
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700464 pci_bus_remove_resources(child);
465 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
466 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
467
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700468 pci_read_bridge_io(child);
469 pci_read_bridge_mmio(child);
470 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700471
472 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700473 pci_bus_for_each_resource(child->parent, res, i) {
474 if (res) {
475 pci_bus_add_resource(child, res,
476 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700477 dev_printk(KERN_DEBUG, &dev->dev,
478 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700479 res);
480 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700481 }
482 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700483}
484
Bjorn Helgaas05013482013-06-05 14:22:11 -0600485static struct pci_bus *pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700486{
487 struct pci_bus *b;
488
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100489 b = kzalloc(sizeof(*b), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600490 if (!b)
491 return NULL;
492
493 INIT_LIST_HEAD(&b->node);
494 INIT_LIST_HEAD(&b->children);
495 INIT_LIST_HEAD(&b->devices);
496 INIT_LIST_HEAD(&b->slots);
497 INIT_LIST_HEAD(&b->resources);
498 b->max_bus_speed = PCI_SPEED_UNKNOWN;
499 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700500 return b;
501}
502
Jiang Liu70efde22013-06-07 16:16:51 -0600503static void pci_release_host_bridge_dev(struct device *dev)
504{
505 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
506
507 if (bridge->release_fn)
508 bridge->release_fn(bridge);
509
510 pci_free_resource_list(&bridge->windows);
511
512 kfree(bridge);
513}
514
Yinghai Lu7b543662012-04-02 18:31:53 -0700515static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
516{
517 struct pci_host_bridge *bridge;
518
519 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600520 if (!bridge)
521 return NULL;
Yinghai Lu7b543662012-04-02 18:31:53 -0700522
Bjorn Helgaas05013482013-06-05 14:22:11 -0600523 INIT_LIST_HEAD(&bridge->windows);
524 bridge->bus = b;
Yinghai Lu7b543662012-04-02 18:31:53 -0700525 return bridge;
526}
527
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700528static const unsigned char pcix_bus_speed[] = {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500529 PCI_SPEED_UNKNOWN, /* 0 */
530 PCI_SPEED_66MHz_PCIX, /* 1 */
531 PCI_SPEED_100MHz_PCIX, /* 2 */
532 PCI_SPEED_133MHz_PCIX, /* 3 */
533 PCI_SPEED_UNKNOWN, /* 4 */
534 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
535 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
536 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
537 PCI_SPEED_UNKNOWN, /* 8 */
538 PCI_SPEED_66MHz_PCIX_266, /* 9 */
539 PCI_SPEED_100MHz_PCIX_266, /* A */
540 PCI_SPEED_133MHz_PCIX_266, /* B */
541 PCI_SPEED_UNKNOWN, /* C */
542 PCI_SPEED_66MHz_PCIX_533, /* D */
543 PCI_SPEED_100MHz_PCIX_533, /* E */
544 PCI_SPEED_133MHz_PCIX_533 /* F */
545};
546
Jacob Keller343e51a2013-07-31 06:53:16 +0000547const unsigned char pcie_link_speed[] = {
Matthew Wilcox3749c512009-12-13 08:11:32 -0500548 PCI_SPEED_UNKNOWN, /* 0 */
549 PCIE_SPEED_2_5GT, /* 1 */
550 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500551 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500552 PCI_SPEED_UNKNOWN, /* 4 */
553 PCI_SPEED_UNKNOWN, /* 5 */
554 PCI_SPEED_UNKNOWN, /* 6 */
555 PCI_SPEED_UNKNOWN, /* 7 */
556 PCI_SPEED_UNKNOWN, /* 8 */
557 PCI_SPEED_UNKNOWN, /* 9 */
558 PCI_SPEED_UNKNOWN, /* A */
559 PCI_SPEED_UNKNOWN, /* B */
560 PCI_SPEED_UNKNOWN, /* C */
561 PCI_SPEED_UNKNOWN, /* D */
562 PCI_SPEED_UNKNOWN, /* E */
563 PCI_SPEED_UNKNOWN /* F */
564};
565
566void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
567{
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700568 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
Matthew Wilcox3749c512009-12-13 08:11:32 -0500569}
570EXPORT_SYMBOL_GPL(pcie_update_link_speed);
571
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500572static unsigned char agp_speeds[] = {
573 AGP_UNKNOWN,
574 AGP_1X,
575 AGP_2X,
576 AGP_4X,
577 AGP_8X
578};
579
580static enum pci_bus_speed agp_speed(int agp3, int agpstat)
581{
582 int index = 0;
583
584 if (agpstat & 4)
585 index = 3;
586 else if (agpstat & 2)
587 index = 2;
588 else if (agpstat & 1)
589 index = 1;
590 else
591 goto out;
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700592
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500593 if (agp3) {
594 index += 2;
595 if (index == 5)
596 index = 0;
597 }
598
599 out:
600 return agp_speeds[index];
601}
602
603
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500604static void pci_set_bus_speed(struct pci_bus *bus)
605{
606 struct pci_dev *bridge = bus->self;
607 int pos;
608
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500609 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
610 if (!pos)
611 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
612 if (pos) {
613 u32 agpstat, agpcmd;
614
615 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
616 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
617
618 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
619 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
620 }
621
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500622 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
623 if (pos) {
624 u16 status;
625 enum pci_bus_speed max;
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500626
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700627 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
628 &status);
629
630 if (status & PCI_X_SSTATUS_533MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500631 max = PCI_SPEED_133MHz_PCIX_533;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700632 } else if (status & PCI_X_SSTATUS_266MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500633 max = PCI_SPEED_133MHz_PCIX_266;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700634 } else if (status & PCI_X_SSTATUS_133MHZ) {
635 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500636 max = PCI_SPEED_133MHz_PCIX_ECC;
637 } else {
638 max = PCI_SPEED_133MHz_PCIX;
639 }
640 } else {
641 max = PCI_SPEED_66MHz_PCIX;
642 }
643
644 bus->max_bus_speed = max;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700645 bus->cur_bus_speed = pcix_bus_speed[
646 (status & PCI_X_SSTATUS_FREQ) >> 6];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500647
648 return;
649 }
650
Yijing Wangfdfe1512013-09-05 15:55:29 +0800651 if (pci_is_pcie(bridge)) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500652 u32 linkcap;
653 u16 linksta;
654
Jiang Liu59875ae2012-07-24 17:20:06 +0800655 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700656 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500657
Jiang Liu59875ae2012-07-24 17:20:06 +0800658 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500659 pcie_update_link_speed(bus, linksta);
660 }
661}
662
663
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700664static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
665 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700666{
667 struct pci_bus *child;
668 int i;
Yinghai Lu4f535092013-01-21 13:20:52 -0800669 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700670
671 /*
672 * Allocate a new bus, and inherit stuff from the parent..
673 */
674 child = pci_alloc_bus();
675 if (!child)
676 return NULL;
677
Linus Torvalds1da177e2005-04-16 15:20:36 -0700678 child->parent = parent;
679 child->ops = parent->ops;
Thierry Reding0cbdcfc2013-08-09 22:27:08 +0200680 child->msi = parent->msi;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700681 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200682 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700683
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400684 /* initialize some portions of the bus device, but don't register it
Yinghai Lu4f535092013-01-21 13:20:52 -0800685 * now as the parent is not properly set up yet.
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400686 */
687 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100688 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700689
690 /*
691 * Set up the primary, secondary and subordinate
692 * bus numbers.
693 */
Yinghai Lub918c622012-05-17 18:51:11 -0700694 child->number = child->busn_res.start = busnr;
695 child->primary = parent->busn_res.start;
696 child->busn_res.end = 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700697
Yinghai Lu4f535092013-01-21 13:20:52 -0800698 if (!bridge) {
699 child->dev.parent = parent->bridge;
700 goto add_dev;
701 }
Yu Zhao3789fa82008-11-22 02:41:07 +0800702
703 child->self = bridge;
704 child->bridge = get_device(&bridge->dev);
Yinghai Lu4f535092013-01-21 13:20:52 -0800705 child->dev.parent = child->bridge;
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +1000706 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500707 pci_set_bus_speed(child);
708
Linus Torvalds1da177e2005-04-16 15:20:36 -0700709 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800710 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700711 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
712 child->resource[i]->name = child->name;
713 }
714 bridge->subordinate = child;
715
Yinghai Lu4f535092013-01-21 13:20:52 -0800716add_dev:
717 ret = device_register(&child->dev);
718 WARN_ON(ret < 0);
719
Jiang Liu10a95742013-04-12 05:44:20 +0000720 pcibios_add_bus(child);
721
Yinghai Lu4f535092013-01-21 13:20:52 -0800722 /* Create legacy_io and legacy_mem files for this bus */
723 pci_create_legacy_files(child);
724
Linus Torvalds1da177e2005-04-16 15:20:36 -0700725 return child;
726}
727
Sam Ravnborg451124a2008-02-02 22:33:43 +0100728struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700729{
730 struct pci_bus *child;
731
732 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700733 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800734 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700735 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800736 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700737 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700738 return child;
739}
740
Linus Torvalds1da177e2005-04-16 15:20:36 -0700741/*
742 * If it's a bridge, configure it and scan the bus behind it.
743 * For CardBus bridges, we don't scan behind as the devices will
744 * be handled by the bridge driver itself.
745 *
746 * We need to process bridges in two passes -- first we scan those
747 * already configured by the BIOS and after we are done with all of
748 * them, we proceed to assigning numbers to the remaining buses in
749 * order to avoid overlaps between old and new bus numbers.
750 */
Bill Pemberton15856ad2012-11-21 15:35:00 -0500751int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700752{
753 struct pci_bus *child;
754 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100755 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700756 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600757 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100758 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700759
760 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600761 primary = buses & 0xFF;
762 secondary = (buses >> 8) & 0xFF;
763 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700764
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600765 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
766 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700767
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100768 if (!primary && (primary != bus->number) && secondary && subordinate) {
769 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
770 primary = bus->number;
771 }
772
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100773 /* Check if setup is sensible at all */
774 if (!pass &&
Yinghai Lu1965f662012-09-10 17:19:33 -0700775 (primary != bus->number || secondary <= bus->number ||
Andreas Noever1820ffd2014-01-23 21:59:25 +0100776 secondary > subordinate || subordinate > bus->busn_res.end)) {
Yinghai Lu1965f662012-09-10 17:19:33 -0700777 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
778 secondary, subordinate);
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100779 broken = 1;
780 }
781
Linus Torvalds1da177e2005-04-16 15:20:36 -0700782 /* Disable MasterAbortMode during probing to avoid reporting
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700783 of bus errors (in some architectures) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700784 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
785 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
786 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
787
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600788 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
789 !is_cardbus && !broken) {
790 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700791 /*
792 * Bus already configured by firmware, process it in the first
793 * pass and just note the configuration.
794 */
795 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000796 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700797
798 /*
Andreas Noever2ed85822014-01-23 21:59:22 +0100799 * The bus might already exist for two reasons: Either we are
800 * rescanning the bus or the bus is reachable through more than
801 * one bridge. The second case can happen with the i450NX
802 * chipset.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700803 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600804 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600805 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600806 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600807 if (!child)
808 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600809 child->primary = primary;
Yinghai Lubc76b732012-05-17 18:51:13 -0700810 pci_bus_insert_busn_res(child, secondary, subordinate);
Alex Chiang74710de2009-03-20 14:56:10 -0600811 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700812 }
813
Linus Torvalds1da177e2005-04-16 15:20:36 -0700814 cmax = pci_scan_child_bus(child);
Andreas Noeverc95b0bd2014-01-23 21:59:27 +0100815 if (cmax > subordinate)
816 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
817 subordinate, cmax);
818 /* subordinate should equal child->busn_res.end */
819 if (subordinate > max)
820 max = subordinate;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700821 } else {
822 /*
823 * We need to assign a number to this bus which we always
824 * do in the second pass.
825 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700826 if (!pass) {
Andreas Noever619c8c32014-01-23 21:59:23 +0100827 if (pcibios_assign_all_busses() || broken || is_cardbus)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700828 /* Temporarily disable forwarding of the
829 configuration cycles on all bridges in
830 this bus segment to avoid possible
831 conflicts in the second pass between two
832 bridges programmed with overlapping
833 bus ranges. */
834 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
835 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000836 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700837 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700838
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100839 if (max >= bus->busn_res.end) {
840 dev_warn(&dev->dev, "can't allocate child bus %02x from %pR\n",
841 max, &bus->busn_res);
842 goto out;
843 }
844
Linus Torvalds1da177e2005-04-16 15:20:36 -0700845 /* Clear errors */
846 pci_write_config_word(dev, PCI_STATUS, 0xffff);
847
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100848 /* The bus will already exist if we are rescanning */
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800849 child = pci_find_bus(pci_domain_nr(bus), max+1);
850 if (!child) {
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100851 child = pci_add_new_bus(bus, dev, max+1);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800852 if (!child)
853 goto out;
Andreas Noever1820ffd2014-01-23 21:59:25 +0100854 pci_bus_insert_busn_res(child, max+1,
855 bus->busn_res.end);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800856 }
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100857 max++;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700858 buses = (buses & 0xff000000)
859 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -0700860 | ((unsigned int)(child->busn_res.start) << 8)
861 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700862
863 /*
864 * yenta.c forces a secondary latency timer of 176.
865 * Copy that behaviour here.
866 */
867 if (is_cardbus) {
868 buses &= ~0xff000000;
869 buses |= CARDBUS_LATENCY_TIMER << 24;
870 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100871
Linus Torvalds1da177e2005-04-16 15:20:36 -0700872 /*
873 * We need to blast all three values with a single write.
874 */
875 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
876
877 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700878 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700879 max = pci_scan_child_bus(child);
880 } else {
881 /*
882 * For CardBus bridges, we leave 4 bus numbers
883 * as cards with a PCI-to-PCI bridge can be
884 * inserted later.
885 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100886 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
887 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700888 if (pci_find_bus(pci_domain_nr(bus),
889 max+i+1))
890 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100891 while (parent->parent) {
892 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -0700893 (parent->busn_res.end > max) &&
894 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +0100895 j = 1;
896 }
897 parent = parent->parent;
898 }
899 if (j) {
900 /*
901 * Often, there are two cardbus bridges
902 * -- try to leave one valid bus number
903 * for each one.
904 */
905 i /= 2;
906 break;
907 }
908 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700909 max += i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700910 }
911 /*
912 * Set the subordinate bus number to its real value.
913 */
Andreas Noever1820ffd2014-01-23 21:59:25 +0100914 if (max > bus->busn_res.end) {
915 dev_warn(&dev->dev, "max busn %02x is outside %pR\n",
916 max, &bus->busn_res);
917 max = bus->busn_res.end;
918 }
Yinghai Lubc76b732012-05-17 18:51:13 -0700919 pci_bus_update_busn_res_end(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700920 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
921 }
922
Gary Hadecb3576f2008-02-08 14:00:52 -0800923 sprintf(child->name,
924 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
925 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700926
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200927 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100928 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -0700929 if ((child->busn_res.end > bus->busn_res.end) ||
930 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +0100931 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -0700932 (child->busn_res.end < bus->number)) {
933 dev_info(&child->dev, "%pR %s "
934 "hidden behind%s bridge %s %pR\n",
935 &child->busn_res,
936 (bus->number > child->busn_res.end &&
937 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800938 "wholly" : "partially",
939 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700940 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -0700941 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +0100942 }
943 bus = bus->parent;
944 }
945
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000946out:
947 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
948
Linus Torvalds1da177e2005-04-16 15:20:36 -0700949 return max;
950}
951
952/*
953 * Read interrupt line and base address registers.
954 * The architecture-dependent code can tweak these, of course.
955 */
956static void pci_read_irq(struct pci_dev *dev)
957{
958 unsigned char irq;
959
960 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800961 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700962 if (irq)
963 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
964 dev->irq = irq;
965}
966
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000967void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800968{
969 int pos;
970 u16 reg16;
971
972 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
973 if (!pos)
974 return;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900975 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800976 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
Yijing Wang786e2282012-07-24 17:20:02 +0800977 pdev->pcie_flags_reg = reg16;
Jon Masonb03e7492011-07-20 15:20:54 -0500978 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
979 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800980}
981
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000982void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700983{
Eric W. Biederman28760482009-09-09 14:09:24 -0700984 u32 reg32;
985
Jiang Liu59875ae2012-07-24 17:20:06 +0800986 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
Eric W. Biederman28760482009-09-09 14:09:24 -0700987 if (reg32 & PCI_EXP_SLTCAP_HPC)
988 pdev->is_hotplug_bridge = 1;
989}
990
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700991
992/**
993 * pci_cfg_space_size - get the configuration space size of the PCI device.
994 * @dev: PCI device
995 *
996 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
997 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
998 * access it. Maybe we don't have a way to generate extended config space
999 * accesses, or the device is behind a reverse Express bridge. So we try
1000 * reading the dword at 0x100 which must either be 0 or a valid extended
1001 * capability header.
1002 */
1003static int pci_cfg_space_size_ext(struct pci_dev *dev)
1004{
1005 u32 status;
1006 int pos = PCI_CFG_SPACE_SIZE;
1007
1008 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1009 goto fail;
1010 if (status == 0xffffffff)
1011 goto fail;
1012
1013 return PCI_CFG_SPACE_EXP_SIZE;
1014
1015 fail:
1016 return PCI_CFG_SPACE_SIZE;
1017}
1018
1019int pci_cfg_space_size(struct pci_dev *dev)
1020{
1021 int pos;
1022 u32 status;
1023 u16 class;
1024
1025 class = dev->class >> 8;
1026 if (class == PCI_CLASS_BRIDGE_HOST)
1027 return pci_cfg_space_size_ext(dev);
1028
1029 if (!pci_is_pcie(dev)) {
1030 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1031 if (!pos)
1032 goto fail;
1033
1034 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1035 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1036 goto fail;
1037 }
1038
1039 return pci_cfg_space_size_ext(dev);
1040
1041 fail:
1042 return PCI_CFG_SPACE_SIZE;
1043}
1044
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +02001045#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -08001046
Linus Torvalds1da177e2005-04-16 15:20:36 -07001047/**
1048 * pci_setup_device - fill in class and map information of a device
1049 * @dev: the device structure to fill
1050 *
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001051 * Initialize the device structure with information about the device's
Linus Torvalds1da177e2005-04-16 15:20:36 -07001052 * vendor,class,memory and IO-space addresses,IRQ lines etc.
1053 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +08001054 * Returns 0 on success and negative if unknown type of device (not normal,
1055 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001056 */
Yu Zhao480b93b2009-03-20 11:25:14 +08001057int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001058{
1059 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +08001060 u8 hdr_type;
1061 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -05001062 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001063 struct pci_bus_region region;
1064 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +08001065
1066 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1067 return -EIO;
1068
1069 dev->sysdata = dev->bus->sysdata;
1070 dev->dev.parent = dev->bus->bridge;
1071 dev->dev.bus = &pci_bus_type;
1072 dev->hdr_type = hdr_type & 0x7f;
1073 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001074 dev->error_state = pci_channel_io_normal;
1075 set_pcie_port_type(dev);
1076
1077 list_for_each_entry(slot, &dev->bus->slots, list)
1078 if (PCI_SLOT(dev->devfn) == slot->number)
1079 dev->slot = slot;
1080
1081 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1082 set this higher, assuming the system even supports it. */
1083 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001084
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001085 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1086 dev->bus->number, PCI_SLOT(dev->devfn),
1087 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001088
1089 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001090 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001091 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001092
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001093 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1094 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001095
Yu Zhao853346e2009-03-21 22:05:11 +08001096 /* need to have dev->class ready */
1097 dev->cfg_size = pci_cfg_space_size(dev);
1098
Linus Torvalds1da177e2005-04-16 15:20:36 -07001099 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001100 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001101
1102 /* Early fixups, before probing the BARs */
1103 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001104 /* device class may be changed after fixup */
1105 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001106
1107 switch (dev->hdr_type) { /* header type */
1108 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1109 if (class == PCI_CLASS_BRIDGE_PCI)
1110 goto bad;
1111 pci_read_irq(dev);
1112 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1113 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1114 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001115
1116 /*
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001117 * Do the ugly legacy mode stuff here rather than broken chip
1118 * quirk code. Legacy mode ATA controllers have fixed
1119 * addresses. These are not always echoed in BAR0-3, and
1120 * BAR0-3 in a few cases contain junk!
Alan Cox368c73d2006-10-04 00:41:26 +01001121 */
1122 if (class == PCI_CLASS_STORAGE_IDE) {
1123 u8 progif;
1124 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1125 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001126 region.start = 0x1F0;
1127 region.end = 0x1F7;
1128 res = &dev->resource[0];
1129 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001130 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001131 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1132 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001133 region.start = 0x3F6;
1134 region.end = 0x3F6;
1135 res = &dev->resource[1];
1136 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001137 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001138 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1139 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001140 }
1141 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001142 region.start = 0x170;
1143 region.end = 0x177;
1144 res = &dev->resource[2];
1145 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001146 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001147 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1148 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001149 region.start = 0x376;
1150 region.end = 0x376;
1151 res = &dev->resource[3];
1152 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001153 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001154 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1155 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001156 }
1157 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001158 break;
1159
1160 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1161 if (class != PCI_CLASS_BRIDGE_PCI)
1162 goto bad;
1163 /* The PCI-to-PCI bridge spec requires that subtractive
1164 decoding (i.e. transparent) bridge must have programming
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001165 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001166 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001167 dev->transparent = ((dev->class & 0xff) == 1);
1168 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001169 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001170 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1171 if (pos) {
1172 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1173 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1174 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001175 break;
1176
1177 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1178 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1179 goto bad;
1180 pci_read_irq(dev);
1181 pci_read_bases(dev, 1, 0);
1182 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1183 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1184 break;
1185
1186 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001187 dev_err(&dev->dev, "unknown header type %02x, "
1188 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001189 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001190
1191 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001192 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1193 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001194 dev->class = PCI_CLASS_NOT_DEFINED;
1195 }
1196
1197 /* We found a fine healthy device, go go go... */
1198 return 0;
1199}
1200
Zhao, Yu201de562008-10-13 19:49:55 +08001201static void pci_release_capabilities(struct pci_dev *dev)
1202{
1203 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001204 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001205 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001206}
1207
Linus Torvalds1da177e2005-04-16 15:20:36 -07001208/**
1209 * pci_release_dev - free a pci device structure when all users of it are finished.
1210 * @dev: device that's been disconnected
1211 *
1212 * Will be called only by the device core when all users of this pci device are
1213 * done.
1214 */
1215static void pci_release_dev(struct device *dev)
1216{
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001217 struct pci_dev *pci_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001218
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001219 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001220 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001221 pci_release_of_node(pci_dev);
Sebastian Ott6ae32c52013-06-04 19:18:14 +02001222 pcibios_release_device(pci_dev);
Gu Zheng8b1fce02013-05-25 21:48:31 +08001223 pci_bus_put(pci_dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001224 kfree(pci_dev);
1225}
1226
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001227struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
Michael Ellerman65891212007-04-05 17:19:08 +10001228{
1229 struct pci_dev *dev;
1230
1231 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1232 if (!dev)
1233 return NULL;
1234
Michael Ellerman65891212007-04-05 17:19:08 +10001235 INIT_LIST_HEAD(&dev->bus_list);
Brian King88e7b162013-04-08 03:05:07 +00001236 dev->dev.type = &pci_dev_type;
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001237 dev->bus = pci_bus_get(bus);
Michael Ellerman65891212007-04-05 17:19:08 +10001238
1239 return dev;
1240}
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001241EXPORT_SYMBOL(pci_alloc_dev);
1242
Yinghai Luefdc87d2012-01-27 10:55:10 -08001243bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1244 int crs_timeout)
1245{
1246 int delay = 1;
1247
1248 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1249 return false;
1250
1251 /* some broken boards return 0 or ~0 if a slot is empty: */
1252 if (*l == 0xffffffff || *l == 0x00000000 ||
1253 *l == 0x0000ffff || *l == 0xffff0000)
1254 return false;
1255
1256 /* Configuration request Retry Status */
1257 while (*l == 0xffff0001) {
1258 if (!crs_timeout)
1259 return false;
1260
1261 msleep(delay);
1262 delay *= 2;
1263 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1264 return false;
1265 /* Card hasn't responded in 60 seconds? Must be stuck. */
1266 if (delay > crs_timeout) {
1267 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1268 "responding\n", pci_domain_nr(bus),
1269 bus->number, PCI_SLOT(devfn),
1270 PCI_FUNC(devfn));
1271 return false;
1272 }
1273 }
1274
1275 return true;
1276}
1277EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1278
Linus Torvalds1da177e2005-04-16 15:20:36 -07001279/*
1280 * Read the config data for a PCI device, sanity-check it
1281 * and fill in the dev structure...
1282 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001283static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001284{
1285 struct pci_dev *dev;
1286 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001287
Yinghai Luefdc87d2012-01-27 10:55:10 -08001288 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001289 return NULL;
1290
Gu Zheng8b1fce02013-05-25 21:48:31 +08001291 dev = pci_alloc_dev(bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001292 if (!dev)
1293 return NULL;
1294
Linus Torvalds1da177e2005-04-16 15:20:36 -07001295 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001296 dev->vendor = l & 0xffff;
1297 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001298
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001299 pci_set_of_node(dev);
1300
Yu Zhao480b93b2009-03-20 11:25:14 +08001301 if (pci_setup_device(dev)) {
Gu Zheng8b1fce02013-05-25 21:48:31 +08001302 pci_bus_put(dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001303 kfree(dev);
1304 return NULL;
1305 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001306
1307 return dev;
1308}
1309
Zhao, Yu201de562008-10-13 19:49:55 +08001310static void pci_init_capabilities(struct pci_dev *dev)
1311{
1312 /* MSI/MSI-X list */
1313 pci_msi_init_pci_dev(dev);
1314
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001315 /* Buffers for saving PCIe and PCI-X capabilities */
1316 pci_allocate_cap_save_buffers(dev);
1317
Zhao, Yu201de562008-10-13 19:49:55 +08001318 /* Power Management */
1319 pci_pm_init(dev);
1320
1321 /* Vital Product Data */
1322 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001323
1324 /* Alternative Routing-ID Forwarding */
Yijing Wang31ab2472013-01-15 11:12:17 +08001325 pci_configure_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001326
1327 /* Single Root I/O Virtualization */
1328 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001329
1330 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001331 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001332}
1333
Sam Ravnborg96bde062007-03-26 21:53:30 -08001334void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001335{
Yinghai Lu4f535092013-01-21 13:20:52 -08001336 int ret;
1337
Linus Torvalds1da177e2005-04-16 15:20:36 -07001338 device_initialize(&dev->dev);
1339 dev->dev.release = pci_release_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340
Yinghai Lu7629d192013-01-21 13:20:44 -08001341 set_dev_node(&dev->dev, pcibus_to_node(bus));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001342 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001343 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001344 dev->dev.coherent_dma_mask = 0xffffffffull;
1345
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001346 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001347 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001348
Linus Torvalds1da177e2005-04-16 15:20:36 -07001349 /* Fix up broken headers */
1350 pci_fixup_device(pci_fixup_header, dev);
1351
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001352 /* moved out from quirk header fixup code */
1353 pci_reassigndev_resource_alignment(dev);
1354
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001355 /* Clear the state_saved flag. */
1356 dev->state_saved = false;
1357
Zhao, Yu201de562008-10-13 19:49:55 +08001358 /* Initialize various capabilities */
1359 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001360
Linus Torvalds1da177e2005-04-16 15:20:36 -07001361 /*
1362 * Add the device to our list of discovered devices
1363 * and the bus list for fixup functions, etc.
1364 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001365 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001366 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001367 up_write(&pci_bus_sem);
Yinghai Lu4f535092013-01-21 13:20:52 -08001368
Yinghai Lu4f535092013-01-21 13:20:52 -08001369 ret = pcibios_add_device(dev);
1370 WARN_ON(ret < 0);
1371
1372 /* Notifier could use PCI capabilities */
1373 dev->match_driver = false;
1374 ret = device_add(&dev->dev);
1375 WARN_ON(ret < 0);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001376}
1377
Sam Ravnborg451124a2008-02-02 22:33:43 +01001378struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001379{
1380 struct pci_dev *dev;
1381
Trent Piepho90bdb312009-03-20 14:56:00 -06001382 dev = pci_get_slot(bus, devfn);
1383 if (dev) {
1384 pci_dev_put(dev);
1385 return dev;
1386 }
1387
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001388 dev = pci_scan_device(bus, devfn);
1389 if (!dev)
1390 return NULL;
1391
1392 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001393
1394 return dev;
1395}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001396EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001397
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001398static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001399{
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001400 int pos;
1401 u16 cap = 0;
1402 unsigned next_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001403
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001404 if (pci_ari_enabled(bus)) {
1405 if (!dev)
1406 return 0;
1407 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1408 if (!pos)
1409 return 0;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001410
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001411 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1412 next_fn = PCI_ARI_CAP_NFN(cap);
1413 if (next_fn <= fn)
1414 return 0; /* protect against malformed list */
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001415
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001416 return next_fn;
1417 }
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001418
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001419 /* dev may be NULL for non-contiguous multifunction devices */
1420 if (!dev || dev->multifunction)
1421 return (fn + 1) % 8;
1422
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001423 return 0;
1424}
1425
1426static int only_one_child(struct pci_bus *bus)
1427{
1428 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001429
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001430 if (!parent || !pci_is_pcie(parent))
1431 return 0;
Yijing Wang62f87c02012-07-24 17:20:03 +08001432 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001433 return 1;
Yijing Wang62f87c02012-07-24 17:20:03 +08001434 if (pci_pcie_type(parent) == PCI_EXP_TYPE_DOWNSTREAM &&
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001435 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001436 return 1;
1437 return 0;
1438}
1439
Linus Torvalds1da177e2005-04-16 15:20:36 -07001440/**
1441 * pci_scan_slot - scan a PCI slot on a bus for devices.
1442 * @bus: PCI bus to scan
1443 * @devfn: slot number to scan (must have zero function.)
1444 *
1445 * Scan a PCI slot on the specified PCI bus for devices, adding
1446 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001447 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001448 *
1449 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001450 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001451int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001452{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001453 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001454 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001455
1456 if (only_one_child(bus) && (devfn > 0))
1457 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001458
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001459 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001460 if (!dev)
1461 return 0;
1462 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001463 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001464
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001465 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001466 dev = pci_scan_single_device(bus, devfn + fn);
1467 if (dev) {
1468 if (!dev->is_added)
1469 nr++;
1470 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001471 }
1472 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001473
Shaohua Li149e1632008-07-23 10:32:31 +08001474 /* only one slot has pcie device */
1475 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001476 pcie_aspm_init_link_state(bus->self);
1477
Linus Torvalds1da177e2005-04-16 15:20:36 -07001478 return nr;
1479}
1480
Jon Masonb03e7492011-07-20 15:20:54 -05001481static int pcie_find_smpss(struct pci_dev *dev, void *data)
1482{
1483 u8 *smpss = data;
1484
1485 if (!pci_is_pcie(dev))
1486 return 0;
1487
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001488 /*
1489 * We don't have a way to change MPS settings on devices that have
1490 * drivers attached. A hot-added device might support only the minimum
1491 * MPS setting (MPS=128). Therefore, if the fabric contains a bridge
1492 * where devices may be hot-added, we limit the fabric MPS to 128 so
1493 * hot-added devices will work correctly.
1494 *
1495 * However, if we hot-add a device to a slot directly below a Root
1496 * Port, it's impossible for there to be other existing devices below
1497 * the port. We don't limit the MPS in this case because we can
1498 * reconfigure MPS on both the Root Port and the hot-added device,
1499 * and there are no other devices involved.
1500 *
1501 * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
Jon Masonb03e7492011-07-20 15:20:54 -05001502 */
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001503 if (dev->is_hotplug_bridge &&
1504 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
Jon Masonb03e7492011-07-20 15:20:54 -05001505 *smpss = 0;
1506
1507 if (*smpss > dev->pcie_mpss)
1508 *smpss = dev->pcie_mpss;
1509
1510 return 0;
1511}
1512
1513static void pcie_write_mps(struct pci_dev *dev, int mps)
1514{
Jon Mason62f392e2011-10-14 14:56:14 -05001515 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001516
1517 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001518 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001519
Yijing Wang62f87c02012-07-24 17:20:03 +08001520 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1521 dev->bus->self)
Jon Mason62f392e2011-10-14 14:56:14 -05001522 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001523 * downstream communication will never be larger than
1524 * the MRRS. So, the MPS only needs to be configured
1525 * for the upstream communication. This being the case,
1526 * walk from the top down and set the MPS of the child
1527 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001528 *
1529 * Configure the device MPS with the smaller of the
1530 * device MPSS or the bridge MPS (which is assumed to be
1531 * properly configured at this point to the largest
1532 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001533 */
Jon Mason62f392e2011-10-14 14:56:14 -05001534 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001535 }
1536
1537 rc = pcie_set_mps(dev, mps);
1538 if (rc)
1539 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1540}
1541
Jon Mason62f392e2011-10-14 14:56:14 -05001542static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001543{
Jon Mason62f392e2011-10-14 14:56:14 -05001544 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001545
Jon Masoned2888e2011-09-08 16:41:18 -05001546 /* In the "safe" case, do not configure the MRRS. There appear to be
1547 * issues with setting MRRS to 0 on a number of devices.
1548 */
Jon Masoned2888e2011-09-08 16:41:18 -05001549 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1550 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001551
Jon Masoned2888e2011-09-08 16:41:18 -05001552 /* For Max performance, the MRRS must be set to the largest supported
1553 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001554 * device or the bus can support. This should already be properly
1555 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001556 */
Jon Mason62f392e2011-10-14 14:56:14 -05001557 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001558
1559 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001560 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001561 * If the MRRS value provided is not acceptable (e.g., too large),
1562 * shrink the value until it is acceptable to the HW.
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001563 */
Jon Masonb03e7492011-07-20 15:20:54 -05001564 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1565 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001566 if (!rc)
1567 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001568
Jon Mason62f392e2011-10-14 14:56:14 -05001569 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001570 mrrs /= 2;
1571 }
Jon Mason62f392e2011-10-14 14:56:14 -05001572
1573 if (mrrs < 128)
1574 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1575 "safe value. If problems are experienced, try running "
1576 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001577}
1578
Yijing Wang5895af72013-08-26 16:33:06 +08001579static void pcie_bus_detect_mps(struct pci_dev *dev)
1580{
1581 struct pci_dev *bridge = dev->bus->self;
1582 int mps, p_mps;
1583
1584 if (!bridge)
1585 return;
1586
1587 mps = pcie_get_mps(dev);
1588 p_mps = pcie_get_mps(bridge);
1589
1590 if (mps != p_mps)
1591 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",
1592 mps, pci_name(bridge), p_mps);
1593}
1594
Jon Masonb03e7492011-07-20 15:20:54 -05001595static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1596{
Jon Masona513a99a72011-10-14 14:56:16 -05001597 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001598
1599 if (!pci_is_pcie(dev))
1600 return 0;
1601
Yijing Wang5895af72013-08-26 16:33:06 +08001602 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1603 pcie_bus_detect_mps(dev);
1604 return 0;
1605 }
1606
Jon Masona513a99a72011-10-14 14:56:16 -05001607 mps = 128 << *(u8 *)data;
1608 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001609
1610 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001611 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001612
Bjorn Helgaas2c25e342013-08-22 11:24:43 +08001613 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), "
Jon Masona513a99a72011-10-14 14:56:16 -05001614 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1615 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001616
1617 return 0;
1618}
1619
Jon Masona513a99a72011-10-14 14:56:16 -05001620/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001621 * parents then children fashion. If this changes, then this code will not
1622 * work as designed.
1623 */
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001624void pcie_bus_configure_settings(struct pci_bus *bus)
Jon Masonb03e7492011-07-20 15:20:54 -05001625{
Jon Mason5f39e672011-10-03 09:50:20 -05001626 u8 smpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001627
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001628 if (!bus->self)
1629 return;
1630
Jon Masonb03e7492011-07-20 15:20:54 -05001631 if (!pci_is_pcie(bus->self))
1632 return;
1633
Jon Mason5f39e672011-10-03 09:50:20 -05001634 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
Jon Mason33154722013-08-26 16:33:05 +08001635 * to be aware of the MPS of the destination. To work around this,
Jon Mason5f39e672011-10-03 09:50:20 -05001636 * simply force the MPS of the entire system to the smallest possible.
1637 */
1638 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1639 smpss = 0;
1640
Jon Masonb03e7492011-07-20 15:20:54 -05001641 if (pcie_bus_config == PCIE_BUS_SAFE) {
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001642 smpss = bus->self->pcie_mpss;
Jon Mason5f39e672011-10-03 09:50:20 -05001643
Jon Masonb03e7492011-07-20 15:20:54 -05001644 pcie_find_smpss(bus->self, &smpss);
1645 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1646 }
1647
1648 pcie_bus_configure_set(bus->self, &smpss);
1649 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1650}
Jon Masondebc3b72011-08-02 00:01:18 -05001651EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001652
Bill Pemberton15856ad2012-11-21 15:35:00 -05001653unsigned int pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001654{
Yinghai Lub918c622012-05-17 18:51:11 -07001655 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001656 struct pci_dev *dev;
1657
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001658 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001659
1660 /* Go find them, Rover! */
1661 for (devfn = 0; devfn < 0x100; devfn += 8)
1662 pci_scan_slot(bus, devfn);
1663
Yu Zhaoa28724b2009-03-20 11:25:13 +08001664 /* Reserve buses for SR-IOV capability. */
1665 max += pci_iov_bus_range(bus);
1666
Linus Torvalds1da177e2005-04-16 15:20:36 -07001667 /*
1668 * After performing arch-dependent fixup of the bus, look behind
1669 * all PCI-to-PCI bridges on this bus.
1670 */
Alex Chiang74710de2009-03-20 14:56:10 -06001671 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001672 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001673 pcibios_fixup_bus(bus);
Jiang Liu981cf9e2013-04-12 05:44:16 +00001674 bus->is_added = 1;
Alex Chiang74710de2009-03-20 14:56:10 -06001675 }
1676
Linus Torvalds1da177e2005-04-16 15:20:36 -07001677 for (pass=0; pass < 2; pass++)
1678 list_for_each_entry(dev, &bus->devices, bus_list) {
1679 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1680 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1681 max = pci_scan_bridge(bus, dev, max, pass);
1682 }
1683
1684 /*
1685 * We've scanned the bus and so we know all about what's on
1686 * the other side of any bridges that may be on this bus plus
1687 * any devices.
1688 *
1689 * Return how far we've got finding sub-buses.
1690 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001691 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001692 return max;
1693}
1694
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001695/**
1696 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
1697 * @bridge: Host bridge to set up.
1698 *
1699 * Default empty implementation. Replace with an architecture-specific setup
1700 * routine, if necessary.
1701 */
1702int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
1703{
1704 return 0;
1705}
1706
Jiang Liu10a95742013-04-12 05:44:20 +00001707void __weak pcibios_add_bus(struct pci_bus *bus)
1708{
1709}
1710
1711void __weak pcibios_remove_bus(struct pci_bus *bus)
1712{
1713}
1714
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001715struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1716 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001717{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001718 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001719 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001720 struct pci_bus *b, *b2;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001721 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001722 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001723 resource_size_t offset;
1724 char bus_addr[64];
1725 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001726
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001727 b = pci_alloc_bus();
1728 if (!b)
Yinghai Lu7b543662012-04-02 18:31:53 -07001729 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001730
1731 b->sysdata = sysdata;
1732 b->ops = ops;
Yinghai Lu4f535092013-01-21 13:20:52 -08001733 b->number = b->busn_res.start = bus;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001734 b2 = pci_find_bus(pci_domain_nr(b), bus);
1735 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001736 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001737 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001738 goto err_out;
1739 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001740
Yinghai Lu7b543662012-04-02 18:31:53 -07001741 bridge = pci_alloc_host_bridge(b);
1742 if (!bridge)
1743 goto err_out;
1744
1745 bridge->dev.parent = parent;
Jiang Liu70efde22013-06-07 16:16:51 -06001746 bridge->dev.release = pci_release_host_bridge_dev;
Yinghai Lu7b543662012-04-02 18:31:53 -07001747 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001748 error = pcibios_root_bridge_prepare(bridge);
Jiang Liu343df772013-06-07 01:10:08 +08001749 if (error) {
1750 kfree(bridge);
1751 goto err_out;
1752 }
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001753
Yinghai Lu7b543662012-04-02 18:31:53 -07001754 error = device_register(&bridge->dev);
Jiang Liu343df772013-06-07 01:10:08 +08001755 if (error) {
1756 put_device(&bridge->dev);
1757 goto err_out;
1758 }
Yinghai Lu7b543662012-04-02 18:31:53 -07001759 b->bridge = get_device(&bridge->dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001760 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001761 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001762
Yinghai Lu0d358f22008-02-19 03:20:41 -08001763 if (!parent)
1764 set_dev_node(b->bridge, pcibus_to_node(b));
1765
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001766 b->dev.class = &pcibus_class;
1767 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001768 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001769 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001770 if (error)
1771 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001772
Jiang Liu10a95742013-04-12 05:44:20 +00001773 pcibios_add_bus(b);
1774
Linus Torvalds1da177e2005-04-16 15:20:36 -07001775 /* Create legacy_io and legacy_mem files for this bus */
1776 pci_create_legacy_files(b);
1777
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001778 if (parent)
1779 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1780 else
1781 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1782
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001783 /* Add initial resources to the bus */
1784 list_for_each_entry_safe(window, n, resources, list) {
1785 list_move_tail(&window->list, &bridge->windows);
1786 res = window->res;
1787 offset = window->offset;
Yinghai Luf848ffb2012-05-17 18:51:12 -07001788 if (res->flags & IORESOURCE_BUS)
1789 pci_bus_insert_busn_res(b, bus, res->end);
1790 else
1791 pci_bus_add_resource(b, res, 0);
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001792 if (offset) {
1793 if (resource_type(res) == IORESOURCE_IO)
1794 fmt = " (bus address [%#06llx-%#06llx])";
1795 else
1796 fmt = " (bus address [%#010llx-%#010llx])";
1797 snprintf(bus_addr, sizeof(bus_addr), fmt,
1798 (unsigned long long) (res->start - offset),
1799 (unsigned long long) (res->end - offset));
1800 } else
1801 bus_addr[0] = '\0';
1802 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001803 }
1804
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001805 down_write(&pci_bus_sem);
1806 list_add_tail(&b->node, &pci_root_buses);
1807 up_write(&pci_bus_sem);
1808
Linus Torvalds1da177e2005-04-16 15:20:36 -07001809 return b;
1810
Linus Torvalds1da177e2005-04-16 15:20:36 -07001811class_dev_reg_err:
Yinghai Lu7b543662012-04-02 18:31:53 -07001812 put_device(&bridge->dev);
1813 device_unregister(&bridge->dev);
Yinghai Lu7b543662012-04-02 18:31:53 -07001814err_out:
1815 kfree(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001816 return NULL;
1817}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001818
Yinghai Lu98a35832012-05-18 11:35:50 -06001819int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1820{
1821 struct resource *res = &b->busn_res;
1822 struct resource *parent_res, *conflict;
1823
1824 res->start = bus;
1825 res->end = bus_max;
1826 res->flags = IORESOURCE_BUS;
1827
1828 if (!pci_is_root_bus(b))
1829 parent_res = &b->parent->busn_res;
1830 else {
1831 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1832 res->flags |= IORESOURCE_PCI_FIXED;
1833 }
1834
Andreas Noeverced04d12014-01-23 21:59:24 +01001835 conflict = request_resource_conflict(parent_res, res);
Yinghai Lu98a35832012-05-18 11:35:50 -06001836
1837 if (conflict)
1838 dev_printk(KERN_DEBUG, &b->dev,
1839 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1840 res, pci_is_root_bus(b) ? "domain " : "",
1841 parent_res, conflict->name, conflict);
Yinghai Lu98a35832012-05-18 11:35:50 -06001842
1843 return conflict == NULL;
1844}
1845
1846int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1847{
1848 struct resource *res = &b->busn_res;
1849 struct resource old_res = *res;
1850 resource_size_t size;
1851 int ret;
1852
1853 if (res->start > bus_max)
1854 return -EINVAL;
1855
1856 size = bus_max - res->start + 1;
1857 ret = adjust_resource(res, res->start, size);
1858 dev_printk(KERN_DEBUG, &b->dev,
1859 "busn_res: %pR end %s updated to %02x\n",
1860 &old_res, ret ? "can not be" : "is", bus_max);
1861
1862 if (!ret && !res->parent)
1863 pci_bus_insert_busn_res(b, res->start, res->end);
1864
1865 return ret;
1866}
1867
1868void pci_bus_release_busn_res(struct pci_bus *b)
1869{
1870 struct resource *res = &b->busn_res;
1871 int ret;
1872
1873 if (!res->flags || !res->parent)
1874 return;
1875
1876 ret = release_resource(res);
1877 dev_printk(KERN_DEBUG, &b->dev,
1878 "busn_res: %pR %s released\n",
1879 res, ret ? "can not be" : "is");
1880}
1881
Bill Pemberton15856ad2012-11-21 15:35:00 -05001882struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06001883 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1884{
Yinghai Lu4d99f522012-05-17 18:51:12 -07001885 struct pci_host_bridge_window *window;
1886 bool found = false;
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06001887 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07001888 int max;
1889
1890 list_for_each_entry(window, resources, list)
1891 if (window->res->flags & IORESOURCE_BUS) {
1892 found = true;
1893 break;
1894 }
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06001895
1896 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1897 if (!b)
1898 return NULL;
1899
Yinghai Lu4d99f522012-05-17 18:51:12 -07001900 if (!found) {
1901 dev_info(&b->dev,
1902 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1903 bus);
1904 pci_bus_insert_busn_res(b, bus, 255);
1905 }
1906
1907 max = pci_scan_child_bus(b);
1908
1909 if (!found)
1910 pci_bus_update_busn_res_end(b, max);
1911
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06001912 pci_bus_add_devices(b);
1913 return b;
1914}
1915EXPORT_SYMBOL(pci_scan_root_bus);
1916
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001917/* Deprecated; use pci_scan_root_bus() instead */
Bill Pemberton15856ad2012-11-21 15:35:00 -05001918struct pci_bus *pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001919 int bus, struct pci_ops *ops, void *sysdata)
1920{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001921 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001922 struct pci_bus *b;
1923
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001924 pci_add_resource(&resources, &ioport_resource);
1925 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001926 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001927 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001928 if (b)
Yinghai Lu857c3b62012-05-17 18:51:12 -07001929 pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001930 else
1931 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001932 return b;
1933}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001934EXPORT_SYMBOL(pci_scan_bus_parented);
1935
Bill Pemberton15856ad2012-11-21 15:35:00 -05001936struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001937 void *sysdata)
1938{
1939 LIST_HEAD(resources);
1940 struct pci_bus *b;
1941
1942 pci_add_resource(&resources, &ioport_resource);
1943 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001944 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001945 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1946 if (b) {
Yinghai Lu857c3b62012-05-17 18:51:12 -07001947 pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001948 pci_bus_add_devices(b);
1949 } else {
1950 pci_free_resource_list(&resources);
1951 }
1952 return b;
1953}
1954EXPORT_SYMBOL(pci_scan_bus);
1955
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001956/**
Yinghai Lu2f320522012-01-21 02:08:22 -08001957 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1958 * @bridge: PCI bridge for the bus to scan
1959 *
1960 * Scan a PCI bus and child buses for new devices, add them,
1961 * and enable them, resizing bridge mmio/io resource if necessary
1962 * and possible. The caller must ensure the child devices are already
1963 * removed for resizing to occur.
1964 *
1965 * Returns the max number of subordinate bus discovered.
1966 */
1967unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1968{
1969 unsigned int max;
1970 struct pci_bus *bus = bridge->subordinate;
1971
1972 max = pci_scan_child_bus(bus);
1973
1974 pci_assign_unassigned_bridge_resources(bridge);
1975
1976 pci_bus_add_devices(bus);
1977
1978 return max;
1979}
1980
Yinghai Lua5213a32012-10-30 14:31:21 -06001981/**
1982 * pci_rescan_bus - scan a PCI bus for devices.
1983 * @bus: PCI bus to scan
1984 *
1985 * Scan a PCI bus and child buses for new devices, adds them,
1986 * and enables them.
1987 *
1988 * Returns the max number of subordinate bus discovered.
1989 */
1990unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1991{
1992 unsigned int max;
1993
1994 max = pci_scan_child_bus(bus);
1995 pci_assign_unassigned_bus_resources(bus);
1996 pci_bus_add_devices(bus);
1997
1998 return max;
1999}
2000EXPORT_SYMBOL_GPL(pci_rescan_bus);
2001
Linus Torvalds1da177e2005-04-16 15:20:36 -07002002EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002003EXPORT_SYMBOL(pci_scan_slot);
2004EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002005EXPORT_SYMBOL_GPL(pci_scan_child_bus);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002006
Rafael J. Wysocki9d169472014-01-10 15:22:18 +01002007/*
2008 * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
2009 * routines should always be executed under this mutex.
2010 */
2011static DEFINE_MUTEX(pci_rescan_remove_lock);
2012
2013void pci_lock_rescan_remove(void)
2014{
2015 mutex_lock(&pci_rescan_remove_lock);
2016}
2017EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2018
2019void pci_unlock_rescan_remove(void)
2020{
2021 mutex_unlock(&pci_rescan_remove_lock);
2022}
2023EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2024
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002025static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002026{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002027 const struct pci_dev *a = to_pci_dev(d_a);
2028 const struct pci_dev *b = to_pci_dev(d_b);
2029
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002030 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2031 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2032
2033 if (a->bus->number < b->bus->number) return -1;
2034 else if (a->bus->number > b->bus->number) return 1;
2035
2036 if (a->devfn < b->devfn) return -1;
2037 else if (a->devfn > b->devfn) return 1;
2038
2039 return 0;
2040}
2041
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08002042void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002043{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002044 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002045}