blob: 82cd75f6118a2f8e43c32e95bf802dd9bf064d11 [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 Helgaas72dc5602014-04-29 18:42:49 -0600261 res->start = 0;
262 res->end = sz64;
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600263 bar_disabled = true;
Bjorn Helgaas72dc5602014-04-29 18:42:49 -0600264 goto out;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400265 } else {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700266 region.start = l64;
267 region.end = l64 + sz64;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400268 }
269 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600270 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400271
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600272 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400273 goto fail;
274
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700275 region.start = l;
276 region.end = l + sz;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400277 }
278
Yinghai Lufc279852013-12-09 22:54:40 -0800279 pcibios_bus_to_resource(dev->bus, res, &region);
280 pcibios_resource_to_bus(dev->bus, &inverted_region, res);
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800281
282 /*
283 * If "A" is a BAR value (a bus address), "bus_to_resource(A)" is
284 * the corresponding resource address (the physical address used by
285 * the CPU. Converting that resource address back to a bus address
286 * should yield the original BAR value:
287 *
288 * resource_to_bus(bus_to_resource(A)) == A
289 *
290 * If it doesn't, CPU accesses to "bus_to_resource(A)" will not
291 * be claimed by the device.
292 */
293 if (inverted_region.start != region.start) {
294 dev_info(&dev->dev, "reg 0x%x: initial BAR value %pa invalid; forcing reassignment\n",
295 pos, &region.start);
296 res->flags |= IORESOURCE_UNSET;
297 res->end -= res->start;
298 res->start = 0;
299 }
Kevin Hao96ddef22013-05-25 19:36:26 +0800300
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600301 goto out;
302
303
304fail:
305 res->flags = 0;
306out:
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100307 if (!dev->mmio_always_on &&
308 (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
Bjorn Helgaasbbffe432012-07-06 12:08:18 -0600309 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
310
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600311 if (bar_too_big)
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600312 dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
313 pos, (unsigned long long) sz64);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600314 if (res->flags && !bar_disabled)
Kevin Hao33963e302013-05-25 19:36:25 +0800315 dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600316
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600317 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800318}
319
Linus Torvalds1da177e2005-04-16 15:20:36 -0700320static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
321{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400322 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700323
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400324 for (pos = 0; pos < howmany; pos++) {
325 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400327 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700328 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400329
Linus Torvalds1da177e2005-04-16 15:20:36 -0700330 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400331 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700332 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400333 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
334 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
335 IORESOURCE_SIZEALIGN;
336 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337 }
338}
339
Bill Pemberton15856ad2012-11-21 15:35:00 -0500340static void pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700341{
342 struct pci_dev *dev = child->self;
343 u8 io_base_lo, io_limit_lo;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600344 unsigned long io_mask, io_granularity, base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700345 struct pci_bus_region region;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600346 struct resource *res;
347
348 io_mask = PCI_IO_RANGE_MASK;
349 io_granularity = 0x1000;
350 if (dev->io_window_1k) {
351 /* Support 1K I/O space granularity */
352 io_mask = PCI_IO_1K_RANGE_MASK;
353 io_granularity = 0x400;
354 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700355
Linus Torvalds1da177e2005-04-16 15:20:36 -0700356 res = child->resource[0];
357 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
358 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600359 base = (io_base_lo & io_mask) << 8;
360 limit = (io_limit_lo & io_mask) << 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700361
362 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
363 u16 io_base_hi, io_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600364
Linus Torvalds1da177e2005-04-16 15:20:36 -0700365 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
366 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600367 base |= ((unsigned long) io_base_hi << 16);
368 limit |= ((unsigned long) io_limit_hi << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700369 }
370
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600371 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700372 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700373 region.start = base;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600374 region.end = limit + io_granularity - 1;
Yinghai Lufc279852013-12-09 22:54:40 -0800375 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600376 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700377 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700378}
379
Bill Pemberton15856ad2012-11-21 15:35:00 -0500380static void pci_read_bridge_mmio(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700381{
382 struct pci_dev *dev = child->self;
383 u16 mem_base_lo, mem_limit_lo;
384 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700385 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700386 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700387
388 res = child->resource[1];
389 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
390 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600391 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
392 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600393 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700394 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700395 region.start = base;
396 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800397 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600398 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700399 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700400}
401
Bill Pemberton15856ad2012-11-21 15:35:00 -0500402static void pci_read_bridge_mmio_pref(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700403{
404 struct pci_dev *dev = child->self;
405 u16 mem_base_lo, mem_limit_lo;
406 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700407 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700408 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700409
410 res = child->resource[2];
411 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
412 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600413 base = ((unsigned long) mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
414 limit = ((unsigned long) mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700415
416 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
417 u32 mem_base_hi, mem_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600418
Linus Torvalds1da177e2005-04-16 15:20:36 -0700419 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
420 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
421
422 /*
423 * Some bridges set the base > limit by default, and some
424 * (broken) BIOSes do not initialize them. If we find
425 * this, just assume they are not being used.
426 */
427 if (mem_base_hi <= mem_limit_hi) {
428#if BITS_PER_LONG == 64
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600429 base |= ((unsigned long) mem_base_hi) << 32;
430 limit |= ((unsigned long) mem_limit_hi) << 32;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700431#else
432 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600433 dev_err(&dev->dev, "can't handle 64-bit "
434 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700435 return;
436 }
437#endif
438 }
439 }
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600440 if (base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700441 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
442 IORESOURCE_MEM | IORESOURCE_PREFETCH;
443 if (res->flags & PCI_PREF_RANGE_TYPE_64)
444 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700445 region.start = base;
446 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800447 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600448 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700449 }
450}
451
Bill Pemberton15856ad2012-11-21 15:35:00 -0500452void pci_read_bridge_bases(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700453{
454 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700455 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700456 int i;
457
458 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
459 return;
460
Yinghai Lub918c622012-05-17 18:51:11 -0700461 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
462 &child->busn_res,
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700463 dev->transparent ? " (subtractive decode)" : "");
464
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700465 pci_bus_remove_resources(child);
466 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
467 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
468
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700469 pci_read_bridge_io(child);
470 pci_read_bridge_mmio(child);
471 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700472
473 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700474 pci_bus_for_each_resource(child->parent, res, i) {
475 if (res) {
476 pci_bus_add_resource(child, res,
477 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700478 dev_printk(KERN_DEBUG, &dev->dev,
479 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700480 res);
481 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700482 }
483 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700484}
485
Bjorn Helgaas05013482013-06-05 14:22:11 -0600486static struct pci_bus *pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700487{
488 struct pci_bus *b;
489
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100490 b = kzalloc(sizeof(*b), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600491 if (!b)
492 return NULL;
493
494 INIT_LIST_HEAD(&b->node);
495 INIT_LIST_HEAD(&b->children);
496 INIT_LIST_HEAD(&b->devices);
497 INIT_LIST_HEAD(&b->slots);
498 INIT_LIST_HEAD(&b->resources);
499 b->max_bus_speed = PCI_SPEED_UNKNOWN;
500 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700501 return b;
502}
503
Jiang Liu70efde22013-06-07 16:16:51 -0600504static void pci_release_host_bridge_dev(struct device *dev)
505{
506 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
507
508 if (bridge->release_fn)
509 bridge->release_fn(bridge);
510
511 pci_free_resource_list(&bridge->windows);
512
513 kfree(bridge);
514}
515
Yinghai Lu7b543662012-04-02 18:31:53 -0700516static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
517{
518 struct pci_host_bridge *bridge;
519
520 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600521 if (!bridge)
522 return NULL;
Yinghai Lu7b543662012-04-02 18:31:53 -0700523
Bjorn Helgaas05013482013-06-05 14:22:11 -0600524 INIT_LIST_HEAD(&bridge->windows);
525 bridge->bus = b;
Yinghai Lu7b543662012-04-02 18:31:53 -0700526 return bridge;
527}
528
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700529static const unsigned char pcix_bus_speed[] = {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500530 PCI_SPEED_UNKNOWN, /* 0 */
531 PCI_SPEED_66MHz_PCIX, /* 1 */
532 PCI_SPEED_100MHz_PCIX, /* 2 */
533 PCI_SPEED_133MHz_PCIX, /* 3 */
534 PCI_SPEED_UNKNOWN, /* 4 */
535 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
536 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
537 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
538 PCI_SPEED_UNKNOWN, /* 8 */
539 PCI_SPEED_66MHz_PCIX_266, /* 9 */
540 PCI_SPEED_100MHz_PCIX_266, /* A */
541 PCI_SPEED_133MHz_PCIX_266, /* B */
542 PCI_SPEED_UNKNOWN, /* C */
543 PCI_SPEED_66MHz_PCIX_533, /* D */
544 PCI_SPEED_100MHz_PCIX_533, /* E */
545 PCI_SPEED_133MHz_PCIX_533 /* F */
546};
547
Jacob Keller343e51a2013-07-31 06:53:16 +0000548const unsigned char pcie_link_speed[] = {
Matthew Wilcox3749c512009-12-13 08:11:32 -0500549 PCI_SPEED_UNKNOWN, /* 0 */
550 PCIE_SPEED_2_5GT, /* 1 */
551 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500552 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500553 PCI_SPEED_UNKNOWN, /* 4 */
554 PCI_SPEED_UNKNOWN, /* 5 */
555 PCI_SPEED_UNKNOWN, /* 6 */
556 PCI_SPEED_UNKNOWN, /* 7 */
557 PCI_SPEED_UNKNOWN, /* 8 */
558 PCI_SPEED_UNKNOWN, /* 9 */
559 PCI_SPEED_UNKNOWN, /* A */
560 PCI_SPEED_UNKNOWN, /* B */
561 PCI_SPEED_UNKNOWN, /* C */
562 PCI_SPEED_UNKNOWN, /* D */
563 PCI_SPEED_UNKNOWN, /* E */
564 PCI_SPEED_UNKNOWN /* F */
565};
566
567void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
568{
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700569 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
Matthew Wilcox3749c512009-12-13 08:11:32 -0500570}
571EXPORT_SYMBOL_GPL(pcie_update_link_speed);
572
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500573static unsigned char agp_speeds[] = {
574 AGP_UNKNOWN,
575 AGP_1X,
576 AGP_2X,
577 AGP_4X,
578 AGP_8X
579};
580
581static enum pci_bus_speed agp_speed(int agp3, int agpstat)
582{
583 int index = 0;
584
585 if (agpstat & 4)
586 index = 3;
587 else if (agpstat & 2)
588 index = 2;
589 else if (agpstat & 1)
590 index = 1;
591 else
592 goto out;
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700593
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500594 if (agp3) {
595 index += 2;
596 if (index == 5)
597 index = 0;
598 }
599
600 out:
601 return agp_speeds[index];
602}
603
604
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500605static void pci_set_bus_speed(struct pci_bus *bus)
606{
607 struct pci_dev *bridge = bus->self;
608 int pos;
609
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500610 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
611 if (!pos)
612 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
613 if (pos) {
614 u32 agpstat, agpcmd;
615
616 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
617 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
618
619 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
620 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
621 }
622
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500623 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
624 if (pos) {
625 u16 status;
626 enum pci_bus_speed max;
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500627
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700628 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
629 &status);
630
631 if (status & PCI_X_SSTATUS_533MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500632 max = PCI_SPEED_133MHz_PCIX_533;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700633 } else if (status & PCI_X_SSTATUS_266MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500634 max = PCI_SPEED_133MHz_PCIX_266;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700635 } else if (status & PCI_X_SSTATUS_133MHZ) {
636 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500637 max = PCI_SPEED_133MHz_PCIX_ECC;
638 } else {
639 max = PCI_SPEED_133MHz_PCIX;
640 }
641 } else {
642 max = PCI_SPEED_66MHz_PCIX;
643 }
644
645 bus->max_bus_speed = max;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700646 bus->cur_bus_speed = pcix_bus_speed[
647 (status & PCI_X_SSTATUS_FREQ) >> 6];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500648
649 return;
650 }
651
Yijing Wangfdfe1512013-09-05 15:55:29 +0800652 if (pci_is_pcie(bridge)) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500653 u32 linkcap;
654 u16 linksta;
655
Jiang Liu59875ae2012-07-24 17:20:06 +0800656 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700657 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500658
Jiang Liu59875ae2012-07-24 17:20:06 +0800659 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500660 pcie_update_link_speed(bus, linksta);
661 }
662}
663
664
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700665static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
666 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700667{
668 struct pci_bus *child;
669 int i;
Yinghai Lu4f535092013-01-21 13:20:52 -0800670 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700671
672 /*
673 * Allocate a new bus, and inherit stuff from the parent..
674 */
675 child = pci_alloc_bus();
676 if (!child)
677 return NULL;
678
Linus Torvalds1da177e2005-04-16 15:20:36 -0700679 child->parent = parent;
680 child->ops = parent->ops;
Thierry Reding0cbdcfc2013-08-09 22:27:08 +0200681 child->msi = parent->msi;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700682 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200683 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700684
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400685 /* initialize some portions of the bus device, but don't register it
Yinghai Lu4f535092013-01-21 13:20:52 -0800686 * now as the parent is not properly set up yet.
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400687 */
688 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100689 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700690
691 /*
692 * Set up the primary, secondary and subordinate
693 * bus numbers.
694 */
Yinghai Lub918c622012-05-17 18:51:11 -0700695 child->number = child->busn_res.start = busnr;
696 child->primary = parent->busn_res.start;
697 child->busn_res.end = 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700698
Yinghai Lu4f535092013-01-21 13:20:52 -0800699 if (!bridge) {
700 child->dev.parent = parent->bridge;
701 goto add_dev;
702 }
Yu Zhao3789fa82008-11-22 02:41:07 +0800703
704 child->self = bridge;
705 child->bridge = get_device(&bridge->dev);
Yinghai Lu4f535092013-01-21 13:20:52 -0800706 child->dev.parent = child->bridge;
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +1000707 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500708 pci_set_bus_speed(child);
709
Linus Torvalds1da177e2005-04-16 15:20:36 -0700710 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800711 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700712 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
713 child->resource[i]->name = child->name;
714 }
715 bridge->subordinate = child;
716
Yinghai Lu4f535092013-01-21 13:20:52 -0800717add_dev:
718 ret = device_register(&child->dev);
719 WARN_ON(ret < 0);
720
Jiang Liu10a95742013-04-12 05:44:20 +0000721 pcibios_add_bus(child);
722
Yinghai Lu4f535092013-01-21 13:20:52 -0800723 /* Create legacy_io and legacy_mem files for this bus */
724 pci_create_legacy_files(child);
725
Linus Torvalds1da177e2005-04-16 15:20:36 -0700726 return child;
727}
728
Sam Ravnborg451124a2008-02-02 22:33:43 +0100729struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700730{
731 struct pci_bus *child;
732
733 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700734 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800735 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700736 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800737 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700738 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700739 return child;
740}
741
Linus Torvalds1da177e2005-04-16 15:20:36 -0700742/*
743 * If it's a bridge, configure it and scan the bus behind it.
744 * For CardBus bridges, we don't scan behind as the devices will
745 * be handled by the bridge driver itself.
746 *
747 * We need to process bridges in two passes -- first we scan those
748 * already configured by the BIOS and after we are done with all of
749 * them, we proceed to assigning numbers to the remaining buses in
750 * order to avoid overlaps between old and new bus numbers.
751 */
Bill Pemberton15856ad2012-11-21 15:35:00 -0500752int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700753{
754 struct pci_bus *child;
755 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100756 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700757 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600758 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100759 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700760
761 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600762 primary = buses & 0xFF;
763 secondary = (buses >> 8) & 0xFF;
764 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700765
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600766 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
767 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700768
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100769 if (!primary && (primary != bus->number) && secondary && subordinate) {
770 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
771 primary = bus->number;
772 }
773
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100774 /* Check if setup is sensible at all */
775 if (!pass &&
Yinghai Lu1965f662012-09-10 17:19:33 -0700776 (primary != bus->number || secondary <= bus->number ||
Andreas Noever1820ffd2014-01-23 21:59:25 +0100777 secondary > subordinate || subordinate > bus->busn_res.end)) {
Yinghai Lu1965f662012-09-10 17:19:33 -0700778 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
779 secondary, subordinate);
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100780 broken = 1;
781 }
782
Linus Torvalds1da177e2005-04-16 15:20:36 -0700783 /* Disable MasterAbortMode during probing to avoid reporting
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700784 of bus errors (in some architectures) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700785 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
786 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
787 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
788
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600789 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
790 !is_cardbus && !broken) {
791 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700792 /*
793 * Bus already configured by firmware, process it in the first
794 * pass and just note the configuration.
795 */
796 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000797 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700798
799 /*
Andreas Noever2ed85822014-01-23 21:59:22 +0100800 * The bus might already exist for two reasons: Either we are
801 * rescanning the bus or the bus is reachable through more than
802 * one bridge. The second case can happen with the i450NX
803 * chipset.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700804 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600805 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600806 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600807 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600808 if (!child)
809 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600810 child->primary = primary;
Yinghai Lubc76b732012-05-17 18:51:13 -0700811 pci_bus_insert_busn_res(child, secondary, subordinate);
Alex Chiang74710de2009-03-20 14:56:10 -0600812 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700813 }
814
Linus Torvalds1da177e2005-04-16 15:20:36 -0700815 cmax = pci_scan_child_bus(child);
Andreas Noeverc95b0bd2014-01-23 21:59:27 +0100816 if (cmax > subordinate)
817 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
818 subordinate, cmax);
819 /* subordinate should equal child->busn_res.end */
820 if (subordinate > max)
821 max = subordinate;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700822 } else {
823 /*
824 * We need to assign a number to this bus which we always
825 * do in the second pass.
826 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700827 if (!pass) {
Andreas Noever619c8c32014-01-23 21:59:23 +0100828 if (pcibios_assign_all_busses() || broken || is_cardbus)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700829 /* Temporarily disable forwarding of the
830 configuration cycles on all bridges in
831 this bus segment to avoid possible
832 conflicts in the second pass between two
833 bridges programmed with overlapping
834 bus ranges. */
835 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
836 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000837 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700838 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700839
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100840 if (max >= bus->busn_res.end) {
841 dev_warn(&dev->dev, "can't allocate child bus %02x from %pR\n",
842 max, &bus->busn_res);
843 goto out;
844 }
845
Linus Torvalds1da177e2005-04-16 15:20:36 -0700846 /* Clear errors */
847 pci_write_config_word(dev, PCI_STATUS, 0xffff);
848
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100849 /* The bus will already exist if we are rescanning */
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800850 child = pci_find_bus(pci_domain_nr(bus), max+1);
851 if (!child) {
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100852 child = pci_add_new_bus(bus, dev, max+1);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800853 if (!child)
854 goto out;
Andreas Noever1820ffd2014-01-23 21:59:25 +0100855 pci_bus_insert_busn_res(child, max+1,
856 bus->busn_res.end);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800857 }
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100858 max++;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700859 buses = (buses & 0xff000000)
860 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -0700861 | ((unsigned int)(child->busn_res.start) << 8)
862 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700863
864 /*
865 * yenta.c forces a secondary latency timer of 176.
866 * Copy that behaviour here.
867 */
868 if (is_cardbus) {
869 buses &= ~0xff000000;
870 buses |= CARDBUS_LATENCY_TIMER << 24;
871 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100872
Linus Torvalds1da177e2005-04-16 15:20:36 -0700873 /*
874 * We need to blast all three values with a single write.
875 */
876 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
877
878 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700879 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700880 max = pci_scan_child_bus(child);
881 } else {
882 /*
883 * For CardBus bridges, we leave 4 bus numbers
884 * as cards with a PCI-to-PCI bridge can be
885 * inserted later.
886 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100887 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
888 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700889 if (pci_find_bus(pci_domain_nr(bus),
890 max+i+1))
891 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100892 while (parent->parent) {
893 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -0700894 (parent->busn_res.end > max) &&
895 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +0100896 j = 1;
897 }
898 parent = parent->parent;
899 }
900 if (j) {
901 /*
902 * Often, there are two cardbus bridges
903 * -- try to leave one valid bus number
904 * for each one.
905 */
906 i /= 2;
907 break;
908 }
909 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700910 max += i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700911 }
912 /*
913 * Set the subordinate bus number to its real value.
914 */
Andreas Noever1820ffd2014-01-23 21:59:25 +0100915 if (max > bus->busn_res.end) {
916 dev_warn(&dev->dev, "max busn %02x is outside %pR\n",
917 max, &bus->busn_res);
918 max = bus->busn_res.end;
919 }
Yinghai Lubc76b732012-05-17 18:51:13 -0700920 pci_bus_update_busn_res_end(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700921 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
922 }
923
Gary Hadecb3576f2008-02-08 14:00:52 -0800924 sprintf(child->name,
925 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
926 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700927
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200928 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100929 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -0700930 if ((child->busn_res.end > bus->busn_res.end) ||
931 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +0100932 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -0700933 (child->busn_res.end < bus->number)) {
934 dev_info(&child->dev, "%pR %s "
935 "hidden behind%s bridge %s %pR\n",
936 &child->busn_res,
937 (bus->number > child->busn_res.end &&
938 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800939 "wholly" : "partially",
940 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700941 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -0700942 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +0100943 }
944 bus = bus->parent;
945 }
946
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000947out:
948 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
949
Linus Torvalds1da177e2005-04-16 15:20:36 -0700950 return max;
951}
952
953/*
954 * Read interrupt line and base address registers.
955 * The architecture-dependent code can tweak these, of course.
956 */
957static void pci_read_irq(struct pci_dev *dev)
958{
959 unsigned char irq;
960
961 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800962 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700963 if (irq)
964 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
965 dev->irq = irq;
966}
967
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000968void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800969{
970 int pos;
971 u16 reg16;
972
973 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
974 if (!pos)
975 return;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900976 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800977 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
Yijing Wang786e2282012-07-24 17:20:02 +0800978 pdev->pcie_flags_reg = reg16;
Jon Masonb03e7492011-07-20 15:20:54 -0500979 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
980 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800981}
982
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000983void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700984{
Eric W. Biederman28760482009-09-09 14:09:24 -0700985 u32 reg32;
986
Jiang Liu59875ae2012-07-24 17:20:06 +0800987 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
Eric W. Biederman28760482009-09-09 14:09:24 -0700988 if (reg32 & PCI_EXP_SLTCAP_HPC)
989 pdev->is_hotplug_bridge = 1;
990}
991
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700992
993/**
994 * pci_cfg_space_size - get the configuration space size of the PCI device.
995 * @dev: PCI device
996 *
997 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
998 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
999 * access it. Maybe we don't have a way to generate extended config space
1000 * accesses, or the device is behind a reverse Express bridge. So we try
1001 * reading the dword at 0x100 which must either be 0 or a valid extended
1002 * capability header.
1003 */
1004static int pci_cfg_space_size_ext(struct pci_dev *dev)
1005{
1006 u32 status;
1007 int pos = PCI_CFG_SPACE_SIZE;
1008
1009 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1010 goto fail;
1011 if (status == 0xffffffff)
1012 goto fail;
1013
1014 return PCI_CFG_SPACE_EXP_SIZE;
1015
1016 fail:
1017 return PCI_CFG_SPACE_SIZE;
1018}
1019
1020int pci_cfg_space_size(struct pci_dev *dev)
1021{
1022 int pos;
1023 u32 status;
1024 u16 class;
1025
1026 class = dev->class >> 8;
1027 if (class == PCI_CLASS_BRIDGE_HOST)
1028 return pci_cfg_space_size_ext(dev);
1029
1030 if (!pci_is_pcie(dev)) {
1031 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1032 if (!pos)
1033 goto fail;
1034
1035 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1036 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1037 goto fail;
1038 }
1039
1040 return pci_cfg_space_size_ext(dev);
1041
1042 fail:
1043 return PCI_CFG_SPACE_SIZE;
1044}
1045
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +02001046#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -08001047
Linus Torvalds1da177e2005-04-16 15:20:36 -07001048/**
1049 * pci_setup_device - fill in class and map information of a device
1050 * @dev: the device structure to fill
1051 *
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001052 * Initialize the device structure with information about the device's
Linus Torvalds1da177e2005-04-16 15:20:36 -07001053 * vendor,class,memory and IO-space addresses,IRQ lines etc.
1054 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +08001055 * Returns 0 on success and negative if unknown type of device (not normal,
1056 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001057 */
Yu Zhao480b93b2009-03-20 11:25:14 +08001058int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001059{
1060 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +08001061 u8 hdr_type;
1062 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -05001063 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001064 struct pci_bus_region region;
1065 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +08001066
1067 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1068 return -EIO;
1069
1070 dev->sysdata = dev->bus->sysdata;
1071 dev->dev.parent = dev->bus->bridge;
1072 dev->dev.bus = &pci_bus_type;
1073 dev->hdr_type = hdr_type & 0x7f;
1074 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001075 dev->error_state = pci_channel_io_normal;
1076 set_pcie_port_type(dev);
1077
1078 list_for_each_entry(slot, &dev->bus->slots, list)
1079 if (PCI_SLOT(dev->devfn) == slot->number)
1080 dev->slot = slot;
1081
1082 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1083 set this higher, assuming the system even supports it. */
1084 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001085
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001086 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1087 dev->bus->number, PCI_SLOT(dev->devfn),
1088 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001089
1090 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001091 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001092 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001093
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001094 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1095 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001096
Yu Zhao853346e2009-03-21 22:05:11 +08001097 /* need to have dev->class ready */
1098 dev->cfg_size = pci_cfg_space_size(dev);
1099
Linus Torvalds1da177e2005-04-16 15:20:36 -07001100 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001101 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001102
1103 /* Early fixups, before probing the BARs */
1104 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001105 /* device class may be changed after fixup */
1106 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001107
1108 switch (dev->hdr_type) { /* header type */
1109 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1110 if (class == PCI_CLASS_BRIDGE_PCI)
1111 goto bad;
1112 pci_read_irq(dev);
1113 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1114 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1115 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001116
1117 /*
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001118 * Do the ugly legacy mode stuff here rather than broken chip
1119 * quirk code. Legacy mode ATA controllers have fixed
1120 * addresses. These are not always echoed in BAR0-3, and
1121 * BAR0-3 in a few cases contain junk!
Alan Cox368c73d2006-10-04 00:41:26 +01001122 */
1123 if (class == PCI_CLASS_STORAGE_IDE) {
1124 u8 progif;
1125 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1126 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001127 region.start = 0x1F0;
1128 region.end = 0x1F7;
1129 res = &dev->resource[0];
1130 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001131 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001132 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1133 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001134 region.start = 0x3F6;
1135 region.end = 0x3F6;
1136 res = &dev->resource[1];
1137 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001138 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001139 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1140 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001141 }
1142 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001143 region.start = 0x170;
1144 region.end = 0x177;
1145 res = &dev->resource[2];
1146 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001147 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001148 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1149 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001150 region.start = 0x376;
1151 region.end = 0x376;
1152 res = &dev->resource[3];
1153 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001154 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001155 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1156 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001157 }
1158 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001159 break;
1160
1161 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1162 if (class != PCI_CLASS_BRIDGE_PCI)
1163 goto bad;
1164 /* The PCI-to-PCI bridge spec requires that subtractive
1165 decoding (i.e. transparent) bridge must have programming
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001166 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001167 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001168 dev->transparent = ((dev->class & 0xff) == 1);
1169 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001170 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001171 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1172 if (pos) {
1173 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1174 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1175 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001176 break;
1177
1178 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1179 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1180 goto bad;
1181 pci_read_irq(dev);
1182 pci_read_bases(dev, 1, 0);
1183 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1184 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1185 break;
1186
1187 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001188 dev_err(&dev->dev, "unknown header type %02x, "
1189 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001190 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001191
1192 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001193 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1194 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001195 dev->class = PCI_CLASS_NOT_DEFINED;
1196 }
1197
1198 /* We found a fine healthy device, go go go... */
1199 return 0;
1200}
1201
Zhao, Yu201de562008-10-13 19:49:55 +08001202static void pci_release_capabilities(struct pci_dev *dev)
1203{
1204 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001205 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001206 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001207}
1208
Linus Torvalds1da177e2005-04-16 15:20:36 -07001209/**
1210 * pci_release_dev - free a pci device structure when all users of it are finished.
1211 * @dev: device that's been disconnected
1212 *
1213 * Will be called only by the device core when all users of this pci device are
1214 * done.
1215 */
1216static void pci_release_dev(struct device *dev)
1217{
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001218 struct pci_dev *pci_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001219
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001220 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001221 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001222 pci_release_of_node(pci_dev);
Sebastian Ott6ae32c52013-06-04 19:18:14 +02001223 pcibios_release_device(pci_dev);
Gu Zheng8b1fce02013-05-25 21:48:31 +08001224 pci_bus_put(pci_dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001225 kfree(pci_dev);
1226}
1227
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001228struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
Michael Ellerman65891212007-04-05 17:19:08 +10001229{
1230 struct pci_dev *dev;
1231
1232 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1233 if (!dev)
1234 return NULL;
1235
Michael Ellerman65891212007-04-05 17:19:08 +10001236 INIT_LIST_HEAD(&dev->bus_list);
Brian King88e7b162013-04-08 03:05:07 +00001237 dev->dev.type = &pci_dev_type;
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001238 dev->bus = pci_bus_get(bus);
Michael Ellerman65891212007-04-05 17:19:08 +10001239
1240 return dev;
1241}
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001242EXPORT_SYMBOL(pci_alloc_dev);
1243
Yinghai Luefdc87d2012-01-27 10:55:10 -08001244bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1245 int crs_timeout)
1246{
1247 int delay = 1;
1248
1249 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1250 return false;
1251
1252 /* some broken boards return 0 or ~0 if a slot is empty: */
1253 if (*l == 0xffffffff || *l == 0x00000000 ||
1254 *l == 0x0000ffff || *l == 0xffff0000)
1255 return false;
1256
1257 /* Configuration request Retry Status */
1258 while (*l == 0xffff0001) {
1259 if (!crs_timeout)
1260 return false;
1261
1262 msleep(delay);
1263 delay *= 2;
1264 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1265 return false;
1266 /* Card hasn't responded in 60 seconds? Must be stuck. */
1267 if (delay > crs_timeout) {
1268 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1269 "responding\n", pci_domain_nr(bus),
1270 bus->number, PCI_SLOT(devfn),
1271 PCI_FUNC(devfn));
1272 return false;
1273 }
1274 }
1275
1276 return true;
1277}
1278EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1279
Linus Torvalds1da177e2005-04-16 15:20:36 -07001280/*
1281 * Read the config data for a PCI device, sanity-check it
1282 * and fill in the dev structure...
1283 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001284static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001285{
1286 struct pci_dev *dev;
1287 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001288
Yinghai Luefdc87d2012-01-27 10:55:10 -08001289 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001290 return NULL;
1291
Gu Zheng8b1fce02013-05-25 21:48:31 +08001292 dev = pci_alloc_dev(bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001293 if (!dev)
1294 return NULL;
1295
Linus Torvalds1da177e2005-04-16 15:20:36 -07001296 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001297 dev->vendor = l & 0xffff;
1298 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001299
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001300 pci_set_of_node(dev);
1301
Yu Zhao480b93b2009-03-20 11:25:14 +08001302 if (pci_setup_device(dev)) {
Gu Zheng8b1fce02013-05-25 21:48:31 +08001303 pci_bus_put(dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001304 kfree(dev);
1305 return NULL;
1306 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001307
1308 return dev;
1309}
1310
Zhao, Yu201de562008-10-13 19:49:55 +08001311static void pci_init_capabilities(struct pci_dev *dev)
1312{
1313 /* MSI/MSI-X list */
1314 pci_msi_init_pci_dev(dev);
1315
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001316 /* Buffers for saving PCIe and PCI-X capabilities */
1317 pci_allocate_cap_save_buffers(dev);
1318
Zhao, Yu201de562008-10-13 19:49:55 +08001319 /* Power Management */
1320 pci_pm_init(dev);
1321
1322 /* Vital Product Data */
1323 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001324
1325 /* Alternative Routing-ID Forwarding */
Yijing Wang31ab2472013-01-15 11:12:17 +08001326 pci_configure_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001327
1328 /* Single Root I/O Virtualization */
1329 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001330
1331 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001332 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001333}
1334
Sam Ravnborg96bde062007-03-26 21:53:30 -08001335void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001336{
Yinghai Lu4f535092013-01-21 13:20:52 -08001337 int ret;
1338
Linus Torvalds1da177e2005-04-16 15:20:36 -07001339 device_initialize(&dev->dev);
1340 dev->dev.release = pci_release_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001341
Yinghai Lu7629d192013-01-21 13:20:44 -08001342 set_dev_node(&dev->dev, pcibus_to_node(bus));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001343 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001344 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001345 dev->dev.coherent_dma_mask = 0xffffffffull;
1346
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001347 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001348 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001349
Linus Torvalds1da177e2005-04-16 15:20:36 -07001350 /* Fix up broken headers */
1351 pci_fixup_device(pci_fixup_header, dev);
1352
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001353 /* moved out from quirk header fixup code */
1354 pci_reassigndev_resource_alignment(dev);
1355
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001356 /* Clear the state_saved flag. */
1357 dev->state_saved = false;
1358
Zhao, Yu201de562008-10-13 19:49:55 +08001359 /* Initialize various capabilities */
1360 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001361
Linus Torvalds1da177e2005-04-16 15:20:36 -07001362 /*
1363 * Add the device to our list of discovered devices
1364 * and the bus list for fixup functions, etc.
1365 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001366 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001367 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001368 up_write(&pci_bus_sem);
Yinghai Lu4f535092013-01-21 13:20:52 -08001369
Yinghai Lu4f535092013-01-21 13:20:52 -08001370 ret = pcibios_add_device(dev);
1371 WARN_ON(ret < 0);
1372
1373 /* Notifier could use PCI capabilities */
1374 dev->match_driver = false;
1375 ret = device_add(&dev->dev);
1376 WARN_ON(ret < 0);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001377}
1378
Sam Ravnborg451124a2008-02-02 22:33:43 +01001379struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001380{
1381 struct pci_dev *dev;
1382
Trent Piepho90bdb312009-03-20 14:56:00 -06001383 dev = pci_get_slot(bus, devfn);
1384 if (dev) {
1385 pci_dev_put(dev);
1386 return dev;
1387 }
1388
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001389 dev = pci_scan_device(bus, devfn);
1390 if (!dev)
1391 return NULL;
1392
1393 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001394
1395 return dev;
1396}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001397EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001398
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001399static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001400{
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001401 int pos;
1402 u16 cap = 0;
1403 unsigned next_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001404
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001405 if (pci_ari_enabled(bus)) {
1406 if (!dev)
1407 return 0;
1408 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1409 if (!pos)
1410 return 0;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001411
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001412 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1413 next_fn = PCI_ARI_CAP_NFN(cap);
1414 if (next_fn <= fn)
1415 return 0; /* protect against malformed list */
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001416
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001417 return next_fn;
1418 }
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001419
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001420 /* dev may be NULL for non-contiguous multifunction devices */
1421 if (!dev || dev->multifunction)
1422 return (fn + 1) % 8;
1423
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001424 return 0;
1425}
1426
1427static int only_one_child(struct pci_bus *bus)
1428{
1429 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001430
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001431 if (!parent || !pci_is_pcie(parent))
1432 return 0;
Yijing Wang62f87c02012-07-24 17:20:03 +08001433 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001434 return 1;
Yijing Wang62f87c02012-07-24 17:20:03 +08001435 if (pci_pcie_type(parent) == PCI_EXP_TYPE_DOWNSTREAM &&
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001436 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001437 return 1;
1438 return 0;
1439}
1440
Linus Torvalds1da177e2005-04-16 15:20:36 -07001441/**
1442 * pci_scan_slot - scan a PCI slot on a bus for devices.
1443 * @bus: PCI bus to scan
1444 * @devfn: slot number to scan (must have zero function.)
1445 *
1446 * Scan a PCI slot on the specified PCI bus for devices, adding
1447 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001448 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001449 *
1450 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001451 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001452int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001453{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001454 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001455 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001456
1457 if (only_one_child(bus) && (devfn > 0))
1458 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001459
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001460 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001461 if (!dev)
1462 return 0;
1463 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001464 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001465
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001466 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001467 dev = pci_scan_single_device(bus, devfn + fn);
1468 if (dev) {
1469 if (!dev->is_added)
1470 nr++;
1471 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001472 }
1473 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001474
Shaohua Li149e1632008-07-23 10:32:31 +08001475 /* only one slot has pcie device */
1476 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001477 pcie_aspm_init_link_state(bus->self);
1478
Linus Torvalds1da177e2005-04-16 15:20:36 -07001479 return nr;
1480}
1481
Jon Masonb03e7492011-07-20 15:20:54 -05001482static int pcie_find_smpss(struct pci_dev *dev, void *data)
1483{
1484 u8 *smpss = data;
1485
1486 if (!pci_is_pcie(dev))
1487 return 0;
1488
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001489 /*
1490 * We don't have a way to change MPS settings on devices that have
1491 * drivers attached. A hot-added device might support only the minimum
1492 * MPS setting (MPS=128). Therefore, if the fabric contains a bridge
1493 * where devices may be hot-added, we limit the fabric MPS to 128 so
1494 * hot-added devices will work correctly.
1495 *
1496 * However, if we hot-add a device to a slot directly below a Root
1497 * Port, it's impossible for there to be other existing devices below
1498 * the port. We don't limit the MPS in this case because we can
1499 * reconfigure MPS on both the Root Port and the hot-added device,
1500 * and there are no other devices involved.
1501 *
1502 * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
Jon Masonb03e7492011-07-20 15:20:54 -05001503 */
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001504 if (dev->is_hotplug_bridge &&
1505 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
Jon Masonb03e7492011-07-20 15:20:54 -05001506 *smpss = 0;
1507
1508 if (*smpss > dev->pcie_mpss)
1509 *smpss = dev->pcie_mpss;
1510
1511 return 0;
1512}
1513
1514static void pcie_write_mps(struct pci_dev *dev, int mps)
1515{
Jon Mason62f392e2011-10-14 14:56:14 -05001516 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001517
1518 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001519 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001520
Yijing Wang62f87c02012-07-24 17:20:03 +08001521 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1522 dev->bus->self)
Jon Mason62f392e2011-10-14 14:56:14 -05001523 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001524 * downstream communication will never be larger than
1525 * the MRRS. So, the MPS only needs to be configured
1526 * for the upstream communication. This being the case,
1527 * walk from the top down and set the MPS of the child
1528 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001529 *
1530 * Configure the device MPS with the smaller of the
1531 * device MPSS or the bridge MPS (which is assumed to be
1532 * properly configured at this point to the largest
1533 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001534 */
Jon Mason62f392e2011-10-14 14:56:14 -05001535 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001536 }
1537
1538 rc = pcie_set_mps(dev, mps);
1539 if (rc)
1540 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1541}
1542
Jon Mason62f392e2011-10-14 14:56:14 -05001543static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001544{
Jon Mason62f392e2011-10-14 14:56:14 -05001545 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001546
Jon Masoned2888e2011-09-08 16:41:18 -05001547 /* In the "safe" case, do not configure the MRRS. There appear to be
1548 * issues with setting MRRS to 0 on a number of devices.
1549 */
Jon Masoned2888e2011-09-08 16:41:18 -05001550 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1551 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001552
Jon Masoned2888e2011-09-08 16:41:18 -05001553 /* For Max performance, the MRRS must be set to the largest supported
1554 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001555 * device or the bus can support. This should already be properly
1556 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001557 */
Jon Mason62f392e2011-10-14 14:56:14 -05001558 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001559
1560 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001561 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001562 * If the MRRS value provided is not acceptable (e.g., too large),
1563 * shrink the value until it is acceptable to the HW.
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001564 */
Jon Masonb03e7492011-07-20 15:20:54 -05001565 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1566 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001567 if (!rc)
1568 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001569
Jon Mason62f392e2011-10-14 14:56:14 -05001570 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001571 mrrs /= 2;
1572 }
Jon Mason62f392e2011-10-14 14:56:14 -05001573
1574 if (mrrs < 128)
1575 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1576 "safe value. If problems are experienced, try running "
1577 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001578}
1579
Yijing Wang5895af72013-08-26 16:33:06 +08001580static void pcie_bus_detect_mps(struct pci_dev *dev)
1581{
1582 struct pci_dev *bridge = dev->bus->self;
1583 int mps, p_mps;
1584
1585 if (!bridge)
1586 return;
1587
1588 mps = pcie_get_mps(dev);
1589 p_mps = pcie_get_mps(bridge);
1590
1591 if (mps != p_mps)
1592 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",
1593 mps, pci_name(bridge), p_mps);
1594}
1595
Jon Masonb03e7492011-07-20 15:20:54 -05001596static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1597{
Jon Masona513a99a72011-10-14 14:56:16 -05001598 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001599
1600 if (!pci_is_pcie(dev))
1601 return 0;
1602
Yijing Wang5895af72013-08-26 16:33:06 +08001603 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1604 pcie_bus_detect_mps(dev);
1605 return 0;
1606 }
1607
Jon Masona513a99a72011-10-14 14:56:16 -05001608 mps = 128 << *(u8 *)data;
1609 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001610
1611 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001612 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001613
Bjorn Helgaas2c25e342013-08-22 11:24:43 +08001614 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), "
Jon Masona513a99a72011-10-14 14:56:16 -05001615 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1616 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001617
1618 return 0;
1619}
1620
Jon Masona513a99a72011-10-14 14:56:16 -05001621/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001622 * parents then children fashion. If this changes, then this code will not
1623 * work as designed.
1624 */
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001625void pcie_bus_configure_settings(struct pci_bus *bus)
Jon Masonb03e7492011-07-20 15:20:54 -05001626{
Jon Mason5f39e672011-10-03 09:50:20 -05001627 u8 smpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001628
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001629 if (!bus->self)
1630 return;
1631
Jon Masonb03e7492011-07-20 15:20:54 -05001632 if (!pci_is_pcie(bus->self))
1633 return;
1634
Jon Mason5f39e672011-10-03 09:50:20 -05001635 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
Jon Mason33154722013-08-26 16:33:05 +08001636 * to be aware of the MPS of the destination. To work around this,
Jon Mason5f39e672011-10-03 09:50:20 -05001637 * simply force the MPS of the entire system to the smallest possible.
1638 */
1639 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1640 smpss = 0;
1641
Jon Masonb03e7492011-07-20 15:20:54 -05001642 if (pcie_bus_config == PCIE_BUS_SAFE) {
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001643 smpss = bus->self->pcie_mpss;
Jon Mason5f39e672011-10-03 09:50:20 -05001644
Jon Masonb03e7492011-07-20 15:20:54 -05001645 pcie_find_smpss(bus->self, &smpss);
1646 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1647 }
1648
1649 pcie_bus_configure_set(bus->self, &smpss);
1650 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1651}
Jon Masondebc3b72011-08-02 00:01:18 -05001652EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001653
Bill Pemberton15856ad2012-11-21 15:35:00 -05001654unsigned int pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001655{
Yinghai Lub918c622012-05-17 18:51:11 -07001656 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001657 struct pci_dev *dev;
1658
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001659 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001660
1661 /* Go find them, Rover! */
1662 for (devfn = 0; devfn < 0x100; devfn += 8)
1663 pci_scan_slot(bus, devfn);
1664
Yu Zhaoa28724b2009-03-20 11:25:13 +08001665 /* Reserve buses for SR-IOV capability. */
1666 max += pci_iov_bus_range(bus);
1667
Linus Torvalds1da177e2005-04-16 15:20:36 -07001668 /*
1669 * After performing arch-dependent fixup of the bus, look behind
1670 * all PCI-to-PCI bridges on this bus.
1671 */
Alex Chiang74710de2009-03-20 14:56:10 -06001672 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001673 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001674 pcibios_fixup_bus(bus);
Jiang Liu981cf9e2013-04-12 05:44:16 +00001675 bus->is_added = 1;
Alex Chiang74710de2009-03-20 14:56:10 -06001676 }
1677
Linus Torvalds1da177e2005-04-16 15:20:36 -07001678 for (pass=0; pass < 2; pass++)
1679 list_for_each_entry(dev, &bus->devices, bus_list) {
1680 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1681 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1682 max = pci_scan_bridge(bus, dev, max, pass);
1683 }
1684
1685 /*
1686 * We've scanned the bus and so we know all about what's on
1687 * the other side of any bridges that may be on this bus plus
1688 * any devices.
1689 *
1690 * Return how far we've got finding sub-buses.
1691 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001692 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001693 return max;
1694}
1695
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001696/**
1697 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
1698 * @bridge: Host bridge to set up.
1699 *
1700 * Default empty implementation. Replace with an architecture-specific setup
1701 * routine, if necessary.
1702 */
1703int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
1704{
1705 return 0;
1706}
1707
Jiang Liu10a95742013-04-12 05:44:20 +00001708void __weak pcibios_add_bus(struct pci_bus *bus)
1709{
1710}
1711
1712void __weak pcibios_remove_bus(struct pci_bus *bus)
1713{
1714}
1715
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001716struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1717 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001718{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001719 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001720 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001721 struct pci_bus *b, *b2;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001722 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001723 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001724 resource_size_t offset;
1725 char bus_addr[64];
1726 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001727
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001728 b = pci_alloc_bus();
1729 if (!b)
Yinghai Lu7b543662012-04-02 18:31:53 -07001730 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001731
1732 b->sysdata = sysdata;
1733 b->ops = ops;
Yinghai Lu4f535092013-01-21 13:20:52 -08001734 b->number = b->busn_res.start = bus;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001735 b2 = pci_find_bus(pci_domain_nr(b), bus);
1736 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001737 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001738 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001739 goto err_out;
1740 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001741
Yinghai Lu7b543662012-04-02 18:31:53 -07001742 bridge = pci_alloc_host_bridge(b);
1743 if (!bridge)
1744 goto err_out;
1745
1746 bridge->dev.parent = parent;
Jiang Liu70efde22013-06-07 16:16:51 -06001747 bridge->dev.release = pci_release_host_bridge_dev;
Yinghai Lu7b543662012-04-02 18:31:53 -07001748 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001749 error = pcibios_root_bridge_prepare(bridge);
Jiang Liu343df772013-06-07 01:10:08 +08001750 if (error) {
1751 kfree(bridge);
1752 goto err_out;
1753 }
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001754
Yinghai Lu7b543662012-04-02 18:31:53 -07001755 error = device_register(&bridge->dev);
Jiang Liu343df772013-06-07 01:10:08 +08001756 if (error) {
1757 put_device(&bridge->dev);
1758 goto err_out;
1759 }
Yinghai Lu7b543662012-04-02 18:31:53 -07001760 b->bridge = get_device(&bridge->dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001761 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001762 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001763
Yinghai Lu0d358f22008-02-19 03:20:41 -08001764 if (!parent)
1765 set_dev_node(b->bridge, pcibus_to_node(b));
1766
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001767 b->dev.class = &pcibus_class;
1768 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001769 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001770 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001771 if (error)
1772 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001773
Jiang Liu10a95742013-04-12 05:44:20 +00001774 pcibios_add_bus(b);
1775
Linus Torvalds1da177e2005-04-16 15:20:36 -07001776 /* Create legacy_io and legacy_mem files for this bus */
1777 pci_create_legacy_files(b);
1778
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001779 if (parent)
1780 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1781 else
1782 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1783
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001784 /* Add initial resources to the bus */
1785 list_for_each_entry_safe(window, n, resources, list) {
1786 list_move_tail(&window->list, &bridge->windows);
1787 res = window->res;
1788 offset = window->offset;
Yinghai Luf848ffb2012-05-17 18:51:12 -07001789 if (res->flags & IORESOURCE_BUS)
1790 pci_bus_insert_busn_res(b, bus, res->end);
1791 else
1792 pci_bus_add_resource(b, res, 0);
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001793 if (offset) {
1794 if (resource_type(res) == IORESOURCE_IO)
1795 fmt = " (bus address [%#06llx-%#06llx])";
1796 else
1797 fmt = " (bus address [%#010llx-%#010llx])";
1798 snprintf(bus_addr, sizeof(bus_addr), fmt,
1799 (unsigned long long) (res->start - offset),
1800 (unsigned long long) (res->end - offset));
1801 } else
1802 bus_addr[0] = '\0';
1803 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001804 }
1805
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001806 down_write(&pci_bus_sem);
1807 list_add_tail(&b->node, &pci_root_buses);
1808 up_write(&pci_bus_sem);
1809
Linus Torvalds1da177e2005-04-16 15:20:36 -07001810 return b;
1811
Linus Torvalds1da177e2005-04-16 15:20:36 -07001812class_dev_reg_err:
Yinghai Lu7b543662012-04-02 18:31:53 -07001813 put_device(&bridge->dev);
1814 device_unregister(&bridge->dev);
Yinghai Lu7b543662012-04-02 18:31:53 -07001815err_out:
1816 kfree(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001817 return NULL;
1818}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001819
Yinghai Lu98a35832012-05-18 11:35:50 -06001820int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1821{
1822 struct resource *res = &b->busn_res;
1823 struct resource *parent_res, *conflict;
1824
1825 res->start = bus;
1826 res->end = bus_max;
1827 res->flags = IORESOURCE_BUS;
1828
1829 if (!pci_is_root_bus(b))
1830 parent_res = &b->parent->busn_res;
1831 else {
1832 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1833 res->flags |= IORESOURCE_PCI_FIXED;
1834 }
1835
Andreas Noeverced04d12014-01-23 21:59:24 +01001836 conflict = request_resource_conflict(parent_res, res);
Yinghai Lu98a35832012-05-18 11:35:50 -06001837
1838 if (conflict)
1839 dev_printk(KERN_DEBUG, &b->dev,
1840 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1841 res, pci_is_root_bus(b) ? "domain " : "",
1842 parent_res, conflict->name, conflict);
Yinghai Lu98a35832012-05-18 11:35:50 -06001843
1844 return conflict == NULL;
1845}
1846
1847int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1848{
1849 struct resource *res = &b->busn_res;
1850 struct resource old_res = *res;
1851 resource_size_t size;
1852 int ret;
1853
1854 if (res->start > bus_max)
1855 return -EINVAL;
1856
1857 size = bus_max - res->start + 1;
1858 ret = adjust_resource(res, res->start, size);
1859 dev_printk(KERN_DEBUG, &b->dev,
1860 "busn_res: %pR end %s updated to %02x\n",
1861 &old_res, ret ? "can not be" : "is", bus_max);
1862
1863 if (!ret && !res->parent)
1864 pci_bus_insert_busn_res(b, res->start, res->end);
1865
1866 return ret;
1867}
1868
1869void pci_bus_release_busn_res(struct pci_bus *b)
1870{
1871 struct resource *res = &b->busn_res;
1872 int ret;
1873
1874 if (!res->flags || !res->parent)
1875 return;
1876
1877 ret = release_resource(res);
1878 dev_printk(KERN_DEBUG, &b->dev,
1879 "busn_res: %pR %s released\n",
1880 res, ret ? "can not be" : "is");
1881}
1882
Bill Pemberton15856ad2012-11-21 15:35:00 -05001883struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001884 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1885{
Yinghai Lu4d99f522012-05-17 18:51:12 -07001886 struct pci_host_bridge_window *window;
1887 bool found = false;
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001888 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07001889 int max;
1890
1891 list_for_each_entry(window, resources, list)
1892 if (window->res->flags & IORESOURCE_BUS) {
1893 found = true;
1894 break;
1895 }
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001896
1897 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1898 if (!b)
1899 return NULL;
1900
Yinghai Lu4d99f522012-05-17 18:51:12 -07001901 if (!found) {
1902 dev_info(&b->dev,
1903 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1904 bus);
1905 pci_bus_insert_busn_res(b, bus, 255);
1906 }
1907
1908 max = pci_scan_child_bus(b);
1909
1910 if (!found)
1911 pci_bus_update_busn_res_end(b, max);
1912
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001913 pci_bus_add_devices(b);
1914 return b;
1915}
1916EXPORT_SYMBOL(pci_scan_root_bus);
1917
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001918/* Deprecated; use pci_scan_root_bus() instead */
Bill Pemberton15856ad2012-11-21 15:35:00 -05001919struct pci_bus *pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001920 int bus, struct pci_ops *ops, void *sysdata)
1921{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001922 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001923 struct pci_bus *b;
1924
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001925 pci_add_resource(&resources, &ioport_resource);
1926 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001927 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001928 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001929 if (b)
Yinghai Lu857c3b62012-05-17 18:51:12 -07001930 pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001931 else
1932 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001933 return b;
1934}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001935EXPORT_SYMBOL(pci_scan_bus_parented);
1936
Bill Pemberton15856ad2012-11-21 15:35:00 -05001937struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001938 void *sysdata)
1939{
1940 LIST_HEAD(resources);
1941 struct pci_bus *b;
1942
1943 pci_add_resource(&resources, &ioport_resource);
1944 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001945 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001946 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1947 if (b) {
Yinghai Lu857c3b62012-05-17 18:51:12 -07001948 pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001949 pci_bus_add_devices(b);
1950 } else {
1951 pci_free_resource_list(&resources);
1952 }
1953 return b;
1954}
1955EXPORT_SYMBOL(pci_scan_bus);
1956
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001957/**
Yinghai Lu2f320522012-01-21 02:08:22 -08001958 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1959 * @bridge: PCI bridge for the bus to scan
1960 *
1961 * Scan a PCI bus and child buses for new devices, add them,
1962 * and enable them, resizing bridge mmio/io resource if necessary
1963 * and possible. The caller must ensure the child devices are already
1964 * removed for resizing to occur.
1965 *
1966 * Returns the max number of subordinate bus discovered.
1967 */
1968unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1969{
1970 unsigned int max;
1971 struct pci_bus *bus = bridge->subordinate;
1972
1973 max = pci_scan_child_bus(bus);
1974
1975 pci_assign_unassigned_bridge_resources(bridge);
1976
1977 pci_bus_add_devices(bus);
1978
1979 return max;
1980}
1981
Yinghai Lua5213a32012-10-30 14:31:21 -06001982/**
1983 * pci_rescan_bus - scan a PCI bus for devices.
1984 * @bus: PCI bus to scan
1985 *
1986 * Scan a PCI bus and child buses for new devices, adds them,
1987 * and enables them.
1988 *
1989 * Returns the max number of subordinate bus discovered.
1990 */
1991unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
1992{
1993 unsigned int max;
1994
1995 max = pci_scan_child_bus(bus);
1996 pci_assign_unassigned_bus_resources(bus);
1997 pci_bus_add_devices(bus);
1998
1999 return max;
2000}
2001EXPORT_SYMBOL_GPL(pci_rescan_bus);
2002
Linus Torvalds1da177e2005-04-16 15:20:36 -07002003EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002004EXPORT_SYMBOL(pci_scan_slot);
2005EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002006EXPORT_SYMBOL_GPL(pci_scan_child_bus);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002007
Rafael J. Wysocki9d169472014-01-10 15:22:18 +01002008/*
2009 * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
2010 * routines should always be executed under this mutex.
2011 */
2012static DEFINE_MUTEX(pci_rescan_remove_lock);
2013
2014void pci_lock_rescan_remove(void)
2015{
2016 mutex_lock(&pci_rescan_remove_lock);
2017}
2018EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2019
2020void pci_unlock_rescan_remove(void)
2021{
2022 mutex_unlock(&pci_rescan_remove_lock);
2023}
2024EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2025
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002026static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002027{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002028 const struct pci_dev *a = to_pci_dev(d_a);
2029 const struct pci_dev *b = to_pci_dev(d_b);
2030
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002031 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2032 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2033
2034 if (a->bus->number < b->bus->number) return -1;
2035 else if (a->bus->number > b->bus->number) return 1;
2036
2037 if (a->devfn < b->devfn) return -1;
2038 else if (a->devfn > b->devfn) return 1;
2039
2040 return 0;
2041}
2042
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08002043void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002044{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002045 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002046}