blob: 2bbf5221afb391e303328f19cdc5034bdc74379a [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}
744
Linus Torvalds1da177e2005-04-16 15:20:36 -0700745/*
746 * If it's a bridge, configure it and scan the bus behind it.
747 * For CardBus bridges, we don't scan behind as the devices will
748 * be handled by the bridge driver itself.
749 *
750 * We need to process bridges in two passes -- first we scan those
751 * already configured by the BIOS and after we are done with all of
752 * them, we proceed to assigning numbers to the remaining buses in
753 * order to avoid overlaps between old and new bus numbers.
754 */
Bill Pemberton15856ad2012-11-21 15:35:00 -0500755int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700756{
757 struct pci_bus *child;
758 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100759 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700760 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600761 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100762 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700763
764 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600765 primary = buses & 0xFF;
766 secondary = (buses >> 8) & 0xFF;
767 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700768
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600769 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
770 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700771
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100772 if (!primary && (primary != bus->number) && secondary && subordinate) {
773 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
774 primary = bus->number;
775 }
776
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100777 /* Check if setup is sensible at all */
778 if (!pass &&
Yinghai Lu1965f662012-09-10 17:19:33 -0700779 (primary != bus->number || secondary <= bus->number ||
Andreas Noever1820ffd2014-01-23 21:59:25 +0100780 secondary > subordinate || subordinate > bus->busn_res.end)) {
Yinghai Lu1965f662012-09-10 17:19:33 -0700781 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
782 secondary, subordinate);
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100783 broken = 1;
784 }
785
Linus Torvalds1da177e2005-04-16 15:20:36 -0700786 /* Disable MasterAbortMode during probing to avoid reporting
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700787 of bus errors (in some architectures) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700788 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
789 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
790 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
791
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600792 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
793 !is_cardbus && !broken) {
794 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700795 /*
796 * Bus already configured by firmware, process it in the first
797 * pass and just note the configuration.
798 */
799 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000800 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700801
802 /*
Andreas Noever2ed85822014-01-23 21:59:22 +0100803 * The bus might already exist for two reasons: Either we are
804 * rescanning the bus or the bus is reachable through more than
805 * one bridge. The second case can happen with the i450NX
806 * chipset.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700807 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600808 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600809 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600810 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600811 if (!child)
812 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600813 child->primary = primary;
Yinghai Lubc76b732012-05-17 18:51:13 -0700814 pci_bus_insert_busn_res(child, secondary, subordinate);
Alex Chiang74710de2009-03-20 14:56:10 -0600815 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700816 }
817
Linus Torvalds1da177e2005-04-16 15:20:36 -0700818 cmax = pci_scan_child_bus(child);
Andreas Noeverc95b0bd2014-01-23 21:59:27 +0100819 if (cmax > subordinate)
820 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
821 subordinate, cmax);
822 /* subordinate should equal child->busn_res.end */
823 if (subordinate > max)
824 max = subordinate;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700825 } else {
826 /*
827 * We need to assign a number to this bus which we always
828 * do in the second pass.
829 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700830 if (!pass) {
Andreas Noever619c8c32014-01-23 21:59:23 +0100831 if (pcibios_assign_all_busses() || broken || is_cardbus)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700832 /* Temporarily disable forwarding of the
833 configuration cycles on all bridges in
834 this bus segment to avoid possible
835 conflicts in the second pass between two
836 bridges programmed with overlapping
837 bus ranges. */
838 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
839 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000840 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700841 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700842
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100843 if (max >= bus->busn_res.end) {
844 dev_warn(&dev->dev, "can't allocate child bus %02x from %pR\n",
845 max, &bus->busn_res);
846 goto out;
847 }
848
Linus Torvalds1da177e2005-04-16 15:20:36 -0700849 /* Clear errors */
850 pci_write_config_word(dev, PCI_STATUS, 0xffff);
851
Andreas Noeverfc1b2532014-01-23 21:59:28 +0100852 /* The bus will already exist if we are rescanning */
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800853 child = pci_find_bus(pci_domain_nr(bus), max+1);
854 if (!child) {
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100855 child = pci_add_new_bus(bus, dev, max+1);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800856 if (!child)
857 goto out;
Andreas Noever1820ffd2014-01-23 21:59:25 +0100858 pci_bus_insert_busn_res(child, max+1,
859 bus->busn_res.end);
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800860 }
Andreas Noever9a4d7d82014-01-23 21:59:21 +0100861 max++;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700862 buses = (buses & 0xff000000)
863 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -0700864 | ((unsigned int)(child->busn_res.start) << 8)
865 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700866
867 /*
868 * yenta.c forces a secondary latency timer of 176.
869 * Copy that behaviour here.
870 */
871 if (is_cardbus) {
872 buses &= ~0xff000000;
873 buses |= CARDBUS_LATENCY_TIMER << 24;
874 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100875
Linus Torvalds1da177e2005-04-16 15:20:36 -0700876 /*
877 * We need to blast all three values with a single write.
878 */
879 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
880
881 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700882 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700883 max = pci_scan_child_bus(child);
884 } else {
885 /*
886 * For CardBus bridges, we leave 4 bus numbers
887 * as cards with a PCI-to-PCI bridge can be
888 * inserted later.
889 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100890 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
891 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700892 if (pci_find_bus(pci_domain_nr(bus),
893 max+i+1))
894 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100895 while (parent->parent) {
896 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -0700897 (parent->busn_res.end > max) &&
898 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +0100899 j = 1;
900 }
901 parent = parent->parent;
902 }
903 if (j) {
904 /*
905 * Often, there are two cardbus bridges
906 * -- try to leave one valid bus number
907 * for each one.
908 */
909 i /= 2;
910 break;
911 }
912 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700913 max += i;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700914 }
915 /*
916 * Set the subordinate bus number to its real value.
917 */
Andreas Noever1820ffd2014-01-23 21:59:25 +0100918 if (max > bus->busn_res.end) {
919 dev_warn(&dev->dev, "max busn %02x is outside %pR\n",
920 max, &bus->busn_res);
921 max = bus->busn_res.end;
922 }
Yinghai Lubc76b732012-05-17 18:51:13 -0700923 pci_bus_update_busn_res_end(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700924 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
925 }
926
Gary Hadecb3576f2008-02-08 14:00:52 -0800927 sprintf(child->name,
928 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
929 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700930
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200931 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100932 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -0700933 if ((child->busn_res.end > bus->busn_res.end) ||
934 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +0100935 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -0700936 (child->busn_res.end < bus->number)) {
937 dev_info(&child->dev, "%pR %s "
938 "hidden behind%s bridge %s %pR\n",
939 &child->busn_res,
940 (bus->number > child->busn_res.end &&
941 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800942 "wholly" : "partially",
943 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700944 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -0700945 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +0100946 }
947 bus = bus->parent;
948 }
949
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000950out:
951 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
952
Linus Torvalds1da177e2005-04-16 15:20:36 -0700953 return max;
954}
955
956/*
957 * Read interrupt line and base address registers.
958 * The architecture-dependent code can tweak these, of course.
959 */
960static void pci_read_irq(struct pci_dev *dev)
961{
962 unsigned char irq;
963
964 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800965 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700966 if (irq)
967 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
968 dev->irq = irq;
969}
970
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000971void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800972{
973 int pos;
974 u16 reg16;
975
976 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
977 if (!pos)
978 return;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900979 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800980 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
Yijing Wang786e2282012-07-24 17:20:02 +0800981 pdev->pcie_flags_reg = reg16;
Jon Masonb03e7492011-07-20 15:20:54 -0500982 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
983 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800984}
985
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000986void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700987{
Eric W. Biederman28760482009-09-09 14:09:24 -0700988 u32 reg32;
989
Jiang Liu59875ae2012-07-24 17:20:06 +0800990 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
Eric W. Biederman28760482009-09-09 14:09:24 -0700991 if (reg32 & PCI_EXP_SLTCAP_HPC)
992 pdev->is_hotplug_bridge = 1;
993}
994
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700995
996/**
Alex Williamson78916b02014-05-05 14:20:51 -0600997 * pci_ext_cfg_is_aliased - is ext config space just an alias of std config?
998 * @dev: PCI device
999 *
1000 * PCI Express to PCI/PCI-X Bridge Specification, rev 1.0, 4.1.4 says that
1001 * when forwarding a type1 configuration request the bridge must check that
1002 * the extended register address field is zero. The bridge is not permitted
1003 * to forward the transactions and must handle it as an Unsupported Request.
1004 * Some bridges do not follow this rule and simply drop the extended register
1005 * bits, resulting in the standard config space being aliased, every 256
1006 * bytes across the entire configuration space. Test for this condition by
1007 * comparing the first dword of each potential alias to the vendor/device ID.
1008 * Known offenders:
1009 * ASM1083/1085 PCIe-to-PCI Reversible Bridge (1b21:1080, rev 01 & 03)
1010 * AMD/ATI SBx00 PCI to PCI Bridge (1002:4384, rev 40)
1011 */
1012static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
1013{
1014#ifdef CONFIG_PCI_QUIRKS
1015 int pos;
1016 u32 header, tmp;
1017
1018 pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
1019
1020 for (pos = PCI_CFG_SPACE_SIZE;
1021 pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
1022 if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
1023 || header != tmp)
1024 return false;
1025 }
1026
1027 return true;
1028#else
1029 return false;
1030#endif
1031}
1032
1033/**
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001034 * pci_cfg_space_size - get the configuration space size of the PCI device.
1035 * @dev: PCI device
1036 *
1037 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1038 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1039 * access it. Maybe we don't have a way to generate extended config space
1040 * accesses, or the device is behind a reverse Express bridge. So we try
1041 * reading the dword at 0x100 which must either be 0 or a valid extended
1042 * capability header.
1043 */
1044static int pci_cfg_space_size_ext(struct pci_dev *dev)
1045{
1046 u32 status;
1047 int pos = PCI_CFG_SPACE_SIZE;
1048
1049 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
1050 goto fail;
Alex Williamson78916b02014-05-05 14:20:51 -06001051 if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001052 goto fail;
1053
1054 return PCI_CFG_SPACE_EXP_SIZE;
1055
1056 fail:
1057 return PCI_CFG_SPACE_SIZE;
1058}
1059
1060int pci_cfg_space_size(struct pci_dev *dev)
1061{
1062 int pos;
1063 u32 status;
1064 u16 class;
1065
1066 class = dev->class >> 8;
1067 if (class == PCI_CLASS_BRIDGE_HOST)
1068 return pci_cfg_space_size_ext(dev);
1069
1070 if (!pci_is_pcie(dev)) {
1071 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1072 if (!pos)
1073 goto fail;
1074
1075 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1076 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1077 goto fail;
1078 }
1079
1080 return pci_cfg_space_size_ext(dev);
1081
1082 fail:
1083 return PCI_CFG_SPACE_SIZE;
1084}
1085
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +02001086#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -08001087
Linus Torvalds1da177e2005-04-16 15:20:36 -07001088/**
1089 * pci_setup_device - fill in class and map information of a device
1090 * @dev: the device structure to fill
1091 *
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001092 * Initialize the device structure with information about the device's
Linus Torvalds1da177e2005-04-16 15:20:36 -07001093 * vendor,class,memory and IO-space addresses,IRQ lines etc.
1094 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +08001095 * Returns 0 on success and negative if unknown type of device (not normal,
1096 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001097 */
Yu Zhao480b93b2009-03-20 11:25:14 +08001098int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001099{
1100 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +08001101 u8 hdr_type;
1102 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -05001103 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001104 struct pci_bus_region region;
1105 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +08001106
1107 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1108 return -EIO;
1109
1110 dev->sysdata = dev->bus->sysdata;
1111 dev->dev.parent = dev->bus->bridge;
1112 dev->dev.bus = &pci_bus_type;
1113 dev->hdr_type = hdr_type & 0x7f;
1114 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001115 dev->error_state = pci_channel_io_normal;
1116 set_pcie_port_type(dev);
1117
1118 list_for_each_entry(slot, &dev->bus->slots, list)
1119 if (PCI_SLOT(dev->devfn) == slot->number)
1120 dev->slot = slot;
1121
1122 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1123 set this higher, assuming the system even supports it. */
1124 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001125
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001126 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1127 dev->bus->number, PCI_SLOT(dev->devfn),
1128 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001129
1130 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001131 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001132 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001133
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001134 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1135 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001136
Yu Zhao853346e2009-03-21 22:05:11 +08001137 /* need to have dev->class ready */
1138 dev->cfg_size = pci_cfg_space_size(dev);
1139
Linus Torvalds1da177e2005-04-16 15:20:36 -07001140 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001141 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001142
1143 /* Early fixups, before probing the BARs */
1144 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001145 /* device class may be changed after fixup */
1146 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001147
1148 switch (dev->hdr_type) { /* header type */
1149 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1150 if (class == PCI_CLASS_BRIDGE_PCI)
1151 goto bad;
1152 pci_read_irq(dev);
1153 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1154 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1155 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001156
1157 /*
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001158 * Do the ugly legacy mode stuff here rather than broken chip
1159 * quirk code. Legacy mode ATA controllers have fixed
1160 * addresses. These are not always echoed in BAR0-3, and
1161 * BAR0-3 in a few cases contain junk!
Alan Cox368c73d2006-10-04 00:41:26 +01001162 */
1163 if (class == PCI_CLASS_STORAGE_IDE) {
1164 u8 progif;
1165 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1166 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001167 region.start = 0x1F0;
1168 region.end = 0x1F7;
1169 res = &dev->resource[0];
1170 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001171 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001172 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1173 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001174 region.start = 0x3F6;
1175 region.end = 0x3F6;
1176 res = &dev->resource[1];
1177 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001178 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001179 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1180 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001181 }
1182 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001183 region.start = 0x170;
1184 region.end = 0x177;
1185 res = &dev->resource[2];
1186 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001187 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001188 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1189 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001190 region.start = 0x376;
1191 region.end = 0x376;
1192 res = &dev->resource[3];
1193 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001194 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001195 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1196 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001197 }
1198 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001199 break;
1200
1201 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1202 if (class != PCI_CLASS_BRIDGE_PCI)
1203 goto bad;
1204 /* The PCI-to-PCI bridge spec requires that subtractive
1205 decoding (i.e. transparent) bridge must have programming
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001206 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001207 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001208 dev->transparent = ((dev->class & 0xff) == 1);
1209 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001210 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001211 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1212 if (pos) {
1213 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1214 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1215 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001216 break;
1217
1218 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1219 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1220 goto bad;
1221 pci_read_irq(dev);
1222 pci_read_bases(dev, 1, 0);
1223 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1224 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1225 break;
1226
1227 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001228 dev_err(&dev->dev, "unknown header type %02x, "
1229 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001230 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001231
1232 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001233 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1234 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001235 dev->class = PCI_CLASS_NOT_DEFINED;
1236 }
1237
1238 /* We found a fine healthy device, go go go... */
1239 return 0;
1240}
1241
Zhao, Yu201de562008-10-13 19:49:55 +08001242static void pci_release_capabilities(struct pci_dev *dev)
1243{
1244 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001245 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001246 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001247}
1248
Linus Torvalds1da177e2005-04-16 15:20:36 -07001249/**
1250 * pci_release_dev - free a pci device structure when all users of it are finished.
1251 * @dev: device that's been disconnected
1252 *
1253 * Will be called only by the device core when all users of this pci device are
1254 * done.
1255 */
1256static void pci_release_dev(struct device *dev)
1257{
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001258 struct pci_dev *pci_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001259
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001260 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001261 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001262 pci_release_of_node(pci_dev);
Sebastian Ott6ae32c52013-06-04 19:18:14 +02001263 pcibios_release_device(pci_dev);
Gu Zheng8b1fce02013-05-25 21:48:31 +08001264 pci_bus_put(pci_dev->bus);
Alex Williamson782a9852014-05-20 08:53:21 -06001265 kfree(pci_dev->driver_override);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001266 kfree(pci_dev);
1267}
1268
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001269struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
Michael Ellerman65891212007-04-05 17:19:08 +10001270{
1271 struct pci_dev *dev;
1272
1273 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1274 if (!dev)
1275 return NULL;
1276
Michael Ellerman65891212007-04-05 17:19:08 +10001277 INIT_LIST_HEAD(&dev->bus_list);
Brian King88e7b162013-04-08 03:05:07 +00001278 dev->dev.type = &pci_dev_type;
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001279 dev->bus = pci_bus_get(bus);
Michael Ellerman65891212007-04-05 17:19:08 +10001280
1281 return dev;
1282}
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001283EXPORT_SYMBOL(pci_alloc_dev);
1284
Yinghai Luefdc87d2012-01-27 10:55:10 -08001285bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1286 int crs_timeout)
1287{
1288 int delay = 1;
1289
1290 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1291 return false;
1292
1293 /* some broken boards return 0 or ~0 if a slot is empty: */
1294 if (*l == 0xffffffff || *l == 0x00000000 ||
1295 *l == 0x0000ffff || *l == 0xffff0000)
1296 return false;
1297
1298 /* Configuration request Retry Status */
1299 while (*l == 0xffff0001) {
1300 if (!crs_timeout)
1301 return false;
1302
1303 msleep(delay);
1304 delay *= 2;
1305 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1306 return false;
1307 /* Card hasn't responded in 60 seconds? Must be stuck. */
1308 if (delay > crs_timeout) {
1309 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1310 "responding\n", pci_domain_nr(bus),
1311 bus->number, PCI_SLOT(devfn),
1312 PCI_FUNC(devfn));
1313 return false;
1314 }
1315 }
1316
1317 return true;
1318}
1319EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1320
Linus Torvalds1da177e2005-04-16 15:20:36 -07001321/*
1322 * Read the config data for a PCI device, sanity-check it
1323 * and fill in the dev structure...
1324 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001325static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001326{
1327 struct pci_dev *dev;
1328 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001329
Yinghai Luefdc87d2012-01-27 10:55:10 -08001330 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001331 return NULL;
1332
Gu Zheng8b1fce02013-05-25 21:48:31 +08001333 dev = pci_alloc_dev(bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001334 if (!dev)
1335 return NULL;
1336
Linus Torvalds1da177e2005-04-16 15:20:36 -07001337 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001338 dev->vendor = l & 0xffff;
1339 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001341 pci_set_of_node(dev);
1342
Yu Zhao480b93b2009-03-20 11:25:14 +08001343 if (pci_setup_device(dev)) {
Gu Zheng8b1fce02013-05-25 21:48:31 +08001344 pci_bus_put(dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001345 kfree(dev);
1346 return NULL;
1347 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001348
1349 return dev;
1350}
1351
Zhao, Yu201de562008-10-13 19:49:55 +08001352static void pci_init_capabilities(struct pci_dev *dev)
1353{
1354 /* MSI/MSI-X list */
1355 pci_msi_init_pci_dev(dev);
1356
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001357 /* Buffers for saving PCIe and PCI-X capabilities */
1358 pci_allocate_cap_save_buffers(dev);
1359
Zhao, Yu201de562008-10-13 19:49:55 +08001360 /* Power Management */
1361 pci_pm_init(dev);
1362
1363 /* Vital Product Data */
1364 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001365
1366 /* Alternative Routing-ID Forwarding */
Yijing Wang31ab2472013-01-15 11:12:17 +08001367 pci_configure_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001368
1369 /* Single Root I/O Virtualization */
1370 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001371
1372 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001373 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001374}
1375
Sam Ravnborg96bde062007-03-26 21:53:30 -08001376void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001377{
Yinghai Lu4f535092013-01-21 13:20:52 -08001378 int ret;
1379
Linus Torvalds1da177e2005-04-16 15:20:36 -07001380 device_initialize(&dev->dev);
1381 dev->dev.release = pci_release_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001382
Yinghai Lu7629d192013-01-21 13:20:44 -08001383 set_dev_node(&dev->dev, pcibus_to_node(bus));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001384 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001385 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001386 dev->dev.coherent_dma_mask = 0xffffffffull;
1387
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001388 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001389 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001390
Linus Torvalds1da177e2005-04-16 15:20:36 -07001391 /* Fix up broken headers */
1392 pci_fixup_device(pci_fixup_header, dev);
1393
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001394 /* moved out from quirk header fixup code */
1395 pci_reassigndev_resource_alignment(dev);
1396
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001397 /* Clear the state_saved flag. */
1398 dev->state_saved = false;
1399
Zhao, Yu201de562008-10-13 19:49:55 +08001400 /* Initialize various capabilities */
1401 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001402
Linus Torvalds1da177e2005-04-16 15:20:36 -07001403 /*
1404 * Add the device to our list of discovered devices
1405 * and the bus list for fixup functions, etc.
1406 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001407 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001408 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001409 up_write(&pci_bus_sem);
Yinghai Lu4f535092013-01-21 13:20:52 -08001410
Yinghai Lu4f535092013-01-21 13:20:52 -08001411 ret = pcibios_add_device(dev);
1412 WARN_ON(ret < 0);
1413
1414 /* Notifier could use PCI capabilities */
1415 dev->match_driver = false;
1416 ret = device_add(&dev->dev);
1417 WARN_ON(ret < 0);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001418}
1419
Bjorn Helgaas10874f52014-04-14 16:11:40 -06001420struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001421{
1422 struct pci_dev *dev;
1423
Trent Piepho90bdb312009-03-20 14:56:00 -06001424 dev = pci_get_slot(bus, devfn);
1425 if (dev) {
1426 pci_dev_put(dev);
1427 return dev;
1428 }
1429
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001430 dev = pci_scan_device(bus, devfn);
1431 if (!dev)
1432 return NULL;
1433
1434 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001435
1436 return dev;
1437}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001438EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001439
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001440static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001441{
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001442 int pos;
1443 u16 cap = 0;
1444 unsigned next_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001445
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001446 if (pci_ari_enabled(bus)) {
1447 if (!dev)
1448 return 0;
1449 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1450 if (!pos)
1451 return 0;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001452
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001453 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1454 next_fn = PCI_ARI_CAP_NFN(cap);
1455 if (next_fn <= fn)
1456 return 0; /* protect against malformed list */
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001457
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001458 return next_fn;
1459 }
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001460
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001461 /* dev may be NULL for non-contiguous multifunction devices */
1462 if (!dev || dev->multifunction)
1463 return (fn + 1) % 8;
1464
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001465 return 0;
1466}
1467
1468static int only_one_child(struct pci_bus *bus)
1469{
1470 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001471
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001472 if (!parent || !pci_is_pcie(parent))
1473 return 0;
Yijing Wang62f87c02012-07-24 17:20:03 +08001474 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001475 return 1;
Yijing Wang62f87c02012-07-24 17:20:03 +08001476 if (pci_pcie_type(parent) == PCI_EXP_TYPE_DOWNSTREAM &&
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001477 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001478 return 1;
1479 return 0;
1480}
1481
Linus Torvalds1da177e2005-04-16 15:20:36 -07001482/**
1483 * pci_scan_slot - scan a PCI slot on a bus for devices.
1484 * @bus: PCI bus to scan
1485 * @devfn: slot number to scan (must have zero function.)
1486 *
1487 * Scan a PCI slot on the specified PCI bus for devices, adding
1488 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001489 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001490 *
1491 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001492 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001493int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001494{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001495 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001496 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001497
1498 if (only_one_child(bus) && (devfn > 0))
1499 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001500
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001501 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001502 if (!dev)
1503 return 0;
1504 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001505 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001506
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001507 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001508 dev = pci_scan_single_device(bus, devfn + fn);
1509 if (dev) {
1510 if (!dev->is_added)
1511 nr++;
1512 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001513 }
1514 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001515
Shaohua Li149e1632008-07-23 10:32:31 +08001516 /* only one slot has pcie device */
1517 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001518 pcie_aspm_init_link_state(bus->self);
1519
Linus Torvalds1da177e2005-04-16 15:20:36 -07001520 return nr;
1521}
1522
Jon Masonb03e7492011-07-20 15:20:54 -05001523static int pcie_find_smpss(struct pci_dev *dev, void *data)
1524{
1525 u8 *smpss = data;
1526
1527 if (!pci_is_pcie(dev))
1528 return 0;
1529
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001530 /*
1531 * We don't have a way to change MPS settings on devices that have
1532 * drivers attached. A hot-added device might support only the minimum
1533 * MPS setting (MPS=128). Therefore, if the fabric contains a bridge
1534 * where devices may be hot-added, we limit the fabric MPS to 128 so
1535 * hot-added devices will work correctly.
1536 *
1537 * However, if we hot-add a device to a slot directly below a Root
1538 * Port, it's impossible for there to be other existing devices below
1539 * the port. We don't limit the MPS in this case because we can
1540 * reconfigure MPS on both the Root Port and the hot-added device,
1541 * and there are no other devices involved.
1542 *
1543 * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
Jon Masonb03e7492011-07-20 15:20:54 -05001544 */
Yijing Wangd4aa68f2013-08-22 11:24:47 +08001545 if (dev->is_hotplug_bridge &&
1546 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
Jon Masonb03e7492011-07-20 15:20:54 -05001547 *smpss = 0;
1548
1549 if (*smpss > dev->pcie_mpss)
1550 *smpss = dev->pcie_mpss;
1551
1552 return 0;
1553}
1554
1555static void pcie_write_mps(struct pci_dev *dev, int mps)
1556{
Jon Mason62f392e2011-10-14 14:56:14 -05001557 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001558
1559 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001560 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001561
Yijing Wang62f87c02012-07-24 17:20:03 +08001562 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
1563 dev->bus->self)
Jon Mason62f392e2011-10-14 14:56:14 -05001564 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001565 * downstream communication will never be larger than
1566 * the MRRS. So, the MPS only needs to be configured
1567 * for the upstream communication. This being the case,
1568 * walk from the top down and set the MPS of the child
1569 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001570 *
1571 * Configure the device MPS with the smaller of the
1572 * device MPSS or the bridge MPS (which is assumed to be
1573 * properly configured at this point to the largest
1574 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001575 */
Jon Mason62f392e2011-10-14 14:56:14 -05001576 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001577 }
1578
1579 rc = pcie_set_mps(dev, mps);
1580 if (rc)
1581 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1582}
1583
Jon Mason62f392e2011-10-14 14:56:14 -05001584static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001585{
Jon Mason62f392e2011-10-14 14:56:14 -05001586 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001587
Jon Masoned2888e2011-09-08 16:41:18 -05001588 /* In the "safe" case, do not configure the MRRS. There appear to be
1589 * issues with setting MRRS to 0 on a number of devices.
1590 */
Jon Masoned2888e2011-09-08 16:41:18 -05001591 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1592 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001593
Jon Masoned2888e2011-09-08 16:41:18 -05001594 /* For Max performance, the MRRS must be set to the largest supported
1595 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001596 * device or the bus can support. This should already be properly
1597 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001598 */
Jon Mason62f392e2011-10-14 14:56:14 -05001599 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001600
1601 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001602 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001603 * If the MRRS value provided is not acceptable (e.g., too large),
1604 * shrink the value until it is acceptable to the HW.
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001605 */
Jon Masonb03e7492011-07-20 15:20:54 -05001606 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1607 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001608 if (!rc)
1609 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001610
Jon Mason62f392e2011-10-14 14:56:14 -05001611 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001612 mrrs /= 2;
1613 }
Jon Mason62f392e2011-10-14 14:56:14 -05001614
1615 if (mrrs < 128)
1616 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1617 "safe value. If problems are experienced, try running "
1618 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001619}
1620
Yijing Wang5895af72013-08-26 16:33:06 +08001621static void pcie_bus_detect_mps(struct pci_dev *dev)
1622{
1623 struct pci_dev *bridge = dev->bus->self;
1624 int mps, p_mps;
1625
1626 if (!bridge)
1627 return;
1628
1629 mps = pcie_get_mps(dev);
1630 p_mps = pcie_get_mps(bridge);
1631
1632 if (mps != p_mps)
1633 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",
1634 mps, pci_name(bridge), p_mps);
1635}
1636
Jon Masonb03e7492011-07-20 15:20:54 -05001637static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1638{
Jon Masona513a992011-10-14 14:56:16 -05001639 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001640
1641 if (!pci_is_pcie(dev))
1642 return 0;
1643
Yijing Wang5895af72013-08-26 16:33:06 +08001644 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1645 pcie_bus_detect_mps(dev);
1646 return 0;
1647 }
1648
Jon Masona513a992011-10-14 14:56:16 -05001649 mps = 128 << *(u8 *)data;
1650 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001651
1652 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001653 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001654
Bjorn Helgaas2c25e342013-08-22 11:24:43 +08001655 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), "
Jon Masona513a992011-10-14 14:56:16 -05001656 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1657 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001658
1659 return 0;
1660}
1661
Jon Masona513a992011-10-14 14:56:16 -05001662/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001663 * parents then children fashion. If this changes, then this code will not
1664 * work as designed.
1665 */
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001666void pcie_bus_configure_settings(struct pci_bus *bus)
Jon Masonb03e7492011-07-20 15:20:54 -05001667{
Bjorn Helgaas1e358f92014-04-29 12:51:55 -06001668 u8 smpss = 0;
Jon Masonb03e7492011-07-20 15:20:54 -05001669
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001670 if (!bus->self)
1671 return;
1672
Jon Masonb03e7492011-07-20 15:20:54 -05001673 if (!pci_is_pcie(bus->self))
1674 return;
1675
Jon Mason5f39e672011-10-03 09:50:20 -05001676 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
Jon Mason33154722013-08-26 16:33:05 +08001677 * to be aware of the MPS of the destination. To work around this,
Jon Mason5f39e672011-10-03 09:50:20 -05001678 * simply force the MPS of the entire system to the smallest possible.
1679 */
1680 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1681 smpss = 0;
1682
Jon Masonb03e7492011-07-20 15:20:54 -05001683 if (pcie_bus_config == PCIE_BUS_SAFE) {
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08001684 smpss = bus->self->pcie_mpss;
Jon Mason5f39e672011-10-03 09:50:20 -05001685
Jon Masonb03e7492011-07-20 15:20:54 -05001686 pcie_find_smpss(bus->self, &smpss);
1687 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1688 }
1689
1690 pcie_bus_configure_set(bus->self, &smpss);
1691 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1692}
Jon Masondebc3b72011-08-02 00:01:18 -05001693EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001694
Bill Pemberton15856ad2012-11-21 15:35:00 -05001695unsigned int pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001696{
Yinghai Lub918c622012-05-17 18:51:11 -07001697 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001698 struct pci_dev *dev;
1699
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001700 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001701
1702 /* Go find them, Rover! */
1703 for (devfn = 0; devfn < 0x100; devfn += 8)
1704 pci_scan_slot(bus, devfn);
1705
Yu Zhaoa28724b2009-03-20 11:25:13 +08001706 /* Reserve buses for SR-IOV capability. */
1707 max += pci_iov_bus_range(bus);
1708
Linus Torvalds1da177e2005-04-16 15:20:36 -07001709 /*
1710 * After performing arch-dependent fixup of the bus, look behind
1711 * all PCI-to-PCI bridges on this bus.
1712 */
Alex Chiang74710de2009-03-20 14:56:10 -06001713 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001714 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001715 pcibios_fixup_bus(bus);
Jiang Liu981cf9e2013-04-12 05:44:16 +00001716 bus->is_added = 1;
Alex Chiang74710de2009-03-20 14:56:10 -06001717 }
1718
Linus Torvalds1da177e2005-04-16 15:20:36 -07001719 for (pass=0; pass < 2; pass++)
1720 list_for_each_entry(dev, &bus->devices, bus_list) {
Yijing Wang6788a512014-05-04 12:23:38 +08001721 if (pci_is_bridge(dev))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001722 max = pci_scan_bridge(bus, dev, max, pass);
1723 }
1724
1725 /*
1726 * We've scanned the bus and so we know all about what's on
1727 * the other side of any bridges that may be on this bus plus
1728 * any devices.
1729 *
1730 * Return how far we've got finding sub-buses.
1731 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001732 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001733 return max;
1734}
1735
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001736/**
1737 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
1738 * @bridge: Host bridge to set up.
1739 *
1740 * Default empty implementation. Replace with an architecture-specific setup
1741 * routine, if necessary.
1742 */
1743int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
1744{
1745 return 0;
1746}
1747
Jiang Liu10a95742013-04-12 05:44:20 +00001748void __weak pcibios_add_bus(struct pci_bus *bus)
1749{
1750}
1751
1752void __weak pcibios_remove_bus(struct pci_bus *bus)
1753{
1754}
1755
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001756struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1757 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001758{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001759 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001760 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001761 struct pci_bus *b, *b2;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001762 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001763 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001764 resource_size_t offset;
1765 char bus_addr[64];
1766 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001767
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001768 b = pci_alloc_bus();
1769 if (!b)
Yinghai Lu7b543662012-04-02 18:31:53 -07001770 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001771
1772 b->sysdata = sysdata;
1773 b->ops = ops;
Yinghai Lu4f535092013-01-21 13:20:52 -08001774 b->number = b->busn_res.start = bus;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001775 b2 = pci_find_bus(pci_domain_nr(b), bus);
1776 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001777 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001778 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001779 goto err_out;
1780 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001781
Yinghai Lu7b543662012-04-02 18:31:53 -07001782 bridge = pci_alloc_host_bridge(b);
1783 if (!bridge)
1784 goto err_out;
1785
1786 bridge->dev.parent = parent;
Jiang Liu70efde22013-06-07 16:16:51 -06001787 bridge->dev.release = pci_release_host_bridge_dev;
Yinghai Lu7b543662012-04-02 18:31:53 -07001788 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001789 error = pcibios_root_bridge_prepare(bridge);
Jiang Liu343df772013-06-07 01:10:08 +08001790 if (error) {
1791 kfree(bridge);
1792 goto err_out;
1793 }
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01001794
Yinghai Lu7b543662012-04-02 18:31:53 -07001795 error = device_register(&bridge->dev);
Jiang Liu343df772013-06-07 01:10:08 +08001796 if (error) {
1797 put_device(&bridge->dev);
1798 goto err_out;
1799 }
Yinghai Lu7b543662012-04-02 18:31:53 -07001800 b->bridge = get_device(&bridge->dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001801 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001802 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001803
Yinghai Lu0d358f22008-02-19 03:20:41 -08001804 if (!parent)
1805 set_dev_node(b->bridge, pcibus_to_node(b));
1806
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001807 b->dev.class = &pcibus_class;
1808 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001809 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001810 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001811 if (error)
1812 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001813
Jiang Liu10a95742013-04-12 05:44:20 +00001814 pcibios_add_bus(b);
1815
Linus Torvalds1da177e2005-04-16 15:20:36 -07001816 /* Create legacy_io and legacy_mem files for this bus */
1817 pci_create_legacy_files(b);
1818
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001819 if (parent)
1820 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1821 else
1822 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1823
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001824 /* Add initial resources to the bus */
1825 list_for_each_entry_safe(window, n, resources, list) {
1826 list_move_tail(&window->list, &bridge->windows);
1827 res = window->res;
1828 offset = window->offset;
Yinghai Luf848ffb2012-05-17 18:51:12 -07001829 if (res->flags & IORESOURCE_BUS)
1830 pci_bus_insert_busn_res(b, bus, res->end);
1831 else
1832 pci_bus_add_resource(b, res, 0);
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001833 if (offset) {
1834 if (resource_type(res) == IORESOURCE_IO)
1835 fmt = " (bus address [%#06llx-%#06llx])";
1836 else
1837 fmt = " (bus address [%#010llx-%#010llx])";
1838 snprintf(bus_addr, sizeof(bus_addr), fmt,
1839 (unsigned long long) (res->start - offset),
1840 (unsigned long long) (res->end - offset));
1841 } else
1842 bus_addr[0] = '\0';
1843 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001844 }
1845
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001846 down_write(&pci_bus_sem);
1847 list_add_tail(&b->node, &pci_root_buses);
1848 up_write(&pci_bus_sem);
1849
Linus Torvalds1da177e2005-04-16 15:20:36 -07001850 return b;
1851
Linus Torvalds1da177e2005-04-16 15:20:36 -07001852class_dev_reg_err:
Yinghai Lu7b543662012-04-02 18:31:53 -07001853 put_device(&bridge->dev);
1854 device_unregister(&bridge->dev);
Yinghai Lu7b543662012-04-02 18:31:53 -07001855err_out:
1856 kfree(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001857 return NULL;
1858}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001859
Yinghai Lu98a35832012-05-18 11:35:50 -06001860int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1861{
1862 struct resource *res = &b->busn_res;
1863 struct resource *parent_res, *conflict;
1864
1865 res->start = bus;
1866 res->end = bus_max;
1867 res->flags = IORESOURCE_BUS;
1868
1869 if (!pci_is_root_bus(b))
1870 parent_res = &b->parent->busn_res;
1871 else {
1872 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1873 res->flags |= IORESOURCE_PCI_FIXED;
1874 }
1875
Andreas Noeverced04d12014-01-23 21:59:24 +01001876 conflict = request_resource_conflict(parent_res, res);
Yinghai Lu98a35832012-05-18 11:35:50 -06001877
1878 if (conflict)
1879 dev_printk(KERN_DEBUG, &b->dev,
1880 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1881 res, pci_is_root_bus(b) ? "domain " : "",
1882 parent_res, conflict->name, conflict);
Yinghai Lu98a35832012-05-18 11:35:50 -06001883
1884 return conflict == NULL;
1885}
1886
1887int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1888{
1889 struct resource *res = &b->busn_res;
1890 struct resource old_res = *res;
1891 resource_size_t size;
1892 int ret;
1893
1894 if (res->start > bus_max)
1895 return -EINVAL;
1896
1897 size = bus_max - res->start + 1;
1898 ret = adjust_resource(res, res->start, size);
1899 dev_printk(KERN_DEBUG, &b->dev,
1900 "busn_res: %pR end %s updated to %02x\n",
1901 &old_res, ret ? "can not be" : "is", bus_max);
1902
1903 if (!ret && !res->parent)
1904 pci_bus_insert_busn_res(b, res->start, res->end);
1905
1906 return ret;
1907}
1908
1909void pci_bus_release_busn_res(struct pci_bus *b)
1910{
1911 struct resource *res = &b->busn_res;
1912 int ret;
1913
1914 if (!res->flags || !res->parent)
1915 return;
1916
1917 ret = release_resource(res);
1918 dev_printk(KERN_DEBUG, &b->dev,
1919 "busn_res: %pR %s released\n",
1920 res, ret ? "can not be" : "is");
1921}
1922
Bill Pemberton15856ad2012-11-21 15:35:00 -05001923struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001924 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1925{
Yinghai Lu4d99f522012-05-17 18:51:12 -07001926 struct pci_host_bridge_window *window;
1927 bool found = false;
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001928 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07001929 int max;
1930
1931 list_for_each_entry(window, resources, list)
1932 if (window->res->flags & IORESOURCE_BUS) {
1933 found = true;
1934 break;
1935 }
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001936
1937 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1938 if (!b)
1939 return NULL;
1940
Yinghai Lu4d99f522012-05-17 18:51:12 -07001941 if (!found) {
1942 dev_info(&b->dev,
1943 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1944 bus);
1945 pci_bus_insert_busn_res(b, bus, 255);
1946 }
1947
1948 max = pci_scan_child_bus(b);
1949
1950 if (!found)
1951 pci_bus_update_busn_res_end(b, max);
1952
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001953 pci_bus_add_devices(b);
1954 return b;
1955}
1956EXPORT_SYMBOL(pci_scan_root_bus);
1957
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001958/* Deprecated; use pci_scan_root_bus() instead */
Bill Pemberton15856ad2012-11-21 15:35:00 -05001959struct pci_bus *pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001960 int bus, struct pci_ops *ops, void *sysdata)
1961{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001962 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001963 struct pci_bus *b;
1964
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001965 pci_add_resource(&resources, &ioport_resource);
1966 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001967 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001968 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001969 if (b)
Yinghai Lu857c3b62012-05-17 18:51:12 -07001970 pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001971 else
1972 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001973 return b;
1974}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001975EXPORT_SYMBOL(pci_scan_bus_parented);
1976
Bill Pemberton15856ad2012-11-21 15:35:00 -05001977struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001978 void *sysdata)
1979{
1980 LIST_HEAD(resources);
1981 struct pci_bus *b;
1982
1983 pci_add_resource(&resources, &ioport_resource);
1984 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07001985 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001986 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1987 if (b) {
Yinghai Lu857c3b62012-05-17 18:51:12 -07001988 pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001989 pci_bus_add_devices(b);
1990 } else {
1991 pci_free_resource_list(&resources);
1992 }
1993 return b;
1994}
1995EXPORT_SYMBOL(pci_scan_bus);
1996
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001997/**
Yinghai Lu2f320522012-01-21 02:08:22 -08001998 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1999 * @bridge: PCI bridge for the bus to scan
2000 *
2001 * Scan a PCI bus and child buses for new devices, add them,
2002 * and enable them, resizing bridge mmio/io resource if necessary
2003 * and possible. The caller must ensure the child devices are already
2004 * removed for resizing to occur.
2005 *
2006 * Returns the max number of subordinate bus discovered.
2007 */
Bjorn Helgaas10874f52014-04-14 16:11:40 -06002008unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
Yinghai Lu2f320522012-01-21 02:08:22 -08002009{
2010 unsigned int max;
2011 struct pci_bus *bus = bridge->subordinate;
2012
2013 max = pci_scan_child_bus(bus);
2014
2015 pci_assign_unassigned_bridge_resources(bridge);
2016
2017 pci_bus_add_devices(bus);
2018
2019 return max;
2020}
2021
Yinghai Lua5213a32012-10-30 14:31:21 -06002022/**
2023 * pci_rescan_bus - scan a PCI bus for devices.
2024 * @bus: PCI bus to scan
2025 *
2026 * Scan a PCI bus and child buses for new devices, adds them,
2027 * and enables them.
2028 *
2029 * Returns the max number of subordinate bus discovered.
2030 */
Bjorn Helgaas10874f52014-04-14 16:11:40 -06002031unsigned int pci_rescan_bus(struct pci_bus *bus)
Yinghai Lua5213a32012-10-30 14:31:21 -06002032{
2033 unsigned int max;
2034
2035 max = pci_scan_child_bus(bus);
2036 pci_assign_unassigned_bus_resources(bus);
2037 pci_bus_add_devices(bus);
2038
2039 return max;
2040}
2041EXPORT_SYMBOL_GPL(pci_rescan_bus);
2042
Linus Torvalds1da177e2005-04-16 15:20:36 -07002043EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002044EXPORT_SYMBOL(pci_scan_slot);
2045EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002046EXPORT_SYMBOL_GPL(pci_scan_child_bus);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002047
Rafael J. Wysocki9d169472014-01-10 15:22:18 +01002048/*
2049 * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
2050 * routines should always be executed under this mutex.
2051 */
2052static DEFINE_MUTEX(pci_rescan_remove_lock);
2053
2054void pci_lock_rescan_remove(void)
2055{
2056 mutex_lock(&pci_rescan_remove_lock);
2057}
2058EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2059
2060void pci_unlock_rescan_remove(void)
2061{
2062 mutex_unlock(&pci_rescan_remove_lock);
2063}
2064EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2065
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002066static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002067{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002068 const struct pci_dev *a = to_pci_dev(d_a);
2069 const struct pci_dev *b = to_pci_dev(d_b);
2070
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002071 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2072 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2073
2074 if (a->bus->number < b->bus->number) return -1;
2075 else if (a->bus->number > b->bus->number) return 1;
2076
2077 if (a->devfn < b->devfn) return -1;
2078 else if (a->devfn > b->devfn) return 1;
2079
2080 return 0;
2081}
2082
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08002083void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002084{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002085 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002086}