blob: 4853c8fbd7010e250724a01ec653f70befc20277 [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>
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07009#include <linux/of_device.h>
Murali Karicheride335bb42015-03-03 12:52:13 -050010#include <linux/of_pci.h>
Bjorn Helgaas589fcc22014-09-12 20:02:00 -060011#include <linux/pci_hotplug.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070012#include <linux/slab.h>
13#include <linux/module.h>
14#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080015#include <linux/pci-aspm.h>
Taku Izumib07461a2015-09-17 10:09:37 -050016#include <linux/aer.h>
Suthikulpanit, Suravee29dbe1f2015-10-28 15:50:54 -070017#include <linux/acpi.h>
Jake Oshins788858e2016-02-16 21:56:22 +000018#include <linux/irqdomain.h>
Mika Westerbergd963f652016-06-02 11:17:13 +030019#include <linux/pm_runtime.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090020#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
22#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
23#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070024
Stephen Hemminger0b950f02014-01-10 17:14:48 -070025static struct resource busn_resource = {
Yinghai Lu67cdc822012-05-17 18:51:12 -070026 .name = "PCI busn",
27 .start = 0,
28 .end = 255,
29 .flags = IORESOURCE_BUS,
30};
31
Linus Torvalds1da177e2005-04-16 15:20:36 -070032/* Ugh. Need to stop exporting this to modules. */
33LIST_HEAD(pci_root_buses);
34EXPORT_SYMBOL(pci_root_buses);
35
Yinghai Lu5cc62c22012-05-17 18:51:11 -070036static LIST_HEAD(pci_domain_busn_res_list);
37
38struct pci_domain_busn_res {
39 struct list_head list;
40 struct resource res;
41 int domain_nr;
42};
43
44static struct resource *get_pci_domain_busn_res(int domain_nr)
45{
46 struct pci_domain_busn_res *r;
47
48 list_for_each_entry(r, &pci_domain_busn_res_list, list)
49 if (r->domain_nr == domain_nr)
50 return &r->res;
51
52 r = kzalloc(sizeof(*r), GFP_KERNEL);
53 if (!r)
54 return NULL;
55
56 r->domain_nr = domain_nr;
57 r->res.start = 0;
58 r->res.end = 0xff;
59 r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
60
61 list_add_tail(&r->list, &pci_domain_busn_res_list);
62
63 return &r->res;
64}
65
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080066static int find_anything(struct device *dev, void *data)
67{
68 return 1;
69}
Linus Torvalds1da177e2005-04-16 15:20:36 -070070
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070071/*
72 * Some device drivers need know if pci is initiated.
73 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080074 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070075 */
76int no_pci_devices(void)
77{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080078 struct device *dev;
79 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070080
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080081 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
82 no_devices = (dev == NULL);
83 put_device(dev);
84 return no_devices;
85}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070086EXPORT_SYMBOL(no_pci_devices);
87
Linus Torvalds1da177e2005-04-16 15:20:36 -070088/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070089 * PCI Bus Class
90 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040091static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -070092{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040093 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -070094
Markus Elfringff0387c2014-11-10 21:02:17 -070095 put_device(pci_bus->bridge);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -070096 pci_bus_remove_resources(pci_bus);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +100097 pci_release_bus_of_node(pci_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -070098 kfree(pci_bus);
99}
100
101static struct class pcibus_class = {
102 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400103 .dev_release = &release_pcibus_dev,
Greg Kroah-Hartman56039e62013-07-24 15:05:17 -0700104 .dev_groups = pcibus_groups,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700105};
106
107static int __init pcibus_class_init(void)
108{
109 return class_register(&pcibus_class);
110}
111postcore_initcall(pcibus_class_init);
112
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400113static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800114{
115 u64 size = mask & maxbase; /* Find the significant bits */
116 if (!size)
117 return 0;
118
119 /* Get the lowest of them to find the decode size, and
120 from that the extent. */
121 size = (size & ~(size-1)) - 1;
122
123 /* base == maxbase can be valid only if the BAR has
124 already been programmed with all 1s. */
125 if (base == maxbase && ((base | size) & mask) != mask)
126 return 0;
127
128 return size;
129}
130
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600131static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800132{
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600133 u32 mem_type;
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600134 unsigned long flags;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600135
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400136 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600137 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
138 flags |= IORESOURCE_IO;
139 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400140 }
141
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600142 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
143 flags |= IORESOURCE_MEM;
144 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
145 flags |= IORESOURCE_PREFETCH;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400146
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600147 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
148 switch (mem_type) {
149 case PCI_BASE_ADDRESS_MEM_TYPE_32:
150 break;
151 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600152 /* 1M mem BAR treated as 32-bit BAR */
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600153 break;
154 case PCI_BASE_ADDRESS_MEM_TYPE_64:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600155 flags |= IORESOURCE_MEM_64;
156 break;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600157 default:
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600158 /* mem unknown type treated as 32-bit BAR */
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600159 break;
160 }
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600161 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400162}
163
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100164#define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
165
Yu Zhao0b400c72008-11-22 02:40:40 +0800166/**
167 * pci_read_base - read a PCI BAR
168 * @dev: the PCI device
169 * @type: type of the BAR
170 * @res: resource buffer to be filled in
171 * @pos: BAR position in the config space
172 *
173 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400174 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800175int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Ryan Desfosses3c78bc62014-04-18 20:13:49 -0400176 struct resource *res, unsigned int pos)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400177{
178 u32 l, sz, mask;
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600179 u64 l64, sz64, mask64;
Jacob Pan253d2e52010-07-16 10:19:22 -0700180 u16 orig_cmd;
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800181 struct pci_bus_region region, inverted_region;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400182
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200183 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400184
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600185 /* No printks while decoding is disabled! */
Jacob Pan253d2e52010-07-16 10:19:22 -0700186 if (!dev->mmio_always_on) {
187 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
Zoltan Kiss808e34e2013-08-22 23:19:18 +0100188 if (orig_cmd & PCI_COMMAND_DECODE_ENABLE) {
189 pci_write_config_word(dev, PCI_COMMAND,
190 orig_cmd & ~PCI_COMMAND_DECODE_ENABLE);
191 }
Jacob Pan253d2e52010-07-16 10:19:22 -0700192 }
193
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400194 res->name = pci_name(dev);
195
196 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200197 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400198 pci_read_config_dword(dev, pos, &sz);
199 pci_write_config_dword(dev, pos, l);
200
201 /*
202 * All bits set in sz means the device isn't working properly.
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600203 * If the BAR isn't implemented, all bits must be 0. If it's a
204 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
205 * 1 must be clear.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400206 */
Myron Stowef795d862014-10-30 11:54:43 -0600207 if (sz == 0xffffffff)
208 sz = 0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400209
210 /*
211 * I don't know how l can have all bits set. Copied from old code.
212 * Maybe it fixes a bug on some ancient platform.
213 */
214 if (l == 0xffffffff)
215 l = 0;
216
217 if (type == pci_bar_unknown) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600218 res->flags = decode_bar(dev, l);
219 res->flags |= IORESOURCE_SIZEALIGN;
220 if (res->flags & IORESOURCE_IO) {
Myron Stowef795d862014-10-30 11:54:43 -0600221 l64 = l & PCI_BASE_ADDRESS_IO_MASK;
222 sz64 = sz & PCI_BASE_ADDRESS_IO_MASK;
223 mask64 = PCI_BASE_ADDRESS_IO_MASK & (u32)IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400224 } else {
Myron Stowef795d862014-10-30 11:54:43 -0600225 l64 = l & PCI_BASE_ADDRESS_MEM_MASK;
226 sz64 = sz & PCI_BASE_ADDRESS_MEM_MASK;
227 mask64 = (u32)PCI_BASE_ADDRESS_MEM_MASK;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400228 }
229 } else {
230 res->flags |= (l & IORESOURCE_ROM_ENABLE);
Myron Stowef795d862014-10-30 11:54:43 -0600231 l64 = l & PCI_ROM_ADDRESS_MASK;
232 sz64 = sz & PCI_ROM_ADDRESS_MASK;
233 mask64 = (u32)PCI_ROM_ADDRESS_MASK;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400234 }
235
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600236 if (res->flags & IORESOURCE_MEM_64) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400237 pci_read_config_dword(dev, pos + 4, &l);
238 pci_write_config_dword(dev, pos + 4, ~0);
239 pci_read_config_dword(dev, pos + 4, &sz);
240 pci_write_config_dword(dev, pos + 4, l);
241
242 l64 |= ((u64)l << 32);
243 sz64 |= ((u64)sz << 32);
Myron Stowef795d862014-10-30 11:54:43 -0600244 mask64 |= ((u64)~0 << 32);
245 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400246
Myron Stowef795d862014-10-30 11:54:43 -0600247 if (!dev->mmio_always_on && (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
248 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400249
Myron Stowef795d862014-10-30 11:54:43 -0600250 if (!sz64)
251 goto fail;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400252
Myron Stowef795d862014-10-30 11:54:43 -0600253 sz64 = pci_size(l64, sz64, mask64);
Myron Stowe7e79c5f2014-10-30 11:54:50 -0600254 if (!sz64) {
255 dev_info(&dev->dev, FW_BUG "reg 0x%x: invalid BAR (can't size)\n",
256 pos);
Myron Stowef795d862014-10-30 11:54:43 -0600257 goto fail;
Myron Stowe7e79c5f2014-10-30 11:54:50 -0600258 }
Myron Stowef795d862014-10-30 11:54:43 -0600259
260 if (res->flags & IORESOURCE_MEM_64) {
Yinghai Lu3a9ad0b2015-05-27 17:23:51 -0700261 if ((sizeof(pci_bus_addr_t) < 8 || sizeof(resource_size_t) < 8)
262 && sz64 > 0x100000000ULL) {
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600263 res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
264 res->start = 0;
265 res->end = 0;
Myron Stowef795d862014-10-30 11:54:43 -0600266 dev_err(&dev->dev, "reg 0x%x: can't handle BAR larger than 4GB (size %#010llx)\n",
267 pos, (unsigned long long)sz64);
Bjorn Helgaas23b13bc2014-04-14 15:25:54 -0600268 goto out;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600269 }
270
Yinghai Lu3a9ad0b2015-05-27 17:23:51 -0700271 if ((sizeof(pci_bus_addr_t) < 8) && l) {
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600272 /* Above 32-bit boundary; try to reallocate */
Bjorn Helgaasc83bd902014-02-26 11:26:00 -0700273 res->flags |= IORESOURCE_UNSET;
Bjorn Helgaas72dc5602014-04-29 18:42:49 -0600274 res->start = 0;
275 res->end = sz64;
Myron Stowef795d862014-10-30 11:54:43 -0600276 dev_info(&dev->dev, "reg 0x%x: can't handle BAR above 4GB (bus address %#010llx)\n",
277 pos, (unsigned long long)l64);
Bjorn Helgaas72dc5602014-04-29 18:42:49 -0600278 goto out;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400279 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400280 }
281
Myron Stowef795d862014-10-30 11:54:43 -0600282 region.start = l64;
283 region.end = l64 + sz64;
284
Yinghai Lufc279852013-12-09 22:54:40 -0800285 pcibios_bus_to_resource(dev->bus, res, &region);
286 pcibios_resource_to_bus(dev->bus, &inverted_region, res);
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800287
288 /*
289 * If "A" is a BAR value (a bus address), "bus_to_resource(A)" is
290 * the corresponding resource address (the physical address used by
291 * the CPU. Converting that resource address back to a bus address
292 * should yield the original BAR value:
293 *
294 * resource_to_bus(bus_to_resource(A)) == A
295 *
296 * If it doesn't, CPU accesses to "bus_to_resource(A)" will not
297 * be claimed by the device.
298 */
299 if (inverted_region.start != region.start) {
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800300 res->flags |= IORESOURCE_UNSET;
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800301 res->start = 0;
Bjorn Helgaas26370fc2014-04-14 15:26:50 -0600302 res->end = region.end - region.start;
Myron Stowef795d862014-10-30 11:54:43 -0600303 dev_info(&dev->dev, "reg 0x%x: initial BAR value %#010llx invalid\n",
304 pos, (unsigned long long)region.start);
Kevin Haocf4d1cf2013-05-25 19:36:27 +0800305 }
Kevin Hao96ddef22013-05-25 19:36:26 +0800306
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600307 goto out;
308
309
310fail:
311 res->flags = 0;
312out:
Bjorn Helgaas31e9dd22014-04-29 18:37:47 -0600313 if (res->flags)
Kevin Hao33963e302013-05-25 19:36:25 +0800314 dev_printk(KERN_DEBUG, &dev->dev, "reg 0x%x: %pR\n", pos, res);
Bjorn Helgaas0ff95142012-08-23 10:53:08 -0600315
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600316 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800317}
318
Linus Torvalds1da177e2005-04-16 15:20:36 -0700319static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
320{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400321 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700322
Prarit Bhargavaad67b432016-05-11 12:27:16 -0400323 if (dev->non_compliant_bars)
324 return;
325
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400326 for (pos = 0; pos < howmany; pos++) {
327 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700328 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400329 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700330 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400331
Linus Torvalds1da177e2005-04-16 15:20:36 -0700332 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400333 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700334 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400335 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
Dan Williams92b19ff2015-08-10 23:07:06 -0400336 IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400337 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700338 }
339}
340
Bill Pemberton15856ad2012-11-21 15:35:00 -0500341static void pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700342{
343 struct pci_dev *dev = child->self;
344 u8 io_base_lo, io_limit_lo;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600345 unsigned long io_mask, io_granularity, base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700346 struct pci_bus_region region;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600347 struct resource *res;
348
349 io_mask = PCI_IO_RANGE_MASK;
350 io_granularity = 0x1000;
351 if (dev->io_window_1k) {
352 /* Support 1K I/O space granularity */
353 io_mask = PCI_IO_1K_RANGE_MASK;
354 io_granularity = 0x400;
355 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700356
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357 res = child->resource[0];
358 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
359 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600360 base = (io_base_lo & io_mask) << 8;
361 limit = (io_limit_lo & io_mask) << 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700362
363 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
364 u16 io_base_hi, io_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600365
Linus Torvalds1da177e2005-04-16 15:20:36 -0700366 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
367 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600368 base |= ((unsigned long) io_base_hi << 16);
369 limit |= ((unsigned long) io_limit_hi << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370 }
371
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600372 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700373 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700374 region.start = base;
Bjorn Helgaas2b28ae12012-07-09 13:38:57 -0600375 region.end = limit + io_granularity - 1;
Yinghai Lufc279852013-12-09 22:54:40 -0800376 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600377 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700378 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700379}
380
Bill Pemberton15856ad2012-11-21 15:35:00 -0500381static void pci_read_bridge_mmio(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700382{
383 struct pci_dev *dev = child->self;
384 u16 mem_base_lo, mem_limit_lo;
385 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700386 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700387 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700388
389 res = child->resource[1];
390 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
391 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600392 base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
393 limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600394 if (base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700395 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700396 region.start = base;
397 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800398 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600399 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700400 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700401}
402
Bill Pemberton15856ad2012-11-21 15:35:00 -0500403static void pci_read_bridge_mmio_pref(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700404{
405 struct pci_dev *dev = child->self;
406 u16 mem_base_lo, mem_limit_lo;
Yinghai Lu7fc986d2014-11-19 14:30:32 -0700407 u64 base64, limit64;
Yinghai Lu3a9ad0b2015-05-27 17:23:51 -0700408 pci_bus_addr_t base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700409 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700410 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700411
412 res = child->resource[2];
413 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
414 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
Yinghai Lu7fc986d2014-11-19 14:30:32 -0700415 base64 = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
416 limit64 = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700417
418 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
419 u32 mem_base_hi, mem_limit_hi;
Bjorn Helgaas8f38eac2012-06-19 07:45:44 -0600420
Linus Torvalds1da177e2005-04-16 15:20:36 -0700421 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
422 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
423
424 /*
425 * Some bridges set the base > limit by default, and some
426 * (broken) BIOSes do not initialize them. If we find
427 * this, just assume they are not being used.
428 */
429 if (mem_base_hi <= mem_limit_hi) {
Yinghai Lu7fc986d2014-11-19 14:30:32 -0700430 base64 |= (u64) mem_base_hi << 32;
431 limit64 |= (u64) mem_limit_hi << 32;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700432 }
433 }
Yinghai Lu7fc986d2014-11-19 14:30:32 -0700434
Yinghai Lu3a9ad0b2015-05-27 17:23:51 -0700435 base = (pci_bus_addr_t) base64;
436 limit = (pci_bus_addr_t) limit64;
Yinghai Lu7fc986d2014-11-19 14:30:32 -0700437
438 if (base != base64) {
439 dev_err(&dev->dev, "can't handle bridge window above 4GB (bus address %#010llx)\n",
440 (unsigned long long) base64);
441 return;
442 }
443
Bjorn Helgaas5dde3832012-07-09 13:38:41 -0600444 if (base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700445 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
446 IORESOURCE_MEM | IORESOURCE_PREFETCH;
447 if (res->flags & PCI_PREF_RANGE_TYPE_64)
448 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700449 region.start = base;
450 region.end = limit + 0xfffff;
Yinghai Lufc279852013-12-09 22:54:40 -0800451 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600452 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700453 }
454}
455
Bill Pemberton15856ad2012-11-21 15:35:00 -0500456void pci_read_bridge_bases(struct pci_bus *child)
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700457{
458 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700459 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700460 int i;
461
462 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
463 return;
464
Yinghai Lub918c622012-05-17 18:51:11 -0700465 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
466 &child->busn_res,
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700467 dev->transparent ? " (subtractive decode)" : "");
468
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700469 pci_bus_remove_resources(child);
470 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
471 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
472
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700473 pci_read_bridge_io(child);
474 pci_read_bridge_mmio(child);
475 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700476
477 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700478 pci_bus_for_each_resource(child->parent, res, i) {
Bjorn Helgaasd739a092014-04-14 16:10:54 -0600479 if (res && res->flags) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700480 pci_bus_add_resource(child, res,
481 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700482 dev_printk(KERN_DEBUG, &dev->dev,
483 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700484 res);
485 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700486 }
487 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700488}
489
Catalin Marinas670ba0c2014-09-29 15:29:26 +0100490static struct pci_bus *pci_alloc_bus(struct pci_bus *parent)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700491{
492 struct pci_bus *b;
493
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100494 b = kzalloc(sizeof(*b), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600495 if (!b)
496 return NULL;
497
498 INIT_LIST_HEAD(&b->node);
499 INIT_LIST_HEAD(&b->children);
500 INIT_LIST_HEAD(&b->devices);
501 INIT_LIST_HEAD(&b->slots);
502 INIT_LIST_HEAD(&b->resources);
503 b->max_bus_speed = PCI_SPEED_UNKNOWN;
504 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Catalin Marinas670ba0c2014-09-29 15:29:26 +0100505#ifdef CONFIG_PCI_DOMAINS_GENERIC
506 if (parent)
507 b->domain_nr = parent->domain_nr;
508#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700509 return b;
510}
511
Jiang Liu70efde22013-06-07 16:16:51 -0600512static void pci_release_host_bridge_dev(struct device *dev)
513{
514 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
515
516 if (bridge->release_fn)
517 bridge->release_fn(bridge);
518
519 pci_free_resource_list(&bridge->windows);
520
521 kfree(bridge);
522}
523
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +0100524static struct pci_host_bridge *pci_alloc_host_bridge(void)
Yinghai Lu7b543662012-04-02 18:31:53 -0700525{
526 struct pci_host_bridge *bridge;
527
528 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
Bjorn Helgaas05013482013-06-05 14:22:11 -0600529 if (!bridge)
530 return NULL;
Yinghai Lu7b543662012-04-02 18:31:53 -0700531
Bjorn Helgaas05013482013-06-05 14:22:11 -0600532 INIT_LIST_HEAD(&bridge->windows);
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +0100533
Yinghai Lu7b543662012-04-02 18:31:53 -0700534 return bridge;
535}
536
Stephen Hemminger0b950f02014-01-10 17:14:48 -0700537static const unsigned char pcix_bus_speed[] = {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500538 PCI_SPEED_UNKNOWN, /* 0 */
539 PCI_SPEED_66MHz_PCIX, /* 1 */
540 PCI_SPEED_100MHz_PCIX, /* 2 */
541 PCI_SPEED_133MHz_PCIX, /* 3 */
542 PCI_SPEED_UNKNOWN, /* 4 */
543 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
544 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
545 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
546 PCI_SPEED_UNKNOWN, /* 8 */
547 PCI_SPEED_66MHz_PCIX_266, /* 9 */
548 PCI_SPEED_100MHz_PCIX_266, /* A */
549 PCI_SPEED_133MHz_PCIX_266, /* B */
550 PCI_SPEED_UNKNOWN, /* C */
551 PCI_SPEED_66MHz_PCIX_533, /* D */
552 PCI_SPEED_100MHz_PCIX_533, /* E */
553 PCI_SPEED_133MHz_PCIX_533 /* F */
554};
555
Jacob Keller343e51a2013-07-31 06:53:16 +0000556const unsigned char pcie_link_speed[] = {
Matthew Wilcox3749c512009-12-13 08:11:32 -0500557 PCI_SPEED_UNKNOWN, /* 0 */
558 PCIE_SPEED_2_5GT, /* 1 */
559 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500560 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500561 PCI_SPEED_UNKNOWN, /* 4 */
562 PCI_SPEED_UNKNOWN, /* 5 */
563 PCI_SPEED_UNKNOWN, /* 6 */
564 PCI_SPEED_UNKNOWN, /* 7 */
565 PCI_SPEED_UNKNOWN, /* 8 */
566 PCI_SPEED_UNKNOWN, /* 9 */
567 PCI_SPEED_UNKNOWN, /* A */
568 PCI_SPEED_UNKNOWN, /* B */
569 PCI_SPEED_UNKNOWN, /* C */
570 PCI_SPEED_UNKNOWN, /* D */
571 PCI_SPEED_UNKNOWN, /* E */
572 PCI_SPEED_UNKNOWN /* F */
573};
574
575void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
576{
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700577 bus->cur_bus_speed = pcie_link_speed[linksta & PCI_EXP_LNKSTA_CLS];
Matthew Wilcox3749c512009-12-13 08:11:32 -0500578}
579EXPORT_SYMBOL_GPL(pcie_update_link_speed);
580
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500581static unsigned char agp_speeds[] = {
582 AGP_UNKNOWN,
583 AGP_1X,
584 AGP_2X,
585 AGP_4X,
586 AGP_8X
587};
588
589static enum pci_bus_speed agp_speed(int agp3, int agpstat)
590{
591 int index = 0;
592
593 if (agpstat & 4)
594 index = 3;
595 else if (agpstat & 2)
596 index = 2;
597 else if (agpstat & 1)
598 index = 1;
599 else
600 goto out;
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700601
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500602 if (agp3) {
603 index += 2;
604 if (index == 5)
605 index = 0;
606 }
607
608 out:
609 return agp_speeds[index];
610}
611
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500612static void pci_set_bus_speed(struct pci_bus *bus)
613{
614 struct pci_dev *bridge = bus->self;
615 int pos;
616
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500617 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
618 if (!pos)
619 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
620 if (pos) {
621 u32 agpstat, agpcmd;
622
623 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
624 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
625
626 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
627 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
628 }
629
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500630 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
631 if (pos) {
632 u16 status;
633 enum pci_bus_speed max;
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500634
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700635 pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS,
636 &status);
637
638 if (status & PCI_X_SSTATUS_533MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500639 max = PCI_SPEED_133MHz_PCIX_533;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700640 } else if (status & PCI_X_SSTATUS_266MHZ) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500641 max = PCI_SPEED_133MHz_PCIX_266;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700642 } else if (status & PCI_X_SSTATUS_133MHZ) {
Ryan Desfosses3c78bc62014-04-18 20:13:49 -0400643 if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2)
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500644 max = PCI_SPEED_133MHz_PCIX_ECC;
Ryan Desfosses3c78bc62014-04-18 20:13:49 -0400645 else
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500646 max = PCI_SPEED_133MHz_PCIX;
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500647 } else {
648 max = PCI_SPEED_66MHz_PCIX;
649 }
650
651 bus->max_bus_speed = max;
Bjorn Helgaas7793eea2012-12-05 13:51:17 -0700652 bus->cur_bus_speed = pcix_bus_speed[
653 (status & PCI_X_SSTATUS_FREQ) >> 6];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500654
655 return;
656 }
657
Yijing Wangfdfe1512013-09-05 15:55:29 +0800658 if (pci_is_pcie(bridge)) {
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500659 u32 linkcap;
660 u16 linksta;
661
Jiang Liu59875ae2012-07-24 17:20:06 +0800662 pcie_capability_read_dword(bridge, PCI_EXP_LNKCAP, &linkcap);
Bjorn Helgaas231afea2012-12-05 13:51:18 -0700663 bus->max_bus_speed = pcie_link_speed[linkcap & PCI_EXP_LNKCAP_SLS];
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500664
Jiang Liu59875ae2012-07-24 17:20:06 +0800665 pcie_capability_read_word(bridge, PCI_EXP_LNKSTA, &linksta);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500666 pcie_update_link_speed(bus, linksta);
667 }
668}
669
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100670static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus)
671{
Marc Zyngierb165e2b2015-07-28 14:46:12 +0100672 struct irq_domain *d;
673
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100674 /*
675 * Any firmware interface that can resolve the msi_domain
676 * should be called from here.
677 */
Marc Zyngierb165e2b2015-07-28 14:46:12 +0100678 d = pci_host_bridge_of_msi_domain(bus);
Suravee Suthikulpanit471036b2015-12-10 08:55:27 -0800679 if (!d)
680 d = pci_host_bridge_acpi_msi_domain(bus);
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100681
Jake Oshins788858e2016-02-16 21:56:22 +0000682#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
683 /*
684 * If no IRQ domain was found via the OF tree, try looking it up
685 * directly through the fwnode_handle.
686 */
687 if (!d) {
688 struct fwnode_handle *fwnode = pci_root_bus_fwnode(bus);
689
690 if (fwnode)
691 d = irq_find_matching_fwnode(fwnode,
692 DOMAIN_BUS_PCI_MSI);
693 }
694#endif
695
Marc Zyngierb165e2b2015-07-28 14:46:12 +0100696 return d;
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100697}
698
699static void pci_set_bus_msi_domain(struct pci_bus *bus)
700{
701 struct irq_domain *d;
Alex Williamson38ea72b2015-09-18 15:08:54 -0600702 struct pci_bus *b;
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100703
704 /*
Alex Williamson38ea72b2015-09-18 15:08:54 -0600705 * The bus can be a root bus, a subordinate bus, or a virtual bus
706 * created by an SR-IOV device. Walk up to the first bridge device
707 * found or derive the domain from the host bridge.
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100708 */
Alex Williamson38ea72b2015-09-18 15:08:54 -0600709 for (b = bus, d = NULL; !d && !pci_is_root_bus(b); b = b->parent) {
710 if (b->self)
711 d = dev_get_msi_domain(&b->self->dev);
712 }
713
714 if (!d)
715 d = pci_host_bridge_msi_domain(b);
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100716
717 dev_set_msi_domain(&bus->dev, d);
718}
719
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +0100720static int pci_register_host_bridge(struct pci_host_bridge *bridge)
721{
722 struct device *parent = bridge->dev.parent;
723 struct resource_entry *window, *n;
724 struct pci_bus *bus, *b;
725 resource_size_t offset;
726 LIST_HEAD(resources);
727 struct resource *res;
728 char addr[64], *fmt;
729 const char *name;
730 int err;
731
732 bus = pci_alloc_bus(NULL);
733 if (!bus)
734 return -ENOMEM;
735
736 bridge->bus = bus;
737
738 /* temporarily move resources off the list */
739 list_splice_init(&bridge->windows, &resources);
740 bus->sysdata = bridge->sysdata;
741 bus->msi = bridge->msi;
742 bus->ops = bridge->ops;
743 bus->number = bus->busn_res.start = bridge->busnr;
744#ifdef CONFIG_PCI_DOMAINS_GENERIC
745 bus->domain_nr = pci_bus_find_domain_nr(bus, parent);
746#endif
747
748 b = pci_find_bus(pci_domain_nr(bus), bridge->busnr);
749 if (b) {
750 /* If we already got to this bus through a different bridge, ignore it */
751 dev_dbg(&b->dev, "bus already known\n");
752 err = -EEXIST;
753 goto free;
754 }
755
756 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(bus),
757 bridge->busnr);
758
759 err = pcibios_root_bridge_prepare(bridge);
760 if (err)
761 goto free;
762
763 err = device_register(&bridge->dev);
764 if (err)
765 put_device(&bridge->dev);
766
767 bus->bridge = get_device(&bridge->dev);
768 device_enable_async_suspend(bus->bridge);
769 pci_set_bus_of_node(bus);
770 pci_set_bus_msi_domain(bus);
771
772 if (!parent)
773 set_dev_node(bus->bridge, pcibus_to_node(bus));
774
775 bus->dev.class = &pcibus_class;
776 bus->dev.parent = bus->bridge;
777
778 dev_set_name(&bus->dev, "%04x:%02x", pci_domain_nr(bus), bus->number);
779 name = dev_name(&bus->dev);
780
781 err = device_register(&bus->dev);
782 if (err)
783 goto unregister;
784
785 pcibios_add_bus(bus);
786
787 /* Create legacy_io and legacy_mem files for this bus */
788 pci_create_legacy_files(bus);
789
790 if (parent)
791 dev_info(parent, "PCI host bridge to bus %s\n", name);
792 else
793 pr_info("PCI host bridge to bus %s\n", name);
794
795 /* Add initial resources to the bus */
796 resource_list_for_each_entry_safe(window, n, &resources) {
797 list_move_tail(&window->node, &bridge->windows);
798 offset = window->offset;
799 res = window->res;
800
801 if (res->flags & IORESOURCE_BUS)
802 pci_bus_insert_busn_res(bus, bus->number, res->end);
803 else
804 pci_bus_add_resource(bus, res, 0);
805
806 if (offset) {
807 if (resource_type(res) == IORESOURCE_IO)
808 fmt = " (bus address [%#06llx-%#06llx])";
809 else
810 fmt = " (bus address [%#010llx-%#010llx])";
811
812 snprintf(addr, sizeof(addr), fmt,
813 (unsigned long long)(res->start - offset),
814 (unsigned long long)(res->end - offset));
815 } else
816 addr[0] = '\0';
817
818 dev_info(&bus->dev, "root bus resource %pR%s\n", res, addr);
819 }
820
821 down_write(&pci_bus_sem);
822 list_add_tail(&bus->node, &pci_root_buses);
823 up_write(&pci_bus_sem);
824
825 return 0;
826
827unregister:
828 put_device(&bridge->dev);
829 device_unregister(&bridge->dev);
830
831free:
832 kfree(bus);
833 return err;
834}
835
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700836static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
837 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700838{
839 struct pci_bus *child;
840 int i;
Yinghai Lu4f535092013-01-21 13:20:52 -0800841 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700842
843 /*
844 * Allocate a new bus, and inherit stuff from the parent..
845 */
Catalin Marinas670ba0c2014-09-29 15:29:26 +0100846 child = pci_alloc_bus(parent);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700847 if (!child)
848 return NULL;
849
Linus Torvalds1da177e2005-04-16 15:20:36 -0700850 child->parent = parent;
851 child->ops = parent->ops;
Thierry Reding0cbdcfc2013-08-09 22:27:08 +0200852 child->msi = parent->msi;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700853 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200854 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700855
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400856 /* initialize some portions of the bus device, but don't register it
Yinghai Lu4f535092013-01-21 13:20:52 -0800857 * now as the parent is not properly set up yet.
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400858 */
859 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100860 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861
862 /*
863 * Set up the primary, secondary and subordinate
864 * bus numbers.
865 */
Yinghai Lub918c622012-05-17 18:51:11 -0700866 child->number = child->busn_res.start = busnr;
867 child->primary = parent->busn_res.start;
868 child->busn_res.end = 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700869
Yinghai Lu4f535092013-01-21 13:20:52 -0800870 if (!bridge) {
871 child->dev.parent = parent->bridge;
872 goto add_dev;
873 }
Yu Zhao3789fa82008-11-22 02:41:07 +0800874
875 child->self = bridge;
876 child->bridge = get_device(&bridge->dev);
Yinghai Lu4f535092013-01-21 13:20:52 -0800877 child->dev.parent = child->bridge;
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +1000878 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500879 pci_set_bus_speed(child);
880
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800882 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700883 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
884 child->resource[i]->name = child->name;
885 }
886 bridge->subordinate = child;
887
Yinghai Lu4f535092013-01-21 13:20:52 -0800888add_dev:
Marc Zyngier44aa0c62015-07-28 14:46:11 +0100889 pci_set_bus_msi_domain(child);
Yinghai Lu4f535092013-01-21 13:20:52 -0800890 ret = device_register(&child->dev);
891 WARN_ON(ret < 0);
892
Jiang Liu10a95742013-04-12 05:44:20 +0000893 pcibios_add_bus(child);
894
Thierry Reding057bd2e2016-02-09 15:30:47 +0100895 if (child->ops->add_bus) {
896 ret = child->ops->add_bus(child);
897 if (WARN_ON(ret < 0))
898 dev_err(&child->dev, "failed to add bus: %d\n", ret);
899 }
900
Yinghai Lu4f535092013-01-21 13:20:52 -0800901 /* Create legacy_io and legacy_mem files for this bus */
902 pci_create_legacy_files(child);
903
Linus Torvalds1da177e2005-04-16 15:20:36 -0700904 return child;
905}
906
Ryan Desfosses3c78bc62014-04-18 20:13:49 -0400907struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
908 int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700909{
910 struct pci_bus *child;
911
912 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700913 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800914 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700915 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800916 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700917 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700918 return child;
919}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -0600920EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700921
Rajat Jainf3dbd802014-09-02 16:26:00 -0700922static void pci_enable_crs(struct pci_dev *pdev)
923{
924 u16 root_cap = 0;
925
926 /* Enable CRS Software Visibility if supported */
927 pcie_capability_read_word(pdev, PCI_EXP_RTCAP, &root_cap);
928 if (root_cap & PCI_EXP_RTCAP_CRSVIS)
929 pcie_capability_set_word(pdev, PCI_EXP_RTCTL,
930 PCI_EXP_RTCTL_CRSSVE);
931}
932
Linus Torvalds1da177e2005-04-16 15:20:36 -0700933/*
934 * If it's a bridge, configure it and scan the bus behind it.
935 * For CardBus bridges, we don't scan behind as the devices will
936 * be handled by the bridge driver itself.
937 *
938 * We need to process bridges in two passes -- first we scan those
939 * already configured by the BIOS and after we are done with all of
940 * them, we proceed to assigning numbers to the remaining buses in
941 * order to avoid overlaps between old and new bus numbers.
942 */
Bill Pemberton15856ad2012-11-21 15:35:00 -0500943int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700944{
945 struct pci_bus *child;
946 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100947 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700948 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600949 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100950 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700951
Mika Westerbergd963f652016-06-02 11:17:13 +0300952 /*
953 * Make sure the bridge is powered on to be able to access config
954 * space of devices below it.
955 */
956 pm_runtime_get_sync(&dev->dev);
957
Linus Torvalds1da177e2005-04-16 15:20:36 -0700958 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600959 primary = buses & 0xFF;
960 secondary = (buses >> 8) & 0xFF;
961 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700962
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600963 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
964 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700965
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100966 if (!primary && (primary != bus->number) && secondary && subordinate) {
967 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
968 primary = bus->number;
969 }
970
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100971 /* Check if setup is sensible at all */
972 if (!pass &&
Yinghai Lu1965f662012-09-10 17:19:33 -0700973 (primary != bus->number || secondary <= bus->number ||
Bjorn Helgaas12d87062014-09-19 11:08:40 -0600974 secondary > subordinate)) {
Yinghai Lu1965f662012-09-10 17:19:33 -0700975 dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n",
976 secondary, subordinate);
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100977 broken = 1;
978 }
979
Linus Torvalds1da177e2005-04-16 15:20:36 -0700980 /* Disable MasterAbortMode during probing to avoid reporting
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700981 of bus errors (in some architectures) */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700982 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
983 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
984 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
985
Rajat Jainf3dbd802014-09-02 16:26:00 -0700986 pci_enable_crs(dev);
987
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600988 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
989 !is_cardbus && !broken) {
990 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700991 /*
992 * Bus already configured by firmware, process it in the first
993 * pass and just note the configuration.
994 */
995 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000996 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700997
998 /*
Andreas Noever2ed85822014-01-23 21:59:22 +0100999 * The bus might already exist for two reasons: Either we are
1000 * rescanning the bus or the bus is reachable through more than
1001 * one bridge. The second case can happen with the i450NX
1002 * chipset.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001003 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -06001004 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -06001005 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -06001006 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -06001007 if (!child)
1008 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -06001009 child->primary = primary;
Yinghai Lubc76b732012-05-17 18:51:13 -07001010 pci_bus_insert_busn_res(child, secondary, subordinate);
Alex Chiang74710de2009-03-20 14:56:10 -06001011 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001012 }
1013
Linus Torvalds1da177e2005-04-16 15:20:36 -07001014 cmax = pci_scan_child_bus(child);
Andreas Noeverc95b0bd2014-01-23 21:59:27 +01001015 if (cmax > subordinate)
1016 dev_warn(&dev->dev, "bridge has subordinate %02x but max busn %02x\n",
1017 subordinate, cmax);
1018 /* subordinate should equal child->busn_res.end */
1019 if (subordinate > max)
1020 max = subordinate;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001021 } else {
1022 /*
1023 * We need to assign a number to this bus which we always
1024 * do in the second pass.
1025 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -07001026 if (!pass) {
Andreas Noever619c8c32014-01-23 21:59:23 +01001027 if (pcibios_assign_all_busses() || broken || is_cardbus)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -07001028 /* Temporarily disable forwarding of the
1029 configuration cycles on all bridges in
1030 this bus segment to avoid possible
1031 conflicts in the second pass between two
1032 bridges programmed with overlapping
1033 bus ranges. */
1034 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
1035 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +00001036 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -07001037 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001038
1039 /* Clear errors */
1040 pci_write_config_word(dev, PCI_STATUS, 0xffff);
1041
Bjorn Helgaas7a0b33d2014-09-19 10:56:06 -06001042 /* Prevent assigning a bus number that already exists.
1043 * This can happen when a bridge is hot-plugged, so in
1044 * this case we only re-scan this bus. */
Tiejun Chenb1a98b62011-06-02 11:02:50 +08001045 child = pci_find_bus(pci_domain_nr(bus), max+1);
1046 if (!child) {
Andreas Noever9a4d7d82014-01-23 21:59:21 +01001047 child = pci_add_new_bus(bus, dev, max+1);
Tiejun Chenb1a98b62011-06-02 11:02:50 +08001048 if (!child)
1049 goto out;
Bjorn Helgaas12d87062014-09-19 11:08:40 -06001050 pci_bus_insert_busn_res(child, max+1, 0xff);
Tiejun Chenb1a98b62011-06-02 11:02:50 +08001051 }
Andreas Noever9a4d7d82014-01-23 21:59:21 +01001052 max++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001053 buses = (buses & 0xff000000)
1054 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -07001055 | ((unsigned int)(child->busn_res.start) << 8)
1056 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001057
1058 /*
1059 * yenta.c forces a secondary latency timer of 176.
1060 * Copy that behaviour here.
1061 */
1062 if (is_cardbus) {
1063 buses &= ~0xff000000;
1064 buses |= CARDBUS_LATENCY_TIMER << 24;
1065 }
Jesper Juhl7c867c82011-01-24 21:14:33 +01001066
Linus Torvalds1da177e2005-04-16 15:20:36 -07001067 /*
1068 * We need to blast all three values with a single write.
1069 */
1070 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
1071
1072 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -07001073 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001074 max = pci_scan_child_bus(child);
1075 } else {
1076 /*
1077 * For CardBus bridges, we leave 4 bus numbers
1078 * as cards with a PCI-to-PCI bridge can be
1079 * inserted later.
1080 */
Ryan Desfosses3c78bc62014-04-18 20:13:49 -04001081 for (i = 0; i < CARDBUS_RESERVE_BUSNR; i++) {
Dominik Brodowski49887942005-12-08 16:53:12 +01001082 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -07001083 if (pci_find_bus(pci_domain_nr(bus),
1084 max+i+1))
1085 break;
Dominik Brodowski49887942005-12-08 16:53:12 +01001086 while (parent->parent) {
1087 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -07001088 (parent->busn_res.end > max) &&
1089 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +01001090 j = 1;
1091 }
1092 parent = parent->parent;
1093 }
1094 if (j) {
1095 /*
1096 * Often, there are two cardbus bridges
1097 * -- try to leave one valid bus number
1098 * for each one.
1099 */
1100 i /= 2;
1101 break;
1102 }
1103 }
Rajesh Shahcc574502005-04-28 00:25:47 -07001104 max += i;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001105 }
1106 /*
1107 * Set the subordinate bus number to its real value.
1108 */
Yinghai Lubc76b732012-05-17 18:51:13 -07001109 pci_bus_update_busn_res_end(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001110 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
1111 }
1112
Gary Hadecb3576f2008-02-08 14:00:52 -08001113 sprintf(child->name,
1114 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
1115 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001116
Bernhard Kaindld55bef512007-07-30 20:35:13 +02001117 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +01001118 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -07001119 if ((child->busn_res.end > bus->busn_res.end) ||
1120 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +01001121 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -07001122 (child->busn_res.end < bus->number)) {
Ryan Desfosses227f0642014-04-18 20:13:50 -04001123 dev_info(&child->dev, "%pR %s hidden behind%s bridge %s %pR\n",
Yinghai Lub918c622012-05-17 18:51:11 -07001124 &child->busn_res,
1125 (bus->number > child->busn_res.end &&
1126 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -08001127 "wholly" : "partially",
1128 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -07001129 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -07001130 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +01001131 }
1132 bus = bus->parent;
1133 }
1134
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +00001135out:
1136 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
1137
Mika Westerbergd963f652016-06-02 11:17:13 +03001138 pm_runtime_put(&dev->dev);
1139
Linus Torvalds1da177e2005-04-16 15:20:36 -07001140 return max;
1141}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -06001142EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001143
1144/*
1145 * Read interrupt line and base address registers.
1146 * The architecture-dependent code can tweak these, of course.
1147 */
1148static void pci_read_irq(struct pci_dev *dev)
1149{
1150 unsigned char irq;
1151
1152 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -08001153 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001154 if (irq)
1155 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
1156 dev->irq = irq;
1157}
1158
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +00001159void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +08001160{
1161 int pos;
1162 u16 reg16;
Yijing Wangd0751b92015-05-21 15:05:02 +08001163 int type;
1164 struct pci_dev *parent;
Yu Zhao480b93b2009-03-20 11:25:14 +08001165
1166 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
1167 if (!pos)
1168 return;
Kenji Kaneshige0efea002009-11-05 12:05:11 +09001169 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +08001170 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
Yijing Wang786e2282012-07-24 17:20:02 +08001171 pdev->pcie_flags_reg = reg16;
Jon Masonb03e7492011-07-20 15:20:54 -05001172 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
1173 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yijing Wangd0751b92015-05-21 15:05:02 +08001174
1175 /*
1176 * A Root Port is always the upstream end of a Link. No PCIe
1177 * component has two Links. Two Links are connected by a Switch
1178 * that has a Port on each Link and internal logic to connect the
1179 * two Ports.
1180 */
1181 type = pci_pcie_type(pdev);
1182 if (type == PCI_EXP_TYPE_ROOT_PORT)
1183 pdev->has_secondary_link = 1;
1184 else if (type == PCI_EXP_TYPE_UPSTREAM ||
1185 type == PCI_EXP_TYPE_DOWNSTREAM) {
1186 parent = pci_upstream_bridge(pdev);
Yijing Wangb35b1df2015-08-17 18:47:58 +08001187
1188 /*
1189 * Usually there's an upstream device (Root Port or Switch
1190 * Downstream Port), but we can't assume one exists.
1191 */
1192 if (parent && !parent->has_secondary_link)
Yijing Wangd0751b92015-05-21 15:05:02 +08001193 pdev->has_secondary_link = 1;
1194 }
Yu Zhao480b93b2009-03-20 11:25:14 +08001195}
1196
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +00001197void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -07001198{
Eric W. Biederman28760482009-09-09 14:09:24 -07001199 u32 reg32;
1200
Jiang Liu59875ae2012-07-24 17:20:06 +08001201 pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &reg32);
Eric W. Biederman28760482009-09-09 14:09:24 -07001202 if (reg32 & PCI_EXP_SLTCAP_HPC)
1203 pdev->is_hotplug_bridge = 1;
1204}
1205
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001206/**
Alex Williamson78916b02014-05-05 14:20:51 -06001207 * pci_ext_cfg_is_aliased - is ext config space just an alias of std config?
1208 * @dev: PCI device
1209 *
1210 * PCI Express to PCI/PCI-X Bridge Specification, rev 1.0, 4.1.4 says that
1211 * when forwarding a type1 configuration request the bridge must check that
1212 * the extended register address field is zero. The bridge is not permitted
1213 * to forward the transactions and must handle it as an Unsupported Request.
1214 * Some bridges do not follow this rule and simply drop the extended register
1215 * bits, resulting in the standard config space being aliased, every 256
1216 * bytes across the entire configuration space. Test for this condition by
1217 * comparing the first dword of each potential alias to the vendor/device ID.
1218 * Known offenders:
1219 * ASM1083/1085 PCIe-to-PCI Reversible Bridge (1b21:1080, rev 01 & 03)
1220 * AMD/ATI SBx00 PCI to PCI Bridge (1002:4384, rev 40)
1221 */
1222static bool pci_ext_cfg_is_aliased(struct pci_dev *dev)
1223{
1224#ifdef CONFIG_PCI_QUIRKS
1225 int pos;
1226 u32 header, tmp;
1227
1228 pci_read_config_dword(dev, PCI_VENDOR_ID, &header);
1229
1230 for (pos = PCI_CFG_SPACE_SIZE;
1231 pos < PCI_CFG_SPACE_EXP_SIZE; pos += PCI_CFG_SPACE_SIZE) {
1232 if (pci_read_config_dword(dev, pos, &tmp) != PCIBIOS_SUCCESSFUL
1233 || header != tmp)
1234 return false;
1235 }
1236
1237 return true;
1238#else
1239 return false;
1240#endif
1241}
1242
1243/**
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001244 * pci_cfg_space_size - get the configuration space size of the PCI device.
1245 * @dev: PCI device
1246 *
1247 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1248 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1249 * access it. Maybe we don't have a way to generate extended config space
1250 * accesses, or the device is behind a reverse Express bridge. So we try
1251 * reading the dword at 0x100 which must either be 0 or a valid extended
1252 * capability header.
1253 */
1254static int pci_cfg_space_size_ext(struct pci_dev *dev)
1255{
1256 u32 status;
1257 int pos = PCI_CFG_SPACE_SIZE;
1258
1259 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
Bjorn Helgaas8e5a3952015-12-07 18:21:10 -06001260 return PCI_CFG_SPACE_SIZE;
Alex Williamson78916b02014-05-05 14:20:51 -06001261 if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
Bjorn Helgaas8e5a3952015-12-07 18:21:10 -06001262 return PCI_CFG_SPACE_SIZE;
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001263
1264 return PCI_CFG_SPACE_EXP_SIZE;
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001265}
1266
1267int pci_cfg_space_size(struct pci_dev *dev)
1268{
1269 int pos;
1270 u32 status;
1271 u16 class;
1272
1273 class = dev->class >> 8;
1274 if (class == PCI_CLASS_BRIDGE_HOST)
1275 return pci_cfg_space_size_ext(dev);
1276
Bjorn Helgaas8e5a3952015-12-07 18:21:10 -06001277 if (pci_is_pcie(dev))
1278 return pci_cfg_space_size_ext(dev);
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001279
Bjorn Helgaas8e5a3952015-12-07 18:21:10 -06001280 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1281 if (!pos)
1282 return PCI_CFG_SPACE_SIZE;
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001283
Bjorn Helgaas8e5a3952015-12-07 18:21:10 -06001284 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1285 if (status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ))
1286 return pci_cfg_space_size_ext(dev);
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001287
Stephen Hemminger0b950f02014-01-10 17:14:48 -07001288 return PCI_CFG_SPACE_SIZE;
1289}
1290
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +02001291#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -08001292
Guilherme G. Piccolie80e7edc2015-10-21 12:17:35 -02001293static void pci_msi_setup_pci_dev(struct pci_dev *dev)
Michael S. Tsirkin18516172015-05-07 09:52:21 -05001294{
1295 /*
1296 * Disable the MSI hardware to avoid screaming interrupts
1297 * during boot. This is the power on reset default so
1298 * usually this should be a noop.
1299 */
1300 dev->msi_cap = pci_find_capability(dev, PCI_CAP_ID_MSI);
1301 if (dev->msi_cap)
1302 pci_msi_set_enable(dev, 0);
1303
1304 dev->msix_cap = pci_find_capability(dev, PCI_CAP_ID_MSIX);
1305 if (dev->msix_cap)
1306 pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
1307}
1308
Linus Torvalds1da177e2005-04-16 15:20:36 -07001309/**
1310 * pci_setup_device - fill in class and map information of a device
1311 * @dev: the device structure to fill
1312 *
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001313 * Initialize the device structure with information about the device's
Linus Torvalds1da177e2005-04-16 15:20:36 -07001314 * vendor,class,memory and IO-space addresses,IRQ lines etc.
1315 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +08001316 * Returns 0 on success and negative if unknown type of device (not normal,
1317 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -07001318 */
Yu Zhao480b93b2009-03-20 11:25:14 +08001319int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001320{
1321 u32 class;
Bjorn Helgaasb84106b2016-02-25 14:35:57 -06001322 u16 cmd;
Yu Zhao480b93b2009-03-20 11:25:14 +08001323 u8 hdr_type;
Gabe Blackbc577d22009-10-06 10:45:19 -05001324 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001325 struct pci_bus_region region;
1326 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +08001327
1328 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
1329 return -EIO;
1330
1331 dev->sysdata = dev->bus->sysdata;
1332 dev->dev.parent = dev->bus->bridge;
1333 dev->dev.bus = &pci_bus_type;
1334 dev->hdr_type = hdr_type & 0x7f;
1335 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +08001336 dev->error_state = pci_channel_io_normal;
1337 set_pcie_port_type(dev);
1338
Yijing Wang017ffe62015-07-17 17:16:32 +08001339 pci_dev_assign_slot(dev);
Yu Zhao480b93b2009-03-20 11:25:14 +08001340 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
1341 set this higher, assuming the system even supports it. */
1342 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001343
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -07001344 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
1345 dev->bus->number, PCI_SLOT(dev->devfn),
1346 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001347
1348 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -07001349 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001350 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001351
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001352 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
1353 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001354
Yu Zhao853346e2009-03-21 22:05:11 +08001355 /* need to have dev->class ready */
1356 dev->cfg_size = pci_cfg_space_size(dev);
1357
Linus Torvalds1da177e2005-04-16 15:20:36 -07001358 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -07001359 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001360
1361 /* Early fixups, before probing the BARs */
1362 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001363 /* device class may be changed after fixup */
1364 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001365
Bjorn Helgaasb84106b2016-02-25 14:35:57 -06001366 if (dev->non_compliant_bars) {
1367 pci_read_config_word(dev, PCI_COMMAND, &cmd);
1368 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
1369 dev_info(&dev->dev, "device has non-compliant BARs; disabling IO/MEM decoding\n");
1370 cmd &= ~PCI_COMMAND_IO;
1371 cmd &= ~PCI_COMMAND_MEMORY;
1372 pci_write_config_word(dev, PCI_COMMAND, cmd);
1373 }
1374 }
1375
Linus Torvalds1da177e2005-04-16 15:20:36 -07001376 switch (dev->hdr_type) { /* header type */
1377 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1378 if (class == PCI_CLASS_BRIDGE_PCI)
1379 goto bad;
1380 pci_read_irq(dev);
1381 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1382 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1383 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001384
1385 /*
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001386 * Do the ugly legacy mode stuff here rather than broken chip
1387 * quirk code. Legacy mode ATA controllers have fixed
1388 * addresses. These are not always echoed in BAR0-3, and
1389 * BAR0-3 in a few cases contain junk!
Alan Cox368c73d2006-10-04 00:41:26 +01001390 */
1391 if (class == PCI_CLASS_STORAGE_IDE) {
1392 u8 progif;
1393 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1394 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001395 region.start = 0x1F0;
1396 region.end = 0x1F7;
1397 res = &dev->resource[0];
1398 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001399 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001400 dev_info(&dev->dev, "legacy IDE quirk: reg 0x10: %pR\n",
1401 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001402 region.start = 0x3F6;
1403 region.end = 0x3F6;
1404 res = &dev->resource[1];
1405 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001406 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001407 dev_info(&dev->dev, "legacy IDE quirk: reg 0x14: %pR\n",
1408 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001409 }
1410 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001411 region.start = 0x170;
1412 region.end = 0x177;
1413 res = &dev->resource[2];
1414 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001415 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001416 dev_info(&dev->dev, "legacy IDE quirk: reg 0x18: %pR\n",
1417 res);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001418 region.start = 0x376;
1419 region.end = 0x376;
1420 res = &dev->resource[3];
1421 res->flags = LEGACY_IO_RESOURCE;
Yinghai Lufc279852013-12-09 22:54:40 -08001422 pcibios_bus_to_resource(dev->bus, res, &region);
Bjorn Helgaas075eb9e2014-03-05 14:07:03 -07001423 dev_info(&dev->dev, "legacy IDE quirk: reg 0x1c: %pR\n",
1424 res);
Alan Cox368c73d2006-10-04 00:41:26 +01001425 }
1426 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001427 break;
1428
1429 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1430 if (class != PCI_CLASS_BRIDGE_PCI)
1431 goto bad;
1432 /* The PCI-to-PCI bridge spec requires that subtractive
1433 decoding (i.e. transparent) bridge must have programming
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001434 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001435 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001436 dev->transparent = ((dev->class & 0xff) == 1);
1437 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001438 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001439 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1440 if (pos) {
1441 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1442 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1443 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001444 break;
1445
1446 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1447 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1448 goto bad;
1449 pci_read_irq(dev);
1450 pci_read_bases(dev, 1, 0);
1451 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1452 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1453 break;
1454
1455 default: /* unknown header */
Ryan Desfosses227f0642014-04-18 20:13:50 -04001456 dev_err(&dev->dev, "unknown header type %02x, ignoring device\n",
1457 dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001458 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001459
1460 bad:
Ryan Desfosses227f0642014-04-18 20:13:50 -04001461 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header type %02x)\n",
1462 dev->class, dev->hdr_type);
Bjorn Helgaas2b4aed12015-06-19 16:20:58 -05001463 dev->class = PCI_CLASS_NOT_DEFINED << 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001464 }
1465
1466 /* We found a fine healthy device, go go go... */
1467 return 0;
1468}
1469
Bjorn Helgaas9dae3a92015-08-20 16:08:27 -05001470static void pci_configure_mps(struct pci_dev *dev)
1471{
1472 struct pci_dev *bridge = pci_upstream_bridge(dev);
Keith Busch27d868b2015-08-24 08:48:16 -05001473 int mps, p_mps, rc;
Bjorn Helgaas9dae3a92015-08-20 16:08:27 -05001474
1475 if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge))
1476 return;
1477
1478 mps = pcie_get_mps(dev);
1479 p_mps = pcie_get_mps(bridge);
1480
1481 if (mps == p_mps)
1482 return;
1483
1484 if (pcie_bus_config == PCIE_BUS_TUNE_OFF) {
1485 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",
1486 mps, pci_name(bridge), p_mps);
1487 return;
1488 }
Keith Busch27d868b2015-08-24 08:48:16 -05001489
1490 /*
1491 * Fancier MPS configuration is done later by
1492 * pcie_bus_configure_settings()
1493 */
1494 if (pcie_bus_config != PCIE_BUS_DEFAULT)
1495 return;
1496
1497 rc = pcie_set_mps(dev, p_mps);
1498 if (rc) {
1499 dev_warn(&dev->dev, "can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n",
1500 p_mps);
1501 return;
1502 }
1503
1504 dev_info(&dev->dev, "Max Payload Size set to %d (was %d, max %d)\n",
1505 p_mps, mps, 128 << dev->pcie_mpss);
Bjorn Helgaas9dae3a92015-08-20 16:08:27 -05001506}
1507
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001508static struct hpp_type0 pci_default_type0 = {
1509 .revision = 1,
1510 .cache_line_size = 8,
1511 .latency_timer = 0x40,
1512 .enable_serr = 0,
1513 .enable_perr = 0,
1514};
1515
1516static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
1517{
1518 u16 pci_cmd, pci_bctl;
1519
Bjorn Helgaasc6285fc2014-08-29 18:10:19 -06001520 if (!hpp)
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001521 hpp = &pci_default_type0;
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001522
1523 if (hpp->revision > 1) {
1524 dev_warn(&dev->dev,
1525 "PCI settings rev %d not supported; using defaults\n",
1526 hpp->revision);
1527 hpp = &pci_default_type0;
1528 }
1529
1530 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, hpp->cache_line_size);
1531 pci_write_config_byte(dev, PCI_LATENCY_TIMER, hpp->latency_timer);
1532 pci_read_config_word(dev, PCI_COMMAND, &pci_cmd);
1533 if (hpp->enable_serr)
1534 pci_cmd |= PCI_COMMAND_SERR;
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001535 if (hpp->enable_perr)
1536 pci_cmd |= PCI_COMMAND_PARITY;
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001537 pci_write_config_word(dev, PCI_COMMAND, pci_cmd);
1538
1539 /* Program bridge control value */
1540 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
1541 pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER,
1542 hpp->latency_timer);
1543 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &pci_bctl);
1544 if (hpp->enable_serr)
1545 pci_bctl |= PCI_BRIDGE_CTL_SERR;
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001546 if (hpp->enable_perr)
1547 pci_bctl |= PCI_BRIDGE_CTL_PARITY;
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001548 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, pci_bctl);
1549 }
1550}
1551
1552static void program_hpp_type1(struct pci_dev *dev, struct hpp_type1 *hpp)
1553{
1554 if (hpp)
1555 dev_warn(&dev->dev, "PCI-X settings not supported\n");
1556}
1557
1558static void program_hpp_type2(struct pci_dev *dev, struct hpp_type2 *hpp)
1559{
1560 int pos;
1561 u32 reg32;
1562
1563 if (!hpp)
1564 return;
1565
1566 if (hpp->revision > 1) {
1567 dev_warn(&dev->dev, "PCIe settings rev %d not supported\n",
1568 hpp->revision);
1569 return;
1570 }
1571
Bjorn Helgaas302328c2014-09-03 13:26:29 -06001572 /*
1573 * Don't allow _HPX to change MPS or MRRS settings. We manage
1574 * those to make sure they're consistent with the rest of the
1575 * platform.
1576 */
1577 hpp->pci_exp_devctl_and |= PCI_EXP_DEVCTL_PAYLOAD |
1578 PCI_EXP_DEVCTL_READRQ;
1579 hpp->pci_exp_devctl_or &= ~(PCI_EXP_DEVCTL_PAYLOAD |
1580 PCI_EXP_DEVCTL_READRQ);
1581
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001582 /* Initialize Device Control Register */
1583 pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
1584 ~hpp->pci_exp_devctl_and, hpp->pci_exp_devctl_or);
1585
1586 /* Initialize Link Control Register */
Yinghai Lu7a1562d2014-11-11 12:09:46 -08001587 if (pcie_cap_has_lnkctl(dev))
Bjorn Helgaas589fcc22014-09-12 20:02:00 -06001588 pcie_capability_clear_and_set_word(dev, PCI_EXP_LNKCTL,
1589 ~hpp->pci_exp_lnkctl_and, hpp->pci_exp_lnkctl_or);
1590
1591 /* Find Advanced Error Reporting Enhanced Capability */
1592 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
1593 if (!pos)
1594 return;
1595
1596 /* Initialize Uncorrectable Error Mask Register */
1597 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, &reg32);
1598 reg32 = (reg32 & hpp->unc_err_mask_and) | hpp->unc_err_mask_or;
1599 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_MASK, reg32);
1600
1601 /* Initialize Uncorrectable Error Severity Register */
1602 pci_read_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, &reg32);
1603 reg32 = (reg32 & hpp->unc_err_sever_and) | hpp->unc_err_sever_or;
1604 pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_SEVER, reg32);
1605
1606 /* Initialize Correctable Error Mask Register */
1607 pci_read_config_dword(dev, pos + PCI_ERR_COR_MASK, &reg32);
1608 reg32 = (reg32 & hpp->cor_err_mask_and) | hpp->cor_err_mask_or;
1609 pci_write_config_dword(dev, pos + PCI_ERR_COR_MASK, reg32);
1610
1611 /* Initialize Advanced Error Capabilities and Control Register */
1612 pci_read_config_dword(dev, pos + PCI_ERR_CAP, &reg32);
1613 reg32 = (reg32 & hpp->adv_err_cap_and) | hpp->adv_err_cap_or;
1614 pci_write_config_dword(dev, pos + PCI_ERR_CAP, reg32);
1615
1616 /*
1617 * FIXME: The following two registers are not supported yet.
1618 *
1619 * o Secondary Uncorrectable Error Severity Register
1620 * o Secondary Uncorrectable Error Mask Register
1621 */
1622}
1623
Bjorn Helgaas6cd33642014-08-27 14:29:47 -06001624static void pci_configure_device(struct pci_dev *dev)
1625{
1626 struct hotplug_params hpp;
1627 int ret;
1628
Bjorn Helgaas9dae3a92015-08-20 16:08:27 -05001629 pci_configure_mps(dev);
1630
Bjorn Helgaas6cd33642014-08-27 14:29:47 -06001631 memset(&hpp, 0, sizeof(hpp));
1632 ret = pci_get_hp_params(dev, &hpp);
1633 if (ret)
1634 return;
1635
1636 program_hpp_type2(dev, hpp.t2);
1637 program_hpp_type1(dev, hpp.t1);
1638 program_hpp_type0(dev, hpp.t0);
1639}
1640
Zhao, Yu201de562008-10-13 19:49:55 +08001641static void pci_release_capabilities(struct pci_dev *dev)
1642{
1643 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001644 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001645 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001646}
1647
Linus Torvalds1da177e2005-04-16 15:20:36 -07001648/**
1649 * pci_release_dev - free a pci device structure when all users of it are finished.
1650 * @dev: device that's been disconnected
1651 *
1652 * Will be called only by the device core when all users of this pci device are
1653 * done.
1654 */
1655static void pci_release_dev(struct device *dev)
1656{
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001657 struct pci_dev *pci_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001658
Rafael J. Wysocki04480092014-02-01 15:38:29 +01001659 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001660 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001661 pci_release_of_node(pci_dev);
Sebastian Ott6ae32c52013-06-04 19:18:14 +02001662 pcibios_release_device(pci_dev);
Gu Zheng8b1fce02013-05-25 21:48:31 +08001663 pci_bus_put(pci_dev->bus);
Alex Williamson782a9852014-05-20 08:53:21 -06001664 kfree(pci_dev->driver_override);
Jacek Lawrynowicz338c3142016-03-03 15:38:02 +01001665 kfree(pci_dev->dma_alias_mask);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001666 kfree(pci_dev);
1667}
1668
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001669struct pci_dev *pci_alloc_dev(struct pci_bus *bus)
Michael Ellerman65891212007-04-05 17:19:08 +10001670{
1671 struct pci_dev *dev;
1672
1673 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1674 if (!dev)
1675 return NULL;
1676
Michael Ellerman65891212007-04-05 17:19:08 +10001677 INIT_LIST_HEAD(&dev->bus_list);
Brian King88e7b162013-04-08 03:05:07 +00001678 dev->dev.type = &pci_dev_type;
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001679 dev->bus = pci_bus_get(bus);
Michael Ellerman65891212007-04-05 17:19:08 +10001680
1681 return dev;
1682}
Gu Zheng3c6e6ae2013-05-25 21:48:30 +08001683EXPORT_SYMBOL(pci_alloc_dev);
1684
Yinghai Luefdc87d2012-01-27 10:55:10 -08001685bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
Ryan Desfosses3c78bc62014-04-18 20:13:49 -04001686 int crs_timeout)
Yinghai Luefdc87d2012-01-27 10:55:10 -08001687{
1688 int delay = 1;
1689
1690 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1691 return false;
1692
1693 /* some broken boards return 0 or ~0 if a slot is empty: */
1694 if (*l == 0xffffffff || *l == 0x00000000 ||
1695 *l == 0x0000ffff || *l == 0xffff0000)
1696 return false;
1697
Rajat Jain89665a6a2014-09-08 14:19:49 -07001698 /*
1699 * Configuration Request Retry Status. Some root ports return the
1700 * actual device ID instead of the synthetic ID (0xFFFF) required
1701 * by the PCIe spec. Ignore the device ID and only check for
1702 * (vendor id == 1).
1703 */
1704 while ((*l & 0xffff) == 0x0001) {
Yinghai Luefdc87d2012-01-27 10:55:10 -08001705 if (!crs_timeout)
1706 return false;
1707
1708 msleep(delay);
1709 delay *= 2;
1710 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1711 return false;
1712 /* Card hasn't responded in 60 seconds? Must be stuck. */
1713 if (delay > crs_timeout) {
Ryan Desfosses227f0642014-04-18 20:13:50 -04001714 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not responding\n",
1715 pci_domain_nr(bus), bus->number, PCI_SLOT(devfn),
1716 PCI_FUNC(devfn));
Yinghai Luefdc87d2012-01-27 10:55:10 -08001717 return false;
1718 }
1719 }
1720
1721 return true;
1722}
1723EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1724
Linus Torvalds1da177e2005-04-16 15:20:36 -07001725/*
1726 * Read the config data for a PCI device, sanity-check it
1727 * and fill in the dev structure...
1728 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001729static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001730{
1731 struct pci_dev *dev;
1732 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001733
Yinghai Luefdc87d2012-01-27 10:55:10 -08001734 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001735 return NULL;
1736
Gu Zheng8b1fce02013-05-25 21:48:31 +08001737 dev = pci_alloc_dev(bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001738 if (!dev)
1739 return NULL;
1740
Linus Torvalds1da177e2005-04-16 15:20:36 -07001741 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001742 dev->vendor = l & 0xffff;
1743 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001744
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001745 pci_set_of_node(dev);
1746
Yu Zhao480b93b2009-03-20 11:25:14 +08001747 if (pci_setup_device(dev)) {
Gu Zheng8b1fce02013-05-25 21:48:31 +08001748 pci_bus_put(dev->bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001749 kfree(dev);
1750 return NULL;
1751 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001752
1753 return dev;
1754}
1755
Zhao, Yu201de562008-10-13 19:49:55 +08001756static void pci_init_capabilities(struct pci_dev *dev)
1757{
Sean O. Stalley938174e2015-10-29 17:35:39 -05001758 /* Enhanced Allocation */
1759 pci_ea_init(dev);
1760
Guilherme G. Piccolie80e7edc2015-10-21 12:17:35 -02001761 /* Setup MSI caps & disable MSI/MSI-X interrupts */
1762 pci_msi_setup_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001763
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001764 /* Buffers for saving PCIe and PCI-X capabilities */
1765 pci_allocate_cap_save_buffers(dev);
1766
Zhao, Yu201de562008-10-13 19:49:55 +08001767 /* Power Management */
1768 pci_pm_init(dev);
1769
1770 /* Vital Product Data */
Bjorn Helgaasf1cd93f2016-02-22 13:58:37 -06001771 pci_vpd_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001772
1773 /* Alternative Routing-ID Forwarding */
Yijing Wang31ab2472013-01-15 11:12:17 +08001774 pci_configure_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001775
1776 /* Single Root I/O Virtualization */
1777 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001778
Bjorn Helgaasedc90fe2015-07-17 15:05:46 -05001779 /* Address Translation Services */
1780 pci_ats_init(dev);
1781
Allen Kayae21ee62009-10-07 10:27:17 -07001782 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001783 pci_enable_acs(dev);
Taku Izumib07461a2015-09-17 10:09:37 -05001784
Jonathan Yong9bb04a02016-06-11 14:13:38 -05001785 /* Precision Time Measurement */
1786 pci_ptm_init(dev);
Bjorn Helgaas4dc2db02016-10-03 09:42:57 -05001787
Keith Busch66b80802016-09-27 16:23:34 -04001788 /* Advanced Error Reporting */
1789 pci_aer_init(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001790}
1791
Marc Zyngier098259e2015-10-02 10:19:32 +01001792/*
1793 * This is the equivalent of pci_host_bridge_msi_domain that acts on
1794 * devices. Firmware interfaces that can select the MSI domain on a
1795 * per-device basis should be called from here.
1796 */
1797static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev)
1798{
1799 struct irq_domain *d;
1800
1801 /*
1802 * If a domain has been set through the pcibios_add_device
1803 * callback, then this is the one (platform code knows best).
1804 */
1805 d = dev_get_msi_domain(&dev->dev);
1806 if (d)
1807 return d;
1808
Marc Zyngier54fa97e2015-10-02 14:43:06 +01001809 /*
1810 * Let's see if we have a firmware interface able to provide
1811 * the domain.
1812 */
1813 d = pci_msi_get_device_domain(dev);
1814 if (d)
1815 return d;
1816
Marc Zyngier098259e2015-10-02 10:19:32 +01001817 return NULL;
1818}
1819
Marc Zyngier44aa0c62015-07-28 14:46:11 +01001820static void pci_set_msi_domain(struct pci_dev *dev)
1821{
Marc Zyngier098259e2015-10-02 10:19:32 +01001822 struct irq_domain *d;
1823
Marc Zyngier44aa0c62015-07-28 14:46:11 +01001824 /*
Marc Zyngier098259e2015-10-02 10:19:32 +01001825 * If the platform or firmware interfaces cannot supply a
1826 * device-specific MSI domain, then inherit the default domain
1827 * from the host bridge itself.
Marc Zyngier44aa0c62015-07-28 14:46:11 +01001828 */
Marc Zyngier098259e2015-10-02 10:19:32 +01001829 d = pci_dev_msi_domain(dev);
1830 if (!d)
1831 d = dev_get_msi_domain(&dev->bus->dev);
1832
1833 dev_set_msi_domain(&dev->dev, d);
Marc Zyngier44aa0c62015-07-28 14:46:11 +01001834}
1835
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07001836/**
1837 * pci_dma_configure - Setup DMA configuration
1838 * @dev: ptr to pci_dev struct of the PCI device
1839 *
1840 * Function to update PCI devices's DMA configuration using the same
Suthikulpanit, Suravee29dbe1f2015-10-28 15:50:54 -07001841 * info from the OF node or ACPI node of host bridge's parent (if any).
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07001842 */
1843static void pci_dma_configure(struct pci_dev *dev)
1844{
1845 struct device *bridge = pci_get_host_bridge_device(dev);
1846
Suravee Suthikulpanit768acd62015-11-18 16:49:52 -08001847 if (IS_ENABLED(CONFIG_OF) &&
1848 bridge->parent && bridge->parent->of_node) {
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07001849 of_dma_configure(&dev->dev, bridge->parent->of_node);
Suthikulpanit, Suravee29dbe1f2015-10-28 15:50:54 -07001850 } else if (has_acpi_companion(bridge)) {
1851 struct acpi_device *adev = to_acpi_device_node(bridge->fwnode);
1852 enum dev_dma_attr attr = acpi_get_dma_attr(adev);
1853
1854 if (attr == DEV_DMA_NOT_SUPPORTED)
1855 dev_warn(&dev->dev, "DMA not supported.\n");
1856 else
1857 arch_setup_dma_ops(&dev->dev, 0, 0, NULL,
1858 attr == DEV_DMA_COHERENT);
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07001859 }
1860
1861 pci_put_host_bridge_device(bridge);
1862}
1863
Sam Ravnborg96bde062007-03-26 21:53:30 -08001864void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001865{
Yinghai Lu4f535092013-01-21 13:20:52 -08001866 int ret;
1867
Bjorn Helgaas6cd33642014-08-27 14:29:47 -06001868 pci_configure_device(dev);
1869
Linus Torvalds1da177e2005-04-16 15:20:36 -07001870 device_initialize(&dev->dev);
1871 dev->dev.release = pci_release_dev;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001872
Yinghai Lu7629d192013-01-21 13:20:44 -08001873 set_dev_node(&dev->dev, pcibus_to_node(bus));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001874 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001875 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001876 dev->dev.coherent_dma_mask = 0xffffffffull;
Suthikulpanit, Suravee50230712015-10-28 15:50:53 -07001877 pci_dma_configure(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001878
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001879 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001880 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001881
Linus Torvalds1da177e2005-04-16 15:20:36 -07001882 /* Fix up broken headers */
1883 pci_fixup_device(pci_fixup_header, dev);
1884
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001885 /* moved out from quirk header fixup code */
1886 pci_reassigndev_resource_alignment(dev);
1887
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001888 /* Clear the state_saved flag. */
1889 dev->state_saved = false;
1890
Zhao, Yu201de562008-10-13 19:49:55 +08001891 /* Initialize various capabilities */
1892 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001893
Linus Torvalds1da177e2005-04-16 15:20:36 -07001894 /*
1895 * Add the device to our list of discovered devices
1896 * and the bus list for fixup functions, etc.
1897 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001898 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001899 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001900 up_write(&pci_bus_sem);
Yinghai Lu4f535092013-01-21 13:20:52 -08001901
Yinghai Lu4f535092013-01-21 13:20:52 -08001902 ret = pcibios_add_device(dev);
1903 WARN_ON(ret < 0);
1904
Marc Zyngier44aa0c62015-07-28 14:46:11 +01001905 /* Setup MSI irq domain */
1906 pci_set_msi_domain(dev);
1907
Yinghai Lu4f535092013-01-21 13:20:52 -08001908 /* Notifier could use PCI capabilities */
1909 dev->match_driver = false;
1910 ret = device_add(&dev->dev);
1911 WARN_ON(ret < 0);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001912}
1913
Bjorn Helgaas10874f5a2014-04-14 16:11:40 -06001914struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001915{
1916 struct pci_dev *dev;
1917
Trent Piepho90bdb312009-03-20 14:56:00 -06001918 dev = pci_get_slot(bus, devfn);
1919 if (dev) {
1920 pci_dev_put(dev);
1921 return dev;
1922 }
1923
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001924 dev = pci_scan_device(bus, devfn);
1925 if (!dev)
1926 return NULL;
1927
1928 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001929
1930 return dev;
1931}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001932EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001933
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001934static unsigned next_fn(struct pci_bus *bus, struct pci_dev *dev, unsigned fn)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001935{
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001936 int pos;
1937 u16 cap = 0;
1938 unsigned next_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001939
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001940 if (pci_ari_enabled(bus)) {
1941 if (!dev)
1942 return 0;
1943 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1944 if (!pos)
1945 return 0;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001946
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001947 pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
1948 next_fn = PCI_ARI_CAP_NFN(cap);
1949 if (next_fn <= fn)
1950 return 0; /* protect against malformed list */
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001951
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001952 return next_fn;
1953 }
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001954
Yijing Wangb1bd58e2013-01-25 09:12:31 -07001955 /* dev may be NULL for non-contiguous multifunction devices */
1956 if (!dev || dev->multifunction)
1957 return (fn + 1) % 8;
1958
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001959 return 0;
1960}
1961
1962static int only_one_child(struct pci_bus *bus)
1963{
1964 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001965
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001966 if (!parent || !pci_is_pcie(parent))
1967 return 0;
Yijing Wang62f87c02012-07-24 17:20:03 +08001968 if (pci_pcie_type(parent) == PCI_EXP_TYPE_ROOT_PORT)
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001969 return 1;
Bjorn Helgaas5bbe0292016-02-05 14:57:47 -06001970
1971 /*
1972 * PCIe downstream ports are bridges that normally lead to only a
1973 * device 0, but if PCI_SCAN_ALL_PCIE_DEVS is set, scan all
1974 * possible devices, not just device 0. See PCIe spec r3.0,
1975 * sec 7.3.1.
1976 */
Yijing Wang777e61e2015-05-21 15:05:04 +08001977 if (parent->has_secondary_link &&
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001978 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001979 return 1;
1980 return 0;
1981}
1982
Linus Torvalds1da177e2005-04-16 15:20:36 -07001983/**
1984 * pci_scan_slot - scan a PCI slot on a bus for devices.
1985 * @bus: PCI bus to scan
1986 * @devfn: slot number to scan (must have zero function.)
1987 *
1988 * Scan a PCI slot on the specified PCI bus for devices, adding
1989 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001990 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001991 *
1992 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001993 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001994int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001995{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001996 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001997 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001998
1999 if (only_one_child(bus) && (devfn > 0))
2000 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002001
Trent Piepho1b69dfc2009-03-20 14:56:05 -06002002 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07002003 if (!dev)
2004 return 0;
2005 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06002006 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002007
Yijing Wangb1bd58e2013-01-25 09:12:31 -07002008 for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) {
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05002009 dev = pci_scan_single_device(bus, devfn + fn);
2010 if (dev) {
2011 if (!dev->is_added)
2012 nr++;
2013 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002014 }
2015 }
Shaohua Li7d715a62008-02-25 09:46:41 +08002016
Shaohua Li149e1632008-07-23 10:32:31 +08002017 /* only one slot has pcie device */
2018 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08002019 pcie_aspm_init_link_state(bus->self);
2020
Linus Torvalds1da177e2005-04-16 15:20:36 -07002021 return nr;
2022}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -06002023EXPORT_SYMBOL(pci_scan_slot);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002024
Jon Masonb03e7492011-07-20 15:20:54 -05002025static int pcie_find_smpss(struct pci_dev *dev, void *data)
2026{
2027 u8 *smpss = data;
2028
2029 if (!pci_is_pcie(dev))
2030 return 0;
2031
Yijing Wangd4aa68f2013-08-22 11:24:47 +08002032 /*
2033 * We don't have a way to change MPS settings on devices that have
2034 * drivers attached. A hot-added device might support only the minimum
2035 * MPS setting (MPS=128). Therefore, if the fabric contains a bridge
2036 * where devices may be hot-added, we limit the fabric MPS to 128 so
2037 * hot-added devices will work correctly.
2038 *
2039 * However, if we hot-add a device to a slot directly below a Root
2040 * Port, it's impossible for there to be other existing devices below
2041 * the port. We don't limit the MPS in this case because we can
2042 * reconfigure MPS on both the Root Port and the hot-added device,
2043 * and there are no other devices involved.
2044 *
2045 * Note that this PCIE_BUS_SAFE path assumes no peer-to-peer DMA.
Jon Masonb03e7492011-07-20 15:20:54 -05002046 */
Yijing Wangd4aa68f2013-08-22 11:24:47 +08002047 if (dev->is_hotplug_bridge &&
2048 pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
Jon Masonb03e7492011-07-20 15:20:54 -05002049 *smpss = 0;
2050
2051 if (*smpss > dev->pcie_mpss)
2052 *smpss = dev->pcie_mpss;
2053
2054 return 0;
2055}
2056
2057static void pcie_write_mps(struct pci_dev *dev, int mps)
2058{
Jon Mason62f392e2011-10-14 14:56:14 -05002059 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05002060
2061 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05002062 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05002063
Yijing Wang62f87c02012-07-24 17:20:03 +08002064 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT &&
2065 dev->bus->self)
Jon Mason62f392e2011-10-14 14:56:14 -05002066 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05002067 * downstream communication will never be larger than
2068 * the MRRS. So, the MPS only needs to be configured
2069 * for the upstream communication. This being the case,
2070 * walk from the top down and set the MPS of the child
2071 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05002072 *
2073 * Configure the device MPS with the smaller of the
2074 * device MPSS or the bridge MPS (which is assumed to be
2075 * properly configured at this point to the largest
2076 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05002077 */
Jon Mason62f392e2011-10-14 14:56:14 -05002078 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05002079 }
2080
2081 rc = pcie_set_mps(dev, mps);
2082 if (rc)
2083 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
2084}
2085
Jon Mason62f392e2011-10-14 14:56:14 -05002086static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05002087{
Jon Mason62f392e2011-10-14 14:56:14 -05002088 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05002089
Jon Masoned2888e2011-09-08 16:41:18 -05002090 /* In the "safe" case, do not configure the MRRS. There appear to be
2091 * issues with setting MRRS to 0 on a number of devices.
2092 */
Jon Masoned2888e2011-09-08 16:41:18 -05002093 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
2094 return;
Jon Masonb03e7492011-07-20 15:20:54 -05002095
Jon Masoned2888e2011-09-08 16:41:18 -05002096 /* For Max performance, the MRRS must be set to the largest supported
2097 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05002098 * device or the bus can support. This should already be properly
2099 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05002100 */
Jon Mason62f392e2011-10-14 14:56:14 -05002101 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05002102
2103 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05002104 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05002105 * If the MRRS value provided is not acceptable (e.g., too large),
2106 * shrink the value until it is acceptable to the HW.
Bjorn Helgaasf7625982013-11-14 11:28:18 -07002107 */
Jon Masonb03e7492011-07-20 15:20:54 -05002108 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
2109 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05002110 if (!rc)
2111 break;
Jon Masonb03e7492011-07-20 15:20:54 -05002112
Jon Mason62f392e2011-10-14 14:56:14 -05002113 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05002114 mrrs /= 2;
2115 }
Jon Mason62f392e2011-10-14 14:56:14 -05002116
2117 if (mrrs < 128)
Ryan Desfosses227f0642014-04-18 20:13:50 -04002118 dev_err(&dev->dev, "MRRS was unable to be configured with a safe value. If problems are experienced, try running with pci=pcie_bus_safe\n");
Jon Masonb03e7492011-07-20 15:20:54 -05002119}
2120
2121static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
2122{
Jon Masona513a99a72011-10-14 14:56:16 -05002123 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05002124
2125 if (!pci_is_pcie(dev))
2126 return 0;
2127
Keith Busch27d868b2015-08-24 08:48:16 -05002128 if (pcie_bus_config == PCIE_BUS_TUNE_OFF ||
2129 pcie_bus_config == PCIE_BUS_DEFAULT)
Yijing Wang5895af72013-08-26 16:33:06 +08002130 return 0;
Yijing Wang5895af72013-08-26 16:33:06 +08002131
Jon Masona513a99a72011-10-14 14:56:16 -05002132 mps = 128 << *(u8 *)data;
2133 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05002134
2135 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05002136 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05002137
Ryan Desfosses227f0642014-04-18 20:13:50 -04002138 dev_info(&dev->dev, "Max Payload Size set to %4d/%4d (was %4d), Max Read Rq %4d\n",
2139 pcie_get_mps(dev), 128 << dev->pcie_mpss,
Jon Masona513a99a72011-10-14 14:56:16 -05002140 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05002141
2142 return 0;
2143}
2144
Jon Masona513a99a72011-10-14 14:56:16 -05002145/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05002146 * parents then children fashion. If this changes, then this code will not
2147 * work as designed.
2148 */
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08002149void pcie_bus_configure_settings(struct pci_bus *bus)
Jon Masonb03e7492011-07-20 15:20:54 -05002150{
Bjorn Helgaas1e358f92014-04-29 12:51:55 -06002151 u8 smpss = 0;
Jon Masonb03e7492011-07-20 15:20:54 -05002152
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08002153 if (!bus->self)
2154 return;
2155
Jon Masonb03e7492011-07-20 15:20:54 -05002156 if (!pci_is_pcie(bus->self))
2157 return;
2158
Jon Mason5f39e672011-10-03 09:50:20 -05002159 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
Jon Mason33154722013-08-26 16:33:05 +08002160 * to be aware of the MPS of the destination. To work around this,
Jon Mason5f39e672011-10-03 09:50:20 -05002161 * simply force the MPS of the entire system to the smallest possible.
2162 */
2163 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
2164 smpss = 0;
2165
Jon Masonb03e7492011-07-20 15:20:54 -05002166 if (pcie_bus_config == PCIE_BUS_SAFE) {
Bjorn Helgaasa58674f2013-08-22 11:24:44 +08002167 smpss = bus->self->pcie_mpss;
Jon Mason5f39e672011-10-03 09:50:20 -05002168
Jon Masonb03e7492011-07-20 15:20:54 -05002169 pcie_find_smpss(bus->self, &smpss);
2170 pci_walk_bus(bus, pcie_find_smpss, &smpss);
2171 }
2172
2173 pcie_bus_configure_set(bus->self, &smpss);
2174 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
2175}
Jon Masondebc3b72011-08-02 00:01:18 -05002176EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05002177
Bill Pemberton15856ad2012-11-21 15:35:00 -05002178unsigned int pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002179{
Yinghai Lub918c622012-05-17 18:51:11 -07002180 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002181 struct pci_dev *dev;
2182
Bjorn Helgaas0207c352009-11-04 10:32:52 -07002183 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07002184
2185 /* Go find them, Rover! */
2186 for (devfn = 0; devfn < 0x100; devfn += 8)
2187 pci_scan_slot(bus, devfn);
2188
Yu Zhaoa28724b2009-03-20 11:25:13 +08002189 /* Reserve buses for SR-IOV capability. */
2190 max += pci_iov_bus_range(bus);
2191
Linus Torvalds1da177e2005-04-16 15:20:36 -07002192 /*
2193 * After performing arch-dependent fixup of the bus, look behind
2194 * all PCI-to-PCI bridges on this bus.
2195 */
Alex Chiang74710de2009-03-20 14:56:10 -06002196 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07002197 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06002198 pcibios_fixup_bus(bus);
Jiang Liu981cf9e2013-04-12 05:44:16 +00002199 bus->is_added = 1;
Alex Chiang74710de2009-03-20 14:56:10 -06002200 }
2201
Ryan Desfosses3c78bc62014-04-18 20:13:49 -04002202 for (pass = 0; pass < 2; pass++)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002203 list_for_each_entry(dev, &bus->devices, bus_list) {
Yijing Wang6788a512014-05-04 12:23:38 +08002204 if (pci_is_bridge(dev))
Linus Torvalds1da177e2005-04-16 15:20:36 -07002205 max = pci_scan_bridge(bus, dev, max, pass);
2206 }
2207
2208 /*
Keith Busche16b4662016-07-21 21:40:28 -06002209 * Make sure a hotplug bridge has at least the minimum requested
2210 * number of buses.
2211 */
2212 if (bus->self && bus->self->is_hotplug_bridge && pci_hotplug_bus_size) {
2213 if (max - bus->busn_res.start < pci_hotplug_bus_size - 1)
2214 max = bus->busn_res.start + pci_hotplug_bus_size - 1;
2215 }
2216
2217 /*
Linus Torvalds1da177e2005-04-16 15:20:36 -07002218 * We've scanned the bus and so we know all about what's on
2219 * the other side of any bridges that may be on this bus plus
2220 * any devices.
2221 *
2222 * Return how far we've got finding sub-buses.
2223 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07002224 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002225 return max;
2226}
Ryan Desfossesb7fe9432014-04-25 14:32:25 -06002227EXPORT_SYMBOL_GPL(pci_scan_child_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002228
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01002229/**
2230 * pcibios_root_bridge_prepare - Platform-specific host bridge setup.
2231 * @bridge: Host bridge to set up.
2232 *
2233 * Default empty implementation. Replace with an architecture-specific setup
2234 * routine, if necessary.
2235 */
2236int __weak pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
2237{
2238 return 0;
2239}
2240
Jiang Liu10a95742013-04-12 05:44:20 +00002241void __weak pcibios_add_bus(struct pci_bus *bus)
2242{
2243}
2244
2245void __weak pcibios_remove_bus(struct pci_bus *bus)
2246{
2247}
2248
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002249static struct pci_bus *pci_create_root_bus_msi(struct device *parent,
2250 int bus, struct pci_ops *ops, void *sysdata,
2251 struct list_head *resources, struct msi_controller *msi)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002252{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07002253 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07002254 struct pci_host_bridge *bridge;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002255
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002256 bridge = pci_alloc_host_bridge();
Yinghai Lu7b543662012-04-02 18:31:53 -07002257 if (!bridge)
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002258 return NULL;
Yinghai Lu7b543662012-04-02 18:31:53 -07002259
2260 bridge->dev.parent = parent;
Jiang Liu70efde22013-06-07 16:16:51 -06002261 bridge->dev.release = pci_release_host_bridge_dev;
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002262
2263 list_splice_init(resources, &bridge->windows);
2264 bridge->sysdata = sysdata;
2265 bridge->busnr = bus;
2266 bridge->ops = ops;
2267 bridge->msi = msi;
2268
2269 error = pci_register_host_bridge(bridge);
2270 if (error < 0)
Jiang Liu343df772013-06-07 01:10:08 +08002271 goto err_out;
Rafael J. Wysocki6c0cc952013-01-09 22:33:37 +01002272
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002273 return bridge->bus;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002274
Yinghai Lu7b543662012-04-02 18:31:53 -07002275err_out:
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002276 kfree(bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002277 return NULL;
2278}
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002279
2280struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
2281 struct pci_ops *ops, void *sysdata, struct list_head *resources)
2282{
2283 return pci_create_root_bus_msi(parent, bus, ops, sysdata, resources,
2284 NULL);
2285}
Ray Juie6b29de2015-04-08 11:21:33 -07002286EXPORT_SYMBOL_GPL(pci_create_root_bus);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10002287
Yinghai Lu98a35832012-05-18 11:35:50 -06002288int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
2289{
2290 struct resource *res = &b->busn_res;
2291 struct resource *parent_res, *conflict;
2292
2293 res->start = bus;
2294 res->end = bus_max;
2295 res->flags = IORESOURCE_BUS;
2296
2297 if (!pci_is_root_bus(b))
2298 parent_res = &b->parent->busn_res;
2299 else {
2300 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
2301 res->flags |= IORESOURCE_PCI_FIXED;
2302 }
2303
Andreas Noeverced04d12014-01-23 21:59:24 +01002304 conflict = request_resource_conflict(parent_res, res);
Yinghai Lu98a35832012-05-18 11:35:50 -06002305
2306 if (conflict)
2307 dev_printk(KERN_DEBUG, &b->dev,
2308 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
2309 res, pci_is_root_bus(b) ? "domain " : "",
2310 parent_res, conflict->name, conflict);
Yinghai Lu98a35832012-05-18 11:35:50 -06002311
2312 return conflict == NULL;
2313}
2314
2315int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
2316{
2317 struct resource *res = &b->busn_res;
2318 struct resource old_res = *res;
2319 resource_size_t size;
2320 int ret;
2321
2322 if (res->start > bus_max)
2323 return -EINVAL;
2324
2325 size = bus_max - res->start + 1;
2326 ret = adjust_resource(res, res->start, size);
2327 dev_printk(KERN_DEBUG, &b->dev,
2328 "busn_res: %pR end %s updated to %02x\n",
2329 &old_res, ret ? "can not be" : "is", bus_max);
2330
2331 if (!ret && !res->parent)
2332 pci_bus_insert_busn_res(b, res->start, res->end);
2333
2334 return ret;
2335}
2336
2337void pci_bus_release_busn_res(struct pci_bus *b)
2338{
2339 struct resource *res = &b->busn_res;
2340 int ret;
2341
2342 if (!res->flags || !res->parent)
2343 return;
2344
2345 ret = release_resource(res);
2346 dev_printk(KERN_DEBUG, &b->dev,
2347 "busn_res: %pR %s released\n",
2348 res, ret ? "can not be" : "is");
2349}
2350
Lorenzo Pieralisid2a79262015-08-03 21:27:10 -05002351struct pci_bus *pci_scan_root_bus_msi(struct device *parent, int bus,
2352 struct pci_ops *ops, void *sysdata,
2353 struct list_head *resources, struct msi_controller *msi)
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002354{
Jiang Liu14d76b62015-02-05 13:44:44 +08002355 struct resource_entry *window;
Yinghai Lu4d99f522012-05-17 18:51:12 -07002356 bool found = false;
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002357 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07002358 int max;
2359
Jiang Liu14d76b62015-02-05 13:44:44 +08002360 resource_list_for_each_entry(window, resources)
Yinghai Lu4d99f522012-05-17 18:51:12 -07002361 if (window->res->flags & IORESOURCE_BUS) {
2362 found = true;
2363 break;
2364 }
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002365
Arnd Bergmann37d6a0a2016-11-25 11:57:09 +01002366 b = pci_create_root_bus_msi(parent, bus, ops, sysdata, resources, msi);
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002367 if (!b)
2368 return NULL;
2369
Yinghai Lu4d99f522012-05-17 18:51:12 -07002370 if (!found) {
2371 dev_info(&b->dev,
2372 "No busn resource found for root bus, will use [bus %02x-ff]\n",
2373 bus);
2374 pci_bus_insert_busn_res(b, bus, 255);
2375 }
2376
2377 max = pci_scan_child_bus(b);
2378
2379 if (!found)
2380 pci_bus_update_busn_res_end(b, max);
2381
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002382 return b;
2383}
Lorenzo Pieralisid2a79262015-08-03 21:27:10 -05002384
2385struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
2386 struct pci_ops *ops, void *sysdata, struct list_head *resources)
2387{
2388 return pci_scan_root_bus_msi(parent, bus, ops, sysdata, resources,
2389 NULL);
2390}
Bjorn Helgaasa2ebb8272011-10-28 16:25:50 -06002391EXPORT_SYMBOL(pci_scan_root_bus);
2392
Bill Pemberton15856ad2012-11-21 15:35:00 -05002393struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops,
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06002394 void *sysdata)
2395{
2396 LIST_HEAD(resources);
2397 struct pci_bus *b;
2398
2399 pci_add_resource(&resources, &ioport_resource);
2400 pci_add_resource(&resources, &iomem_resource);
Yinghai Lu857c3b62012-05-17 18:51:12 -07002401 pci_add_resource(&resources, &busn_resource);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06002402 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
2403 if (b) {
Yinghai Lu857c3b62012-05-17 18:51:12 -07002404 pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06002405 } else {
2406 pci_free_resource_list(&resources);
2407 }
2408 return b;
2409}
2410EXPORT_SYMBOL(pci_scan_bus);
2411
Alex Chiang3ed4fd92009-03-20 14:56:25 -06002412/**
Yinghai Lu2f320522012-01-21 02:08:22 -08002413 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
2414 * @bridge: PCI bridge for the bus to scan
2415 *
2416 * Scan a PCI bus and child buses for new devices, add them,
2417 * and enable them, resizing bridge mmio/io resource if necessary
2418 * and possible. The caller must ensure the child devices are already
2419 * removed for resizing to occur.
2420 *
2421 * Returns the max number of subordinate bus discovered.
2422 */
Bjorn Helgaas10874f5a2014-04-14 16:11:40 -06002423unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
Yinghai Lu2f320522012-01-21 02:08:22 -08002424{
2425 unsigned int max;
2426 struct pci_bus *bus = bridge->subordinate;
2427
2428 max = pci_scan_child_bus(bus);
2429
2430 pci_assign_unassigned_bridge_resources(bridge);
2431
2432 pci_bus_add_devices(bus);
2433
2434 return max;
2435}
2436
Yinghai Lua5213a32012-10-30 14:31:21 -06002437/**
2438 * pci_rescan_bus - scan a PCI bus for devices.
2439 * @bus: PCI bus to scan
2440 *
2441 * Scan a PCI bus and child buses for new devices, adds them,
2442 * and enables them.
2443 *
2444 * Returns the max number of subordinate bus discovered.
2445 */
Bjorn Helgaas10874f5a2014-04-14 16:11:40 -06002446unsigned int pci_rescan_bus(struct pci_bus *bus)
Yinghai Lua5213a32012-10-30 14:31:21 -06002447{
2448 unsigned int max;
2449
2450 max = pci_scan_child_bus(bus);
2451 pci_assign_unassigned_bus_resources(bus);
2452 pci_bus_add_devices(bus);
2453
2454 return max;
2455}
2456EXPORT_SYMBOL_GPL(pci_rescan_bus);
2457
Rafael J. Wysocki9d169472014-01-10 15:22:18 +01002458/*
2459 * pci_rescan_bus(), pci_rescan_bus_bridge_resize() and PCI device removal
2460 * routines should always be executed under this mutex.
2461 */
2462static DEFINE_MUTEX(pci_rescan_remove_lock);
2463
2464void pci_lock_rescan_remove(void)
2465{
2466 mutex_lock(&pci_rescan_remove_lock);
2467}
2468EXPORT_SYMBOL_GPL(pci_lock_rescan_remove);
2469
2470void pci_unlock_rescan_remove(void)
2471{
2472 mutex_unlock(&pci_rescan_remove_lock);
2473}
2474EXPORT_SYMBOL_GPL(pci_unlock_rescan_remove);
2475
Ryan Desfosses3c78bc62014-04-18 20:13:49 -04002476static int __init pci_sort_bf_cmp(const struct device *d_a,
2477 const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002478{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002479 const struct pci_dev *a = to_pci_dev(d_a);
2480 const struct pci_dev *b = to_pci_dev(d_b);
2481
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002482 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
2483 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
2484
2485 if (a->bus->number < b->bus->number) return -1;
2486 else if (a->bus->number > b->bus->number) return 1;
2487
2488 if (a->devfn < b->devfn) return -1;
2489 else if (a->devfn > b->devfn) return 1;
2490
2491 return 0;
2492}
2493
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08002494void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002495{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05002496 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05002497}