blob: 96b954f55d0d4f6432928c8ab1eda5272d36b541 [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 Helgaas26370fc2014-04-14 15:26:50 -0600177 bool bar_too_big = false, bar_too_high = false, bar_invalid = 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) {
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600257 /* Above 32-bit boundary; try to reallocate */
Bjorn Helgaasc83bd902014-02-26 11:26:00 -0700258 res->flags |= IORESOURCE_UNSET;
Bjorn Helgaas72dc5602014-04-29 18:42:49 -0600259 res->start = 0;
260 res->end = sz64;
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600261 bar_too_high = true;
Bjorn Helgaas72dc5602014-04-29 18:42:49 -0600262 goto out;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400263 } else {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700264 region.start = l64;
265 region.end = l64 + sz64;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400266 }
267 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600268 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400269
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600270 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400271 goto fail;
272
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700273 region.start = l;
274 region.end = l + sz;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400275 }
276
Yinghai Lufc279852013-12-09 22:54:40 -0800277 pcibios_bus_to_resource(dev->bus, res, &region);
278 pcibios_resource_to_bus(dev->bus, &inverted_region, res);
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800279
280 /*
281 * If "A" is a BAR value (a bus address), "bus_to_resource(A)" is
282 * the corresponding resource address (the physical address used by
283 * the CPU. Converting that resource address back to a bus address
284 * should yield the original BAR value:
285 *
286 * resource_to_bus(bus_to_resource(A)) == A
287 *
288 * If it doesn't, CPU accesses to "bus_to_resource(A)" will not
289 * be claimed by the device.
290 */
291 if (inverted_region.start != region.start) {
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800292 res->flags |= IORESOURCE_UNSET;
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800293 res->start = 0;
Bjorn Helgaas26370fc2014-04-14 15:26:50 -0600294 res->end = region.end - region.start;
295 bar_invalid = true;
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800296 }
Kevin Hao96ddef22013-05-25 19:36:26 +0800297
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600298 goto out;
299
300
301fail:
302 res->flags = 0;
303out:
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100304 if (!dev->mmio_always_on &&
305 (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
Bjorn Helgaasbbffe432012-07-06 12:08:18 -0600306 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
307
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600308 if (bar_too_big)
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600309 dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
310 pos, (unsigned long long) sz64);
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600311 if (bar_too_high)
312 dev_info(&dev->dev, "reg 0x%x: can't handle BAR above 4G (bus address %#010llx)\n",
313 pos, (unsigned long long) l64);
Bjorn Helgaas26370fc2014-04-14 15:26:50 -0600314 if (bar_invalid)
315 dev_info(&dev->dev, "reg 0x%x: initial BAR value %#010llx invalid\n",
316 pos, (unsigned long long) region.start);
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600317 if (res->flags)
Kevin Hao33963e302013-05-25 19:36:25 +0800318 dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600319
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600320 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800321}
322
Linus Torvalds1da177e2005-04-16 15:20:36 -0700323static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
324{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400325 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400327 for (pos = 0; pos < howmany; pos++) {
328 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700329 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400330 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700331 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400332
Linus Torvalds1da177e2005-04-16 15:20:36 -0700333 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400334 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700335 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400336 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
337 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
338 IORESOURCE_SIZEALIGN;
339 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700340 }
341}
342
Bill Pemberton15856ad2012-11-21 15:35:00 -0500343static void pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700344{
345 struct pci_dev *dev = child->self;
346 u8 io_base_lo, io_limit_lo;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600347 unsigned long io_mask, io_granularity, base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700348 struct pci_bus_region region;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600349 struct resource *res;
350
351 io_mask = PCI_IO_RANGE_MASK;
352 io_granularity = 0x1000;
353 if (dev->io_window_1k) {
354 /* Support 1K I/O space granularity */
355 io_mask = PCI_IO_1K_RANGE_MASK;
356 io_granularity = 0x400;
357 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700358
Linus Torvalds1da177e2005-04-16 15:20:36 -0700359 res = child->resource[0];
360 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
361 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600362 base = (io_base_lo & io_mask) << 8;
363 limit = (io_limit_lo & io_mask) << 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700364
365 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
366 u16 io_base_hi, io_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600367
Linus Torvalds1da177e2005-04-16 15:20:36 -0700368 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
369 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600370 base |= ((unsigned long) io_base_hi << 16);
371 limit |= ((unsigned long) io_limit_hi << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700372 }
373
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600374 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700375 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700376 region.start = base;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600377 region.end = limit + io_granularity - 1;
Yinghai Lufc279852013-12-09 22:54:40 -0800378 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600379 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700380 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700381}
382
Bill Pemberton15856ad2012-11-21 15:35:00 -0500383static void pci_read_bridge_mmio(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700384{
385 struct pci_dev *dev = child->self;
386 u16 mem_base_lo, mem_limit_lo;
387 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700388 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700389 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700390
391 res = child->resource[1];
392 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
393 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600394 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
395 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600396 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700397 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700398 region.start = base;
399 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800400 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600401 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700402 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700403}
404
Bill Pemberton15856ad2012-11-21 15:35:00 -0500405static void pci_read_bridge_mmio_pref(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700406{
407 struct pci_dev *dev = child->self;
408 u16 mem_base_lo, mem_limit_lo;
409 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700410 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700411 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700412
413 res = child->resource[2];
414 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
415 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600416 base = ((unsigned long) mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
417 limit = ((unsigned long) mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700418
419 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
420 u32 mem_base_hi, mem_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600421
Linus Torvalds1da177e2005-04-16 15:20:36 -0700422 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
423 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
424
425 /*
426 * Some bridges set the base > limit by default, and some
427 * (broken) BIOSes do not initialize them. If we find
428 * this, just assume they are not being used.
429 */
430 if (mem_base_hi <= mem_limit_hi) {
431#if BITS_PER_LONG == 64
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600432 base |= ((unsigned long) mem_base_hi) << 32;
433 limit |= ((unsigned long) mem_limit_hi) << 32;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700434#else
435 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600436 dev_err(&dev->dev, "can't handle 64-bit "
437 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700438 return;
439 }
440#endif
441 }
442 }
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600443 if (base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700444 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
445 IORESOURCE_MEM | IORESOURCE_PREFETCH;
446 if (res->flags & PCI_PREF_RANGE_TYPE_64)
447 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700448 region.start = base;
449 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800450 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600451 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700452 }
453}
454
Bill Pemberton15856ad2012-11-21 15:35:00 -0500455void pci_read_bridge_bases(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700456{
457 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700458 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700459 int i;
460
461 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
462 return;
463
Yinghai Lub918c622012-05-17 18:51:11 -0700464 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
465 &child->busn_res,
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700466 dev->transparent ? " (subtractive decode)" : "");
467
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700468 pci_bus_remove_resources(child);
469 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
470 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
471
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700472 pci_read_bridge_io(child);
473 pci_read_bridge_mmio(child);
474 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700475
476 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700477 pci_bus_for_each_resource(child->parent, res, i) {
Bjorn Helgaasd739a092014-04-14 16:10:54 -0600478 if (res && res->flags) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700479 pci_bus_add_resource(child, res,
480 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700481 dev_printk(KERN_DEBUG, &dev->dev,
482 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700483 res);
484 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700485 }
486 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700487}
488
Bjorn Helgaas05013482013-06-05 14:22:11 -0600489static struct pci_bus *pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700490{
491 struct pci_bus *b;
492
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100493 b = kzalloc(sizeof(*b), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600494 if (!b)
495 return NULL;
496
497 INIT_LIST_HEAD(&b->node);
498 INIT_LIST_HEAD(&b->children);
499 INIT_LIST_HEAD(&b->devices);
500 INIT_LIST_HEAD(&b->slots);
501 INIT_LIST_HEAD(&b->resources);
502 b->max_bus_speed = PCI_SPEED_UNKNOWN;
503 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700504 return b;
505}
506
Jiang Liu70efde22013-06-07 16:16:51 -0600507static void pci_release_host_bridge_dev(struct device *dev)
508{
509 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
510
511 if (bridge->release_fn)
512 bridge->release_fn(bridge);
513
514 pci_free_resource_list(&bridge->windows);
515
516 kfree(bridge);
517}
518
Yinghai Lu7b543662012-04-02 18:31:53 -0700519static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
520{
521 struct pci_host_bridge *bridge;
522
523 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600524 if (!bridge)
525 return NULL;
Yinghai Lu7b543662012-04-02 18:31:53 -0700526
Bjorn Helgaas05013482013-06-05 14:22:11 -0600527 INIT_LIST_HEAD(&bridge->windows);
528 bridge->bus = b;
Yinghai Lu7b543662012-04-02 18:31:53 -0700529 return bridge;
530}
531
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700532static const unsigned char pcix_bus_speed[] = {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500533 PCI_SPEED_UNKNOWN, /* 0 */
534 PCI_SPEED_66MHz_PCIX, /* 1 */
535 PCI_SPEED_100MHz_PCIX, /* 2 */
536 PCI_SPEED_133MHz_PCIX, /* 3 */
537 PCI_SPEED_UNKNOWN, /* 4 */
538 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
539 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
540 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
541 PCI_SPEED_UNKNOWN, /* 8 */
542 PCI_SPEED_66MHz_PCIX_266, /* 9 */
543 PCI_SPEED_100MHz_PCIX_266, /* A */
544 PCI_SPEED_133MHz_PCIX_266, /* B */
545 PCI_SPEED_UNKNOWN, /* C */
546 PCI_SPEED_66MHz_PCIX_533, /* D */
547 PCI_SPEED_100MHz_PCIX_533, /* E */
548 PCI_SPEED_133MHz_PCIX_533 /* F */
549};
550
Jacob Keller343e51a2013-07-31 06:53:16 +0000551const unsigned char pcie_link_speed[] = {
Matthew Wilcox3749c512009-12-13 08:11:32 -0500552 PCI_SPEED_UNKNOWN, /* 0 */
553 PCIE_SPEED_2_5GT, /* 1 */
554 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500555 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500556 PCI_SPEED_UNKNOWN, /* 4 */
557 PCI_SPEED_UNKNOWN, /* 5 */
558 PCI_SPEED_UNKNOWN, /* 6 */
559 PCI_SPEED_UNKNOWN, /* 7 */
560 PCI_SPEED_UNKNOWN, /* 8 */
561 PCI_SPEED_UNKNOWN, /* 9 */
562 PCI_SPEED_UNKNOWN, /* A */
563 PCI_SPEED_UNKNOWN, /* B */
564 PCI_SPEED_UNKNOWN, /* C */
565 PCI_SPEED_UNKNOWN, /* D */
566 PCI_SPEED_UNKNOWN, /* E */
567 PCI_SPEED_UNKNOWN /* F */
568};
569
570void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
571{
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700572 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
Matthew Wilcox3749c512009-12-13 08:11:32 -0500573}
574EXPORT_SYMBOL_GPL(pcie_update_link_speed);
575
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500576static unsigned char agp_speeds[] = {
577 AGP_UNKNOWN,
578 AGP_1X,
579 AGP_2X,
580 AGP_4X,
581 AGP_8X
582};
583
584static enum pci_bus_speed agp_speed(int agp3, int agpstat)
585{
586 int index = 0;
587
588 if (agpstat & 4)
589 index = 3;
590 else if (agpstat & 2)
591 index = 2;
592 else if (agpstat & 1)
593 index = 1;
594 else
595 goto out;
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700596
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500597 if (agp3) {
598 index += 2;
599 if (index == 5)
600 index = 0;
601 }
602
603 out:
604 return agp_speeds[index];
605}
606
607
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500608static void pci_set_bus_speed(struct pci_bus *bus)
609{
610 struct pci_dev *bridge = bus->self;
611 int pos;
612
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500613 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
614 if (!pos)
615 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
616 if (pos) {
617 u32 agpstat, agpcmd;
618
619 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
620 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
621
622 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
623 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
624 }
625
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500626 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
627 if (pos) {
628 u16 status;
629 enum pci_bus_speed max;
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500630
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700631 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
632 &status);
633
634 if (status & PCI_X_SSTATUS_533MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500635 max = PCI_SPEED_133MHz_PCIX_533;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700636 } else if (status & PCI_X_SSTATUS_266MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500637 max = PCI_SPEED_133MHz_PCIX_266;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700638 } else if (status & PCI_X_SSTATUS_133MHZ) {
639 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500640 max = PCI_SPEED_133MHz_PCIX_ECC;
641 } else {
642 max = PCI_SPEED_133MHz_PCIX;
643 }
644 } else {
645 max = PCI_SPEED_66MHz_PCIX;
646 }
647
648 bus->max_bus_speed = max;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700649 bus->cur_bus_speed = pcix_bus_speed[
650 (status & PCI_X_SSTATUS_FREQ) >> 6];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500651
652 return;
653 }
654
Yijing Wangfdfe1512013-09-05 15:55:29 +0800655 if (pci_is_pcie(bridge)) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500656 u32 linkcap;
657 u16 linksta;
658
Jiang Liu59875ae2012-07-24 17:20:06 +0800659 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700660 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500661
Jiang Liu59875ae2012-07-24 17:20:06 +0800662 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500663 pcie_update_link_speed(bus, linksta);
664 }
665}
666
667
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700668static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
669 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700670{
671 struct pci_bus *child;
672 int i;
Yinghai Lu4f535092013-01-21 13:20:52 -0800673 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700674
675 /*
676 * Allocate a new bus, and inherit stuff from the parent..
677 */
678 child = pci_alloc_bus();
679 if (!child)
680 return NULL;
681
Linus Torvalds1da177e2005-04-16 15:20:36 -0700682 child->parent = parent;
683 child->ops = parent->ops;
Thierry Reding0cbdcfc2013-08-09 22:27:08 +0200684 child->msi = parent->msi;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700685 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200686 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700687
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400688 /* initialize some portions of the bus device, but don't register it
Yinghai Lu4f535092013-01-21 13:20:52 -0800689 * now as the parent is not properly set up yet.
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400690 */
691 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100692 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700693
694 /*
695 * Set up the primary, secondary and subordinate
696 * bus numbers.
697 */
Yinghai Lub918c622012-05-17 18:51:11 -0700698 child->number = child->busn_res.start = busnr;
699 child->primary = parent->busn_res.start;
700 child->busn_res.end = 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700701
Yinghai Lu4f535092013-01-21 13:20:52 -0800702 if (!bridge) {
703 child->dev.parent = parent->bridge;
704 goto add_dev;
705 }
Yu Zhao3789fa82008-11-22 02:41:07 +0800706
707 child->self = bridge;
708 child->bridge = get_device(&bridge->dev);
Yinghai Lu4f535092013-01-21 13:20:52 -0800709 child->dev.parent = child->bridge;
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +1000710 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500711 pci_set_bus_speed(child);
712
Linus Torvalds1da177e2005-04-16 15:20:36 -0700713 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800714 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700715 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
716 child->resource[i]->name = child->name;
717 }
718 bridge->subordinate = child;
719
Yinghai Lu4f535092013-01-21 13:20:52 -0800720add_dev:
721 ret = device_register(&child->dev);
722 WARN_ON(ret < 0);
723
Jiang Liu10a95742013-04-12 05:44:20 +0000724 pcibios_add_bus(child);
725
Yinghai Lu4f535092013-01-21 13:20:52 -0800726 /* Create legacy_io and legacy_mem files for this bus */
727 pci_create_legacy_files(child);
728
Linus Torvalds1da177e2005-04-16 15:20:36 -0700729 return child;
730}
731
Bjorn Helgaas10874f52014-04-14 16:11:40 -0600732struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700733{
734 struct pci_bus *child;
735
736 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700737 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800738 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700739 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800740 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700741 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700742 return child;
743}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -0600744EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700745
Linus Torvalds1da177e2005-04-16 15:20:36 -0700746/*
747 * If it's a bridge, configure it and scan the bus behind it.
748 * For CardBus bridges, we don't scan behind as the devices will
749 * be handled by the bridge driver itself.
750 *
751 * We need to process bridges in two passes -- first we scan those
752 * already configured by the BIOS and after we are done with all of
753 * them, we proceed to assigning numbers to the remaining buses in
754 * order to avoid overlaps between old and new bus numbers.
755 */
Bill Pemberton15856ad2012-11-21 15:35:00 -0500756int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700757{
758 struct pci_bus *child;
759 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100760 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700761 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600762 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100763 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700764
765 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600766 primary = buses & 0xFF;
767 secondary = (buses >> 8) & 0xFF;
768 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700769
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600770 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
771 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700772
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100773 if (!primary && (primary != bus->number) && secondary && subordinate) {
774 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
775 primary = bus->number;
776 }
777
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100778 /* Check if setup is sensible at all */
779 if (!pass &&
Yinghai Lu1965f662012-09-10 17:19:33 -0700780 (primary != bus->number || secondary <= bus->number ||
Andreas Noever1820ffd2014-01-23 21:59:25 +0100781 secondary > subordinate || subordinate > bus->busn_res.end)) {
Yinghai Lu1965f662012-09-10 17:19:33 -0700782 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
783 secondary, subordinate);
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100784 broken = 1;
785 }
786
Linus Torvalds1da177e2005-04-16 15:20:36 -0700787 /* Disable MasterAbortMode during probing to avoid reporting
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700788 of bus errors (in some architectures) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700789 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
790 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
791 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
792
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600793 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
794 !is_cardbus && !broken) {
795 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700796 /*
797 * Bus already configured by firmware, process it in the first
798 * pass and just note the configuration.
799 */
800 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000801 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700802
803 /*
Andreas Noever2ed85822014-01-23 21:59:22 +0100804 * The bus might already exist for two reasons: Either we are
805 * rescanning the bus or the bus is reachable through more than
806 * one bridge. The second case can happen with the i450NX
807 * chipset.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700808 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600809 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600810 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600811 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600812 if (!child)
813 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600814 child->primary = primary;
Yinghai Lubc76b732012-05-17 18:51:13 -0700815 pci_bus_insert_busn_res(child, secondary, subordinate);
Alex Chiang74710de2009-03-20 14:56:10 -0600816 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700817 }
818
Linus Torvalds1da177e2005-04-16 15:20:36 -0700819 cmax = pci_scan_child_bus(child);
Andreas Noeverc95b0bd2014-01-23 21:59:27 +0100820 if (cmax > subordinate)
821 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
822 subordinate, cmax);
823 /* subordinate should equal child->busn_res.end */
824 if (subordinate > max)
825 max = subordinate;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700826 } else {
827 /*
828 * We need to assign a number to this bus which we always
829 * do in the second pass.
830 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700831 if (!pass) {
Andreas Noever619c8c32014-01-23 21:59:23 +0100832 if (pcibios_assign_all_busses() || broken || is_cardbus)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700833 /* Temporarily disable forwarding of the
834 configuration cycles on all bridges in
835 this bus segment to avoid possible
836 conflicts in the second pass between two
837 bridges programmed with overlapping
838 bus ranges. */
839 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
840 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000841 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700842 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700843
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100844 if (max >= bus->busn_res.end) {
845 dev_warn(&dev->dev, "can't allocate child bus %02x from %pR\n",
846 max, &bus->busn_res);
847 goto out;
848 }
849
Linus Torvalds1da177e2005-04-16 15:20:36 -0700850 /* Clear errors */
851 pci_write_config_word(dev, PCI_STATUS, 0xffff);
852
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100853 /* The bus will already exist if we are rescanning */
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800854 child = pci_find_bus(pci_domain_nr(bus), max+1);
855 if (!child) {
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100856 child = pci_add_new_bus(bus, dev, max+1);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800857 if (!child)
858 goto out;
Andreas Noever1820ffd2014-01-23 21:59:25 +0100859 pci_bus_insert_busn_res(child, max+1,
860 bus->busn_res.end);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800861 }
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100862 max++;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700863 buses = (buses & 0xff000000)
864 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -0700865 | ((unsigned int)(child->busn_res.start) << 8)
866 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700867
868 /*
869 * yenta.c forces a secondary latency timer of 176.
870 * Copy that behaviour here.
871 */
872 if (is_cardbus) {
873 buses &= ~0xff000000;
874 buses |= CARDBUS_LATENCY_TIMER << 24;
875 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100876
Linus Torvalds1da177e2005-04-16 15:20:36 -0700877 /*
878 * We need to blast all three values with a single write.
879 */
880 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
881
882 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700883 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700884 max = pci_scan_child_bus(child);
885 } else {
886 /*
887 * For CardBus bridges, we leave 4 bus numbers
888 * as cards with a PCI-to-PCI bridge can be
889 * inserted later.
890 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100891 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
892 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700893 if (pci_find_bus(pci_domain_nr(bus),
894 max+i+1))
895 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100896 while (parent->parent) {
897 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -0700898 (parent->busn_res.end > max) &&
899 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +0100900 j = 1;
901 }
902 parent = parent->parent;
903 }
904 if (j) {
905 /*
906 * Often, there are two cardbus bridges
907 * -- try to leave one valid bus number
908 * for each one.
909 */
910 i /= 2;
911 break;
912 }
913 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700914 max += i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700915 }
916 /*
917 * Set the subordinate bus number to its real value.
918 */
Andreas Noever1820ffd2014-01-23 21:59:25 +0100919 if (max > bus->busn_res.end) {
920 dev_warn(&dev->dev, "max busn %02x is outside %pR\n",
921 max, &bus->busn_res);
922 max = bus->busn_res.end;
923 }
Yinghai Lubc76b732012-05-17 18:51:13 -0700924 pci_bus_update_busn_res_end(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700925 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
926 }
927
Gary Hadecb3576f2008-02-08 14:00:52 -0800928 sprintf(child->name,
929 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
930 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700931
Bernhard Kaindld55bef512007-07-30 20:35:13 +0200932 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100933 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -0700934 if ((child->busn_res.end > bus->busn_res.end) ||
935 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +0100936 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -0700937 (child->busn_res.end < bus->number)) {
938 dev_info(&child->dev, "%pR %s "
939 "hidden behind%s bridge %s %pR\n",
940 &child->busn_res,
941 (bus->number > child->busn_res.end &&
942 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800943 "wholly" : "partially",
944 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700945 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -0700946 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +0100947 }
948 bus = bus->parent;
949 }
950
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000951out:
952 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
953
Linus Torvalds1da177e2005-04-16 15:20:36 -0700954 return max;
955}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -0600956EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700957
958/*
959 * Read interrupt line and base address registers.
960 * The architecture-dependent code can tweak these, of course.
961 */
962static void pci_read_irq(struct pci_dev *dev)
963{
964 unsigned char irq;
965
966 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800967 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700968 if (irq)
969 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
970 dev->irq = irq;
971}
972
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000973void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800974{
975 int pos;
976 u16 reg16;
977
978 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
979 if (!pos)
980 return;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900981 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800982 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
Yijing Wang786e2282012-07-24 17:20:02 +0800983 pdev->pcie_flags_reg = reg16;
Jon Masonb03e7492011-07-20 15:20:54 -0500984 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
985 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800986}
987
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000988void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700989{
Eric W. Biederman28760482009-09-09 14:09:24 -0700990 u32 reg32;
991
Jiang Liu59875ae2012-07-24 17:20:06 +0800992 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
Eric W. Biederman28760482009-09-09 14:09:24 -0700993 if (reg32 & PCI_EXP_SLTCAP_HPC)
994 pdev->is_hotplug_bridge = 1;
995}
996
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700997
998/**
Alex Williamson78916b02014-05-05 14:20:51 -0600999 * pci_ext_cfg_is_aliased - is ext config space just an alias of std config?
1000 * @dev: PCI device
1001 *
1002 * PCI Express to PCI/PCI-X Bridge Specification, rev 1.0, 4.1.4 says that
1003 * when forwarding a type1 configuration request the bridge must check that
1004 * the extended register address field is zero. The bridge is not permitted
1005 * to forward the transactions and must handle it as an Unsupported Request.
1006 * Some bridges do not follow this rule and simply drop the extended register
1007 * bits, resulting in the standard config space being aliased, every 256
1008 * bytes across the entire configuration space. Test for this condition by
1009 * comparing the first dword of each potential alias to the vendor/device ID.
1010 * Known offenders:
1011 * ASM1083/1085 PCIe-to-PCI Reversible Bridge (1b21:1080, rev 01 & 03)
1012 * AMD/ATI SBx00 PCI to PCI Bridge (1002:4384, rev 40)
1013 */
1014static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
1015{
1016#ifdef CONFIG_PCI_QUIRKS
1017 int pos;
1018 u32 header, tmp;
1019
1020 pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
1021
1022 for (pos = PCI_CFG_SPACE_SIZE;
1023 pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
1024 if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
1025 || header != tmp)
1026 return false;
1027 }
1028
1029 return true;
1030#else
1031 return false;
1032#endif
1033}
1034
1035/**
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001036 * pci_cfg_space_size - get the configuration space size of the PCI device.
1037 * @dev: PCI device
1038 *
1039 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1040 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1041 * access it. Maybe we don't have a way to generate extended config space
1042 * accesses, or the device is behind a reverse Express bridge. So we try
1043 * reading the dword at 0x100 which must either be 0 or a valid extended
1044 * capability header.
1045 */
1046static int pci_cfg_space_size_ext(struct pci_dev *dev)
1047{
1048 u32 status;
1049 int pos = PCI_CFG_SPACE_SIZE;
1050
1051 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1052 goto fail;
Alex Williamson78916b02014-05-05 14:20:51 -06001053 if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001054 goto fail;
1055
1056 return PCI_CFG_SPACE_EXP_SIZE;
1057
1058 fail:
1059 return PCI_CFG_SPACE_SIZE;
1060}
1061
1062int pci_cfg_space_size(struct pci_dev *dev)
1063{
1064 int pos;
1065 u32 status;
1066 u16 class;
1067
1068 class = dev->class >> 8;
1069 if (class == PCI_CLASS_BRIDGE_HOST)
1070 return pci_cfg_space_size_ext(dev);
1071
1072 if (!pci_is_pcie(dev)) {
1073 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1074 if (!pos)
1075 goto fail;
1076
1077 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1078 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1079 goto fail;
1080 }
1081
1082 return pci_cfg_space_size_ext(dev);
1083
1084 fail:
1085 return PCI_CFG_SPACE_SIZE;
1086}
1087
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +02001088#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -08001089
Linus Torvalds1da177e2005-04-16 15:20:36 -07001090/**
1091 * pci_setup_device - fill in class and map information of a device
1092 * @dev: the device structure to fill
1093 *
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001094 * Initialize the device structure with information about the device's
Linus Torvalds1da177e2005-04-16 15:20:36 -07001095 * vendor,class,memory and IO-space addresses,IRQ lines etc.
1096 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +08001097 * Returns 0 on success and negative if unknown type of device (not normal,
1098 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001099 */
Yu Zhao480b93b2009-03-20 11:25:14 +08001100int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001101{
1102 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +08001103 u8 hdr_type;
1104 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -05001105 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001106 struct pci_bus_region region;
1107 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +08001108
1109 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1110 return -EIO;
1111
1112 dev->sysdata = dev->bus->sysdata;
1113 dev->dev.parent = dev->bus->bridge;
1114 dev->dev.bus = &pci_bus_type;
1115 dev->hdr_type = hdr_type & 0x7f;
1116 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001117 dev->error_state = pci_channel_io_normal;
1118 set_pcie_port_type(dev);
1119
1120 list_for_each_entry(slot, &dev->bus->slots, list)
1121 if (PCI_SLOT(dev->devfn) == slot->number)
1122 dev->slot = slot;
1123
1124 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1125 set this higher, assuming the system even supports it. */
1126 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001127
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001128 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1129 dev->bus->number, PCI_SLOT(dev->devfn),
1130 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001131
1132 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001133 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001134 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001135
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001136 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1137 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001138
Yu Zhao853346e2009-03-21 22:05:11 +08001139 /* need to have dev->class ready */
1140 dev->cfg_size = pci_cfg_space_size(dev);
1141
Linus Torvalds1da177e2005-04-16 15:20:36 -07001142 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001143 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001144
1145 /* Early fixups, before probing the BARs */
1146 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001147 /* device class may be changed after fixup */
1148 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001149
1150 switch (dev->hdr_type) { /* header type */
1151 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1152 if (class == PCI_CLASS_BRIDGE_PCI)
1153 goto bad;
1154 pci_read_irq(dev);
1155 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1156 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1157 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001158
1159 /*
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001160 * Do the ugly legacy mode stuff here rather than broken chip
1161 * quirk code. Legacy mode ATA controllers have fixed
1162 * addresses. These are not always echoed in BAR0-3, and
1163 * BAR0-3 in a few cases contain junk!
Alan Cox368c73d2006-10-04 00:41:26 +01001164 */
1165 if (class == PCI_CLASS_STORAGE_IDE) {
1166 u8 progif;
1167 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1168 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001169 region.start = 0x1F0;
1170 region.end = 0x1F7;
1171 res = &dev->resource[0];
1172 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001173 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001174 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1175 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001176 region.start = 0x3F6;
1177 region.end = 0x3F6;
1178 res = &dev->resource[1];
1179 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001180 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001181 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1182 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001183 }
1184 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001185 region.start = 0x170;
1186 region.end = 0x177;
1187 res = &dev->resource[2];
1188 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001189 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001190 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1191 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001192 region.start = 0x376;
1193 region.end = 0x376;
1194 res = &dev->resource[3];
1195 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001196 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001197 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1198 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001199 }
1200 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001201 break;
1202
1203 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1204 if (class != PCI_CLASS_BRIDGE_PCI)
1205 goto bad;
1206 /* The PCI-to-PCI bridge spec requires that subtractive
1207 decoding (i.e. transparent) bridge must have programming
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001208 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001209 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001210 dev->transparent = ((dev->class & 0xff) == 1);
1211 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001212 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001213 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1214 if (pos) {
1215 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1216 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1217 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001218 break;
1219
1220 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1221 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1222 goto bad;
1223 pci_read_irq(dev);
1224 pci_read_bases(dev, 1, 0);
1225 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1226 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1227 break;
1228
1229 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001230 dev_err(&dev->dev, "unknown header type %02x, "
1231 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001232 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001233
1234 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001235 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1236 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001237 dev->class = PCI_CLASS_NOT_DEFINED;
1238 }
1239
1240 /* We found a fine healthy device, go go go... */
1241 return 0;
1242}
1243
Zhao, Yu201de562008-10-13 19:49:55 +08001244static void pci_release_capabilities(struct pci_dev *dev)
1245{
1246 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001247 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001248 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001249}
1250
Linus Torvalds1da177e2005-04-16 15:20:36 -07001251/**
1252 * pci_release_dev - free a pci device structure when all users of it are finished.
1253 * @dev: device that's been disconnected
1254 *
1255 * Will be called only by the device core when all users of this pci device are
1256 * done.
1257 */
1258static void pci_release_dev(struct device *dev)
1259{
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001260 struct pci_dev *pci_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001261
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001262 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001263 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001264 pci_release_of_node(pci_dev);
Sebastian Ott6ae32c52013-06-04 19:18:14 +02001265 pcibios_release_device(pci_dev);
Gu Zheng8b1fce02013-05-25 21:48:31 +08001266 pci_bus_put(pci_dev->bus);
Alex Williamson782a9852014-05-20 08:53:21 -06001267 kfree(pci_dev->driver_override);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001268 kfree(pci_dev);
1269}
1270
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001271struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
Michael Ellerman65891212007-04-05 17:19:08 +10001272{
1273 struct pci_dev *dev;
1274
1275 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1276 if (!dev)
1277 return NULL;
1278
Michael Ellerman65891212007-04-05 17:19:08 +10001279 INIT_LIST_HEAD(&dev->bus_list);
Brian King88e7b162013-04-08 03:05:07 +00001280 dev->dev.type = &pci_dev_type;
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001281 dev->bus = pci_bus_get(bus);
Michael Ellerman65891212007-04-05 17:19:08 +10001282
1283 return dev;
1284}
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001285EXPORT_SYMBOL(pci_alloc_dev);
1286
Yinghai Luefdc87d2012-01-27 10:55:10 -08001287bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1288 int crs_timeout)
1289{
1290 int delay = 1;
1291
1292 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1293 return false;
1294
1295 /* some broken boards return 0 or ~0 if a slot is empty: */
1296 if (*l == 0xffffffff || *l == 0x00000000 ||
1297 *l == 0x0000ffff || *l == 0xffff0000)
1298 return false;
1299
1300 /* Configuration request Retry Status */
1301 while (*l == 0xffff0001) {
1302 if (!crs_timeout)
1303 return false;
1304
1305 msleep(delay);
1306 delay *= 2;
1307 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1308 return false;
1309 /* Card hasn't responded in 60 seconds? Must be stuck. */
1310 if (delay > crs_timeout) {
1311 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1312 "responding\n", pci_domain_nr(bus),
1313 bus->number, PCI_SLOT(devfn),
1314 PCI_FUNC(devfn));
1315 return false;
1316 }
1317 }
1318
1319 return true;
1320}
1321EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1322
Linus Torvalds1da177e2005-04-16 15:20:36 -07001323/*
1324 * Read the config data for a PCI device, sanity-check it
1325 * and fill in the dev structure...
1326 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001327static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001328{
1329 struct pci_dev *dev;
1330 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001331
Yinghai Luefdc87d2012-01-27 10:55:10 -08001332 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001333 return NULL;
1334
Gu Zheng8b1fce02013-05-25 21:48:31 +08001335 dev = pci_alloc_dev(bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001336 if (!dev)
1337 return NULL;
1338
Linus Torvalds1da177e2005-04-16 15:20:36 -07001339 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340 dev->vendor = l & 0xffff;
1341 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001342
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001343 pci_set_of_node(dev);
1344
Yu Zhao480b93b2009-03-20 11:25:14 +08001345 if (pci_setup_device(dev)) {
Gu Zheng8b1fce02013-05-25 21:48:31 +08001346 pci_bus_put(dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001347 kfree(dev);
1348 return NULL;
1349 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001350
1351 return dev;
1352}
1353
Zhao, Yu201de562008-10-13 19:49:55 +08001354static void pci_init_capabilities(struct pci_dev *dev)
1355{
1356 /* MSI/MSI-X list */
1357 pci_msi_init_pci_dev(dev);
1358
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001359 /* Buffers for saving PCIe and PCI-X capabilities */
1360 pci_allocate_cap_save_buffers(dev);
1361
Zhao, Yu201de562008-10-13 19:49:55 +08001362 /* Power Management */
1363 pci_pm_init(dev);
1364
1365 /* Vital Product Data */
1366 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001367
1368 /* Alternative Routing-ID Forwarding */
Yijing Wang31ab2472013-01-15 11:12:17 +08001369 pci_configure_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001370
1371 /* Single Root I/O Virtualization */
1372 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001373
1374 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001375 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001376}
1377
Sam Ravnborg96bde062007-03-26 21:53:30 -08001378void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001379{
Yinghai Lu4f535092013-01-21 13:20:52 -08001380 int ret;
1381
Linus Torvalds1da177e2005-04-16 15:20:36 -07001382 device_initialize(&dev->dev);
1383 dev->dev.release = pci_release_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001384
Yinghai Lu7629d192013-01-21 13:20:44 -08001385 set_dev_node(&dev->dev, pcibus_to_node(bus));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001386 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001387 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001388 dev->dev.coherent_dma_mask = 0xffffffffull;
1389
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001390 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001391 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001392
Linus Torvalds1da177e2005-04-16 15:20:36 -07001393 /* Fix up broken headers */
1394 pci_fixup_device(pci_fixup_header, dev);
1395
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001396 /* moved out from quirk header fixup code */
1397 pci_reassigndev_resource_alignment(dev);
1398
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001399 /* Clear the state_saved flag. */
1400 dev->state_saved = false;
1401
Zhao, Yu201de562008-10-13 19:49:55 +08001402 /* Initialize various capabilities */
1403 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001404
Linus Torvalds1da177e2005-04-16 15:20:36 -07001405 /*
1406 * Add the device to our list of discovered devices
1407 * and the bus list for fixup functions, etc.
1408 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001409 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001410 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001411 up_write(&pci_bus_sem);
Yinghai Lu4f535092013-01-21 13:20:52 -08001412
Yinghai Lu4f535092013-01-21 13:20:52 -08001413 ret = pcibios_add_device(dev);
1414 WARN_ON(ret < 0);
1415
1416 /* Notifier could use PCI capabilities */
1417 dev->match_driver = false;
1418 ret = device_add(&dev->dev);
1419 WARN_ON(ret < 0);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001420}
1421
Bjorn Helgaas10874f52014-04-14 16:11:40 -06001422struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001423{
1424 struct pci_dev *dev;
1425
Trent Piepho90bdb312009-03-20 14:56:00 -06001426 dev = pci_get_slot(bus, devfn);
1427 if (dev) {
1428 pci_dev_put(dev);
1429 return dev;
1430 }
1431
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001432 dev = pci_scan_device(bus, devfn);
1433 if (!dev)
1434 return NULL;
1435
1436 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001437
1438 return dev;
1439}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001440EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001441
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001442static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001443{
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001444 int pos;
1445 u16 cap = 0;
1446 unsigned next_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001447
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001448 if (pci_ari_enabled(bus)) {
1449 if (!dev)
1450 return 0;
1451 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1452 if (!pos)
1453 return 0;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001454
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001455 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1456 next_fn = PCI_ARI_CAP_NFN(cap);
1457 if (next_fn <= fn)
1458 return 0; /* protect against malformed list */
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001459
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001460 return next_fn;
1461 }
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001462
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001463 /* dev may be NULL for non-contiguous multifunction devices */
1464 if (!dev || dev->multifunction)
1465 return (fn + 1) % 8;
1466
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001467 return 0;
1468}
1469
1470static int only_one_child(struct pci_bus *bus)
1471{
1472 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001473
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001474 if (!parent || !pci_is_pcie(parent))
1475 return 0;
Yijing Wang62f87c02012-07-24 17:20:03 +08001476 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001477 return 1;
Yijing Wang62f87c02012-07-24 17:20:03 +08001478 if (pci_pcie_type(parent) == PCI_EXP_TYPE_DOWNSTREAM &&
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001479 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001480 return 1;
1481 return 0;
1482}
1483
Linus Torvalds1da177e2005-04-16 15:20:36 -07001484/**
1485 * pci_scan_slot - scan a PCI slot on a bus for devices.
1486 * @bus: PCI bus to scan
1487 * @devfn: slot number to scan (must have zero function.)
1488 *
1489 * Scan a PCI slot on the specified PCI bus for devices, adding
1490 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001491 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001492 *
1493 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001494 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001495int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001496{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001497 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001498 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001499
1500 if (only_one_child(bus) && (devfn > 0))
1501 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001502
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001503 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001504 if (!dev)
1505 return 0;
1506 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001507 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001508
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001509 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001510 dev = pci_scan_single_device(bus, devfn + fn);
1511 if (dev) {
1512 if (!dev->is_added)
1513 nr++;
1514 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001515 }
1516 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001517
Shaohua Li149e1632008-07-23 10:32:31 +08001518 /* only one slot has pcie device */
1519 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001520 pcie_aspm_init_link_state(bus->self);
1521
Linus Torvalds1da177e2005-04-16 15:20:36 -07001522 return nr;
1523}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -06001524EXPORT_SYMBOL(pci_scan_slot);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001525
Jon Masonb03e7492011-07-20 15:20:54 -05001526static int pcie_find_smpss(struct pci_dev *dev, void *data)
1527{
1528 u8 *smpss = data;
1529
1530 if (!pci_is_pcie(dev))
1531 return 0;
1532
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001533 /*
1534 * We don't have a way to change MPS settings on devices that have
1535 * drivers attached. A hot-added device might support only the minimum
1536 * MPS setting (MPS=128). Therefore, if the fabric contains a bridge
1537 * where devices may be hot-added, we limit the fabric MPS to 128 so
1538 * hot-added devices will work correctly.
1539 *
1540 * However, if we hot-add a device to a slot directly below a Root
1541 * Port, it's impossible for there to be other existing devices below
1542 * the port. We don't limit the MPS in this case because we can
1543 * reconfigure MPS on both the Root Port and the hot-added device,
1544 * and there are no other devices involved.
1545 *
1546 * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
Jon Masonb03e7492011-07-20 15:20:54 -05001547 */
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001548 if (dev->is_hotplug_bridge &&
1549 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
Jon Masonb03e7492011-07-20 15:20:54 -05001550 *smpss = 0;
1551
1552 if (*smpss > dev->pcie_mpss)
1553 *smpss = dev->pcie_mpss;
1554
1555 return 0;
1556}
1557
1558static void pcie_write_mps(struct pci_dev *dev, int mps)
1559{
Jon Mason62f392e2011-10-14 14:56:14 -05001560 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001561
1562 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001563 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001564
Yijing Wang62f87c02012-07-24 17:20:03 +08001565 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1566 dev->bus->self)
Jon Mason62f392e2011-10-14 14:56:14 -05001567 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001568 * downstream communication will never be larger than
1569 * the MRRS. So, the MPS only needs to be configured
1570 * for the upstream communication. This being the case,
1571 * walk from the top down and set the MPS of the child
1572 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001573 *
1574 * Configure the device MPS with the smaller of the
1575 * device MPSS or the bridge MPS (which is assumed to be
1576 * properly configured at this point to the largest
1577 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001578 */
Jon Mason62f392e2011-10-14 14:56:14 -05001579 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001580 }
1581
1582 rc = pcie_set_mps(dev, mps);
1583 if (rc)
1584 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1585}
1586
Jon Mason62f392e2011-10-14 14:56:14 -05001587static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001588{
Jon Mason62f392e2011-10-14 14:56:14 -05001589 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001590
Jon Masoned2888e2011-09-08 16:41:18 -05001591 /* In the "safe" case, do not configure the MRRS. There appear to be
1592 * issues with setting MRRS to 0 on a number of devices.
1593 */
Jon Masoned2888e2011-09-08 16:41:18 -05001594 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1595 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001596
Jon Masoned2888e2011-09-08 16:41:18 -05001597 /* For Max performance, the MRRS must be set to the largest supported
1598 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001599 * device or the bus can support. This should already be properly
1600 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001601 */
Jon Mason62f392e2011-10-14 14:56:14 -05001602 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001603
1604 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001605 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001606 * If the MRRS value provided is not acceptable (e.g., too large),
1607 * shrink the value until it is acceptable to the HW.
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001608 */
Jon Masonb03e7492011-07-20 15:20:54 -05001609 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1610 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001611 if (!rc)
1612 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001613
Jon Mason62f392e2011-10-14 14:56:14 -05001614 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001615 mrrs /= 2;
1616 }
Jon Mason62f392e2011-10-14 14:56:14 -05001617
1618 if (mrrs < 128)
1619 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1620 "safe value. If problems are experienced, try running "
1621 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001622}
1623
Yijing Wang5895af72013-08-26 16:33:06 +08001624static void pcie_bus_detect_mps(struct pci_dev *dev)
1625{
1626 struct pci_dev *bridge = dev->bus->self;
1627 int mps, p_mps;
1628
1629 if (!bridge)
1630 return;
1631
1632 mps = pcie_get_mps(dev);
1633 p_mps = pcie_get_mps(bridge);
1634
1635 if (mps != p_mps)
1636 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",
1637 mps, pci_name(bridge), p_mps);
1638}
1639
Jon Masonb03e7492011-07-20 15:20:54 -05001640static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1641{
Jon Masona513a992011-10-14 14:56:16 -05001642 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001643
1644 if (!pci_is_pcie(dev))
1645 return 0;
1646
Yijing Wang5895af72013-08-26 16:33:06 +08001647 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1648 pcie_bus_detect_mps(dev);
1649 return 0;
1650 }
1651
Jon Masona513a992011-10-14 14:56:16 -05001652 mps = 128 << *(u8 *)data;
1653 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001654
1655 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001656 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001657
Bjorn Helgaas2c25e342013-08-22 11:24:43 +08001658 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), "
Jon Masona513a992011-10-14 14:56:16 -05001659 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1660 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001661
1662 return 0;
1663}
1664
Jon Masona513a992011-10-14 14:56:16 -05001665/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001666 * parents then children fashion. If this changes, then this code will not
1667 * work as designed.
1668 */
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001669void pcie_bus_configure_settings(struct pci_bus *bus)
Jon Masonb03e7492011-07-20 15:20:54 -05001670{
Bjorn Helgaas1e358f92014-04-29 12:51:55 -06001671 u8 smpss = 0;
Jon Masonb03e7492011-07-20 15:20:54 -05001672
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001673 if (!bus->self)
1674 return;
1675
Jon Masonb03e7492011-07-20 15:20:54 -05001676 if (!pci_is_pcie(bus->self))
1677 return;
1678
Jon Mason5f39e672011-10-03 09:50:20 -05001679 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
Jon Mason33154722013-08-26 16:33:05 +08001680 * to be aware of the MPS of the destination. To work around this,
Jon Mason5f39e672011-10-03 09:50:20 -05001681 * simply force the MPS of the entire system to the smallest possible.
1682 */
1683 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1684 smpss = 0;
1685
Jon Masonb03e7492011-07-20 15:20:54 -05001686 if (pcie_bus_config == PCIE_BUS_SAFE) {
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001687 smpss = bus->self->pcie_mpss;
Jon Mason5f39e672011-10-03 09:50:20 -05001688
Jon Masonb03e7492011-07-20 15:20:54 -05001689 pcie_find_smpss(bus->self, &smpss);
1690 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1691 }
1692
1693 pcie_bus_configure_set(bus->self, &smpss);
1694 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1695}
Jon Masondebc3b72011-08-02 00:01:18 -05001696EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001697
Bill Pemberton15856ad2012-11-21 15:35:00 -05001698unsigned int pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001699{
Yinghai Lub918c622012-05-17 18:51:11 -07001700 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001701 struct pci_dev *dev;
1702
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001703 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001704
1705 /* Go find them, Rover! */
1706 for (devfn = 0; devfn < 0x100; devfn += 8)
1707 pci_scan_slot(bus, devfn);
1708
Yu Zhaoa28724b2009-03-20 11:25:13 +08001709 /* Reserve buses for SR-IOV capability. */
1710 max += pci_iov_bus_range(bus);
1711
Linus Torvalds1da177e2005-04-16 15:20:36 -07001712 /*
1713 * After performing arch-dependent fixup of the bus, look behind
1714 * all PCI-to-PCI bridges on this bus.
1715 */
Alex Chiang74710de2009-03-20 14:56:10 -06001716 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001717 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001718 pcibios_fixup_bus(bus);
Jiang Liu981cf9e2013-04-12 05:44:16 +00001719 bus->is_added = 1;
Alex Chiang74710de2009-03-20 14:56:10 -06001720 }
1721
Linus Torvalds1da177e2005-04-16 15:20:36 -07001722 for (pass=0; pass < 2; pass++)
1723 list_for_each_entry(dev, &bus->devices, bus_list) {
Yijing Wang6788a512014-05-04 12:23:38 +08001724 if (pci_is_bridge(dev))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001725 max = pci_scan_bridge(bus, dev, max, pass);
1726 }
1727
1728 /*
1729 * We've scanned the bus and so we know all about what's on
1730 * the other side of any bridges that may be on this bus plus
1731 * any devices.
1732 *
1733 * Return how far we've got finding sub-buses.
1734 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001735 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001736 return max;
1737}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -06001738EXPORT_SYMBOL_GPL(pci_scan_child_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001739
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001740/**
1741 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
1742 * @bridge: Host bridge to set up.
1743 *
1744 * Default empty implementation. Replace with an architecture-specific setup
1745 * routine, if necessary.
1746 */
1747int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
1748{
1749 return 0;
1750}
1751
Jiang Liu10a95742013-04-12 05:44:20 +00001752void __weak pcibios_add_bus(struct pci_bus *bus)
1753{
1754}
1755
1756void __weak pcibios_remove_bus(struct pci_bus *bus)
1757{
1758}
1759
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001760struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1761 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001762{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001763 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001764 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001765 struct pci_bus *b, *b2;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001766 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001767 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001768 resource_size_t offset;
1769 char bus_addr[64];
1770 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001771
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001772 b = pci_alloc_bus();
1773 if (!b)
Yinghai Lu7b543662012-04-02 18:31:53 -07001774 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001775
1776 b->sysdata = sysdata;
1777 b->ops = ops;
Yinghai Lu4f535092013-01-21 13:20:52 -08001778 b->number = b->busn_res.start = bus;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001779 b2 = pci_find_bus(pci_domain_nr(b), bus);
1780 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001781 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001782 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001783 goto err_out;
1784 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001785
Yinghai Lu7b543662012-04-02 18:31:53 -07001786 bridge = pci_alloc_host_bridge(b);
1787 if (!bridge)
1788 goto err_out;
1789
1790 bridge->dev.parent = parent;
Jiang Liu70efde22013-06-07 16:16:51 -06001791 bridge->dev.release = pci_release_host_bridge_dev;
Yinghai Lu7b543662012-04-02 18:31:53 -07001792 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001793 error = pcibios_root_bridge_prepare(bridge);
Jiang Liu343df772013-06-07 01:10:08 +08001794 if (error) {
1795 kfree(bridge);
1796 goto err_out;
1797 }
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001798
Yinghai Lu7b543662012-04-02 18:31:53 -07001799 error = device_register(&bridge->dev);
Jiang Liu343df772013-06-07 01:10:08 +08001800 if (error) {
1801 put_device(&bridge->dev);
1802 goto err_out;
1803 }
Yinghai Lu7b543662012-04-02 18:31:53 -07001804 b->bridge = get_device(&bridge->dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001805 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001806 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001807
Yinghai Lu0d358f22008-02-19 03:20:41 -08001808 if (!parent)
1809 set_dev_node(b->bridge, pcibus_to_node(b));
1810
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001811 b->dev.class = &pcibus_class;
1812 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001813 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001814 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001815 if (error)
1816 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001817
Jiang Liu10a95742013-04-12 05:44:20 +00001818 pcibios_add_bus(b);
1819
Linus Torvalds1da177e2005-04-16 15:20:36 -07001820 /* Create legacy_io and legacy_mem files for this bus */
1821 pci_create_legacy_files(b);
1822
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001823 if (parent)
1824 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1825 else
1826 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1827
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001828 /* Add initial resources to the bus */
1829 list_for_each_entry_safe(window, n, resources, list) {
1830 list_move_tail(&window->list, &bridge->windows);
1831 res = window->res;
1832 offset = window->offset;
Yinghai Luf848ffb2012-05-17 18:51:12 -07001833 if (res->flags & IORESOURCE_BUS)
1834 pci_bus_insert_busn_res(b, bus, res->end);
1835 else
1836 pci_bus_add_resource(b, res, 0);
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001837 if (offset) {
1838 if (resource_type(res) == IORESOURCE_IO)
1839 fmt = " (bus address [%#06llx-%#06llx])";
1840 else
1841 fmt = " (bus address [%#010llx-%#010llx])";
1842 snprintf(bus_addr, sizeof(bus_addr), fmt,
1843 (unsigned long long) (res->start - offset),
1844 (unsigned long long) (res->end - offset));
1845 } else
1846 bus_addr[0] = '\0';
1847 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001848 }
1849
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001850 down_write(&pci_bus_sem);
1851 list_add_tail(&b->node, &pci_root_buses);
1852 up_write(&pci_bus_sem);
1853
Linus Torvalds1da177e2005-04-16 15:20:36 -07001854 return b;
1855
Linus Torvalds1da177e2005-04-16 15:20:36 -07001856class_dev_reg_err:
Yinghai Lu7b543662012-04-02 18:31:53 -07001857 put_device(&bridge->dev);
1858 device_unregister(&bridge->dev);
Yinghai Lu7b543662012-04-02 18:31:53 -07001859err_out:
1860 kfree(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001861 return NULL;
1862}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001863
Yinghai Lu98a35832012-05-18 11:35:50 -06001864int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1865{
1866 struct resource *res = &b->busn_res;
1867 struct resource *parent_res, *conflict;
1868
1869 res->start = bus;
1870 res->end = bus_max;
1871 res->flags = IORESOURCE_BUS;
1872
1873 if (!pci_is_root_bus(b))
1874 parent_res = &b->parent->busn_res;
1875 else {
1876 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1877 res->flags |= IORESOURCE_PCI_FIXED;
1878 }
1879
Andreas Noeverced04d12014-01-23 21:59:24 +01001880 conflict = request_resource_conflict(parent_res, res);
Yinghai Lu98a35832012-05-18 11:35:50 -06001881
1882 if (conflict)
1883 dev_printk(KERN_DEBUG, &b->dev,
1884 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1885 res, pci_is_root_bus(b) ? "domain " : "",
1886 parent_res, conflict->name, conflict);
Yinghai Lu98a35832012-05-18 11:35:50 -06001887
1888 return conflict == NULL;
1889}
1890
1891int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1892{
1893 struct resource *res = &b->busn_res;
1894 struct resource old_res = *res;
1895 resource_size_t size;
1896 int ret;
1897
1898 if (res->start > bus_max)
1899 return -EINVAL;
1900
1901 size = bus_max - res->start + 1;
1902 ret = adjust_resource(res, res->start, size);
1903 dev_printk(KERN_DEBUG, &b->dev,
1904 "busn_res: %pR end %s updated to %02x\n",
1905 &old_res, ret ? "can not be" : "is", bus_max);
1906
1907 if (!ret && !res->parent)
1908 pci_bus_insert_busn_res(b, res->start, res->end);
1909
1910 return ret;
1911}
1912
1913void pci_bus_release_busn_res(struct pci_bus *b)
1914{
1915 struct resource *res = &b->busn_res;
1916 int ret;
1917
1918 if (!res->flags || !res->parent)
1919 return;
1920
1921 ret = release_resource(res);
1922 dev_printk(KERN_DEBUG, &b->dev,
1923 "busn_res: %pR %s released\n",
1924 res, ret ? "can not be" : "is");
1925}
1926
Bill Pemberton15856ad2012-11-21 15:35:00 -05001927struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001928 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1929{
Yinghai Lu4d99f522012-05-17 18:51:12 -07001930 struct pci_host_bridge_window *window;
1931 bool found = false;
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001932 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07001933 int max;
1934
1935 list_for_each_entry(window, resources, list)
1936 if (window->res->flags & IORESOURCE_BUS) {
1937 found = true;
1938 break;
1939 }
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001940
1941 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1942 if (!b)
1943 return NULL;
1944
Yinghai Lu4d99f522012-05-17 18:51:12 -07001945 if (!found) {
1946 dev_info(&b->dev,
1947 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1948 bus);
1949 pci_bus_insert_busn_res(b, bus, 255);
1950 }
1951
1952 max = pci_scan_child_bus(b);
1953
1954 if (!found)
1955 pci_bus_update_busn_res_end(b, max);
1956
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001957 pci_bus_add_devices(b);
1958 return b;
1959}
1960EXPORT_SYMBOL(pci_scan_root_bus);
1961
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001962/* Deprecated; use pci_scan_root_bus() instead */
Bill Pemberton15856ad2012-11-21 15:35:00 -05001963struct pci_bus *pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001964 int bus, struct pci_ops *ops, void *sysdata)
1965{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001966 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001967 struct pci_bus *b;
1968
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001969 pci_add_resource(&resources, &ioport_resource);
1970 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001971 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001972 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001973 if (b)
Yinghai Lu857c3b62012-05-17 18:51:12 -07001974 pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001975 else
1976 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001977 return b;
1978}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001979EXPORT_SYMBOL(pci_scan_bus_parented);
1980
Bill Pemberton15856ad2012-11-21 15:35:00 -05001981struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001982 void *sysdata)
1983{
1984 LIST_HEAD(resources);
1985 struct pci_bus *b;
1986
1987 pci_add_resource(&resources, &ioport_resource);
1988 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001989 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001990 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1991 if (b) {
Yinghai Lu857c3b62012-05-17 18:51:12 -07001992 pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001993 pci_bus_add_devices(b);
1994 } else {
1995 pci_free_resource_list(&resources);
1996 }
1997 return b;
1998}
1999EXPORT_SYMBOL(pci_scan_bus);
2000
Alex Chiang3ed4fd92009-03-20 14:56:25 -06002001/**
Yinghai Lu2f320522012-01-21 02:08:22 -08002002 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
2003 * @bridge: PCI bridge for the bus to scan
2004 *
2005 * Scan a PCI bus and child buses for new devices, add them,
2006 * and enable them, resizing bridge mmio/io resource if necessary
2007 * and possible. The caller must ensure the child devices are already
2008 * removed for resizing to occur.
2009 *
2010 * Returns the max number of subordinate bus discovered.
2011 */
Bjorn Helgaas10874f52014-04-14 16:11:40 -06002012unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
Yinghai Lu2f320522012-01-21 02:08:22 -08002013{
2014 unsigned int max;
2015 struct pci_bus *bus = bridge->subordinate;
2016
2017 max = pci_scan_child_bus(bus);
2018
2019 pci_assign_unassigned_bridge_resources(bridge);
2020
2021 pci_bus_add_devices(bus);
2022
2023 return max;
2024}
2025
Yinghai Lua5213a32012-10-30 14:31:21 -06002026/**
2027 * pci_rescan_bus - scan a PCI bus for devices.
2028 * @bus: PCI bus to scan
2029 *
2030 * Scan a PCI bus and child buses for new devices, adds them,
2031 * and enables them.
2032 *
2033 * Returns the max number of subordinate bus discovered.
2034 */
Bjorn Helgaas10874f52014-04-14 16:11:40 -06002035unsigned int pci_rescan_bus(struct pci_bus *bus)
Yinghai Lua5213a32012-10-30 14:31:21 -06002036{
2037 unsigned int max;
2038
2039 max = pci_scan_child_bus(bus);
2040 pci_assign_unassigned_bus_resources(bus);
2041 pci_bus_add_devices(bus);
2042
2043 return max;
2044}
2045EXPORT_SYMBOL_GPL(pci_rescan_bus);
2046
Rafael J. Wysocki9d169472014-01-10 15:22:18 +01002047/*
2048 * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
2049 * routines should always be executed under this mutex.
2050 */
2051static DEFINE_MUTEX(pci_rescan_remove_lock);
2052
2053void pci_lock_rescan_remove(void)
2054{
2055 mutex_lock(&pci_rescan_remove_lock);
2056}
2057EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2058
2059void pci_unlock_rescan_remove(void)
2060{
2061 mutex_unlock(&pci_rescan_remove_lock);
2062}
2063EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2064
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002065static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002066{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002067 const struct pci_dev *a = to_pci_dev(d_a);
2068 const struct pci_dev *b = to_pci_dev(d_b);
2069
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002070 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2071 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2072
2073 if (a->bus->number < b->bus->number) return -1;
2074 else if (a->bus->number > b->bus->number) return 1;
2075
2076 if (a->devfn < b->devfn) return -1;
2077 else if (a->devfn > b->devfn) return 1;
2078
2079 return 0;
2080}
2081
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08002082void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002083{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002084 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002085}