blob: c28c7b91910e59e43faf2310ca61adafe8c771cd [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * probe.c - PCI detection and setup code
3 */
4
5#include <linux/kernel.h>
6#include <linux/delay.h>
7#include <linux/init.h>
8#include <linux/pci.h>
9#include <linux/slab.h>
10#include <linux/module.h>
11#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080012#include <linux/pci-aspm.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090013#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070014
15#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
16#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070017
18/* Ugh. Need to stop exporting this to modules. */
19LIST_HEAD(pci_root_buses);
20EXPORT_SYMBOL(pci_root_buses);
21
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080022
23static int find_anything(struct device *dev, void *data)
24{
25 return 1;
26}
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070028/*
29 * Some device drivers need know if pci is initiated.
30 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080031 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070032 */
33int no_pci_devices(void)
34{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080035 struct device *dev;
36 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070037
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080038 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
39 no_devices = (dev == NULL);
40 put_device(dev);
41 return no_devices;
42}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070043EXPORT_SYMBOL(no_pci_devices);
44
Linus Torvalds1da177e2005-04-16 15:20:36 -070045/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070046 * PCI Bus Class
47 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040048static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -070049{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040050 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -070051
52 if (pci_bus->bridge)
53 put_device(pci_bus->bridge);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -070054 pci_bus_remove_resources(pci_bus);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +100055 pci_release_bus_of_node(pci_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -070056 kfree(pci_bus);
57}
58
59static struct class pcibus_class = {
60 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040061 .dev_release = &release_pcibus_dev,
Yinghai Lub9d320f2011-05-12 17:11:39 -070062 .dev_attrs = pcibus_dev_attrs,
Linus Torvalds1da177e2005-04-16 15:20:36 -070063};
64
65static int __init pcibus_class_init(void)
66{
67 return class_register(&pcibus_class);
68}
69postcore_initcall(pcibus_class_init);
70
71/*
72 * Translate the low bits of the PCI base
73 * to the resource type
74 */
75static inline unsigned int pci_calc_resource_flags(unsigned int flags)
76{
77 if (flags & PCI_BASE_ADDRESS_SPACE_IO)
78 return IORESOURCE_IO;
79
80 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
81 return IORESOURCE_MEM | IORESOURCE_PREFETCH;
82
83 return IORESOURCE_MEM;
84}
85
Matthew Wilcox6ac665c2008-07-28 13:38:59 -040086static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -080087{
88 u64 size = mask & maxbase; /* Find the significant bits */
89 if (!size)
90 return 0;
91
92 /* Get the lowest of them to find the decode size, and
93 from that the extent. */
94 size = (size & ~(size-1)) - 1;
95
96 /* base == maxbase can be valid only if the BAR has
97 already been programmed with all 1s. */
98 if (base == maxbase && ((base | size) & mask) != mask)
99 return 0;
100
101 return size;
102}
103
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400104static inline enum pci_bar_type decode_bar(struct resource *res, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800105{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400106 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
107 res->flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
108 return pci_bar_io;
109 }
110
111 res->flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
112
Peter Chubbe3545972008-10-13 11:49:04 +1100113 if (res->flags & PCI_BASE_ADDRESS_MEM_TYPE_64)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400114 return pci_bar_mem64;
115 return pci_bar_mem32;
116}
117
Yu Zhao0b400c72008-11-22 02:40:40 +0800118/**
119 * pci_read_base - read a PCI BAR
120 * @dev: the PCI device
121 * @type: type of the BAR
122 * @res: resource buffer to be filled in
123 * @pos: BAR position in the config space
124 *
125 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400126 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800127int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400128 struct resource *res, unsigned int pos)
129{
130 u32 l, sz, mask;
Jacob Pan253d2e52010-07-16 10:19:22 -0700131 u16 orig_cmd;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400132
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200133 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400134
Jacob Pan253d2e52010-07-16 10:19:22 -0700135 if (!dev->mmio_always_on) {
136 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
137 pci_write_config_word(dev, PCI_COMMAND,
138 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
139 }
140
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400141 res->name = pci_name(dev);
142
143 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200144 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400145 pci_read_config_dword(dev, pos, &sz);
146 pci_write_config_dword(dev, pos, l);
147
Jacob Pan253d2e52010-07-16 10:19:22 -0700148 if (!dev->mmio_always_on)
149 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
150
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400151 /*
152 * All bits set in sz means the device isn't working properly.
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600153 * If the BAR isn't implemented, all bits must be 0. If it's a
154 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
155 * 1 must be clear.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400156 */
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600157 if (!sz || sz == 0xffffffff)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400158 goto fail;
159
160 /*
161 * I don't know how l can have all bits set. Copied from old code.
162 * Maybe it fixes a bug on some ancient platform.
163 */
164 if (l == 0xffffffff)
165 l = 0;
166
167 if (type == pci_bar_unknown) {
168 type = decode_bar(res, l);
169 res->flags |= pci_calc_resource_flags(l) | IORESOURCE_SIZEALIGN;
170 if (type == pci_bar_io) {
171 l &= PCI_BASE_ADDRESS_IO_MASK;
Yinghai Lu1f82de12009-04-23 20:48:32 -0700172 mask = PCI_BASE_ADDRESS_IO_MASK & IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400173 } else {
174 l &= PCI_BASE_ADDRESS_MEM_MASK;
175 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
176 }
177 } else {
178 res->flags |= (l & IORESOURCE_ROM_ENABLE);
179 l &= PCI_ROM_ADDRESS_MASK;
180 mask = (u32)PCI_ROM_ADDRESS_MASK;
181 }
182
183 if (type == pci_bar_mem64) {
184 u64 l64 = l;
185 u64 sz64 = sz;
186 u64 mask64 = mask | (u64)~0 << 32;
187
188 pci_read_config_dword(dev, pos + 4, &l);
189 pci_write_config_dword(dev, pos + 4, ~0);
190 pci_read_config_dword(dev, pos + 4, &sz);
191 pci_write_config_dword(dev, pos + 4, l);
192
193 l64 |= ((u64)l << 32);
194 sz64 |= ((u64)sz << 32);
195
196 sz64 = pci_size(l64, sz64, mask64);
197
198 if (!sz64)
199 goto fail;
200
Matthew Wilcoxcc5499c2008-07-28 13:39:00 -0400201 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700202 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",
203 pos);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400204 goto fail;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600205 }
206
207 res->flags |= IORESOURCE_MEM_64;
208 if ((sizeof(resource_size_t) < 8) && l) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400209 /* Address above 32-bit boundary; disable the BAR */
210 pci_write_config_dword(dev, pos, 0);
211 pci_write_config_dword(dev, pos + 4, 0);
212 res->start = 0;
213 res->end = sz64;
214 } else {
215 res->start = l64;
216 res->end = l64 + sz64;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600217 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
Bjorn Helgaasa369c792009-10-06 15:33:44 -0600218 pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400219 }
220 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600221 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400222
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600223 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400224 goto fail;
225
226 res->start = l;
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600227 res->end = l + sz;
Vincent Legollf393d9b2008-10-12 12:26:12 +0200228
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600229 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400230 }
231
232 out:
233 return (type == pci_bar_mem64) ? 1 : 0;
234 fail:
235 res->flags = 0;
236 goto out;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800237}
238
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
240{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400241 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700242
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400243 for (pos = 0; pos < howmany; pos++) {
244 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700245 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400246 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700247 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400248
Linus Torvalds1da177e2005-04-16 15:20:36 -0700249 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400250 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700251 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400252 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
253 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
254 IORESOURCE_SIZEALIGN;
255 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700256 }
257}
258
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700259static void __devinit pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700260{
261 struct pci_dev *dev = child->self;
262 u8 io_base_lo, io_limit_lo;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700263 unsigned long base, limit;
264 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700265
Linus Torvalds1da177e2005-04-16 15:20:36 -0700266 res = child->resource[0];
267 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
268 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
269 base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
270 limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
271
272 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
273 u16 io_base_hi, io_limit_hi;
274 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
275 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
276 base |= (io_base_hi << 16);
277 limit |= (io_limit_hi << 16);
278 }
279
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800280 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700281 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Daniel Yeisley9d265122005-12-05 07:06:43 -0500282 if (!res->start)
283 res->start = base;
284 if (!res->end)
285 res->end = limit + 0xfff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600286 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800287 } else {
288 dev_printk(KERN_DEBUG, &dev->dev,
Bjorn Helgaas7b8ff6d2010-03-16 15:53:03 -0600289 " bridge window [io %#06lx-%#06lx] (disabled)\n",
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800290 base, limit);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700291 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700292}
293
294static void __devinit pci_read_bridge_mmio(struct pci_bus *child)
295{
296 struct pci_dev *dev = child->self;
297 u16 mem_base_lo, mem_limit_lo;
298 unsigned long base, limit;
299 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700300
301 res = child->resource[1];
302 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
303 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
304 base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
305 limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800306 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700307 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
308 res->start = base;
309 res->end = limit + 0xfffff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600310 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800311 } else {
312 dev_printk(KERN_DEBUG, &dev->dev,
Bjorn Helgaas7b8ff6d2010-03-16 15:53:03 -0600313 " bridge window [mem %#010lx-%#010lx] (disabled)\n",
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800314 base, limit + 0xfffff);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700315 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700316}
317
318static void __devinit pci_read_bridge_mmio_pref(struct pci_bus *child)
319{
320 struct pci_dev *dev = child->self;
321 u16 mem_base_lo, mem_limit_lo;
322 unsigned long base, limit;
323 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700324
325 res = child->resource[2];
326 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
327 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
328 base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
329 limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
330
331 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
332 u32 mem_base_hi, mem_limit_hi;
333 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
334 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
335
336 /*
337 * Some bridges set the base > limit by default, and some
338 * (broken) BIOSes do not initialize them. If we find
339 * this, just assume they are not being used.
340 */
341 if (mem_base_hi <= mem_limit_hi) {
342#if BITS_PER_LONG == 64
343 base |= ((long) mem_base_hi) << 32;
344 limit |= ((long) mem_limit_hi) << 32;
345#else
346 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600347 dev_err(&dev->dev, "can't handle 64-bit "
348 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700349 return;
350 }
351#endif
352 }
353 }
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800354 if (base && base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700355 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
356 IORESOURCE_MEM | IORESOURCE_PREFETCH;
357 if (res->flags & PCI_PREF_RANGE_TYPE_64)
358 res->flags |= IORESOURCE_MEM_64;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700359 res->start = base;
360 res->end = limit + 0xfffff;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600361 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800362 } else {
363 dev_printk(KERN_DEBUG, &dev->dev,
Bjorn Helgaas7b8ff6d2010-03-16 15:53:03 -0600364 " bridge window [mem %#010lx-%#010lx pref] (disabled)\n",
Yinghai Lucd81e1ea2010-01-22 01:02:22 -0800365 base, limit + 0xfffff);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700366 }
367}
368
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700369void __devinit pci_read_bridge_bases(struct pci_bus *child)
370{
371 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700372 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700373 int i;
374
375 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
376 return;
377
378 dev_info(&dev->dev, "PCI bridge to [bus %02x-%02x]%s\n",
379 child->secondary, child->subordinate,
380 dev->transparent ? " (subtractive decode)" : "");
381
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700382 pci_bus_remove_resources(child);
383 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
384 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
385
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700386 pci_read_bridge_io(child);
387 pci_read_bridge_mmio(child);
388 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700389
390 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700391 pci_bus_for_each_resource(child->parent, res, i) {
392 if (res) {
393 pci_bus_add_resource(child, res,
394 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700395 dev_printk(KERN_DEBUG, &dev->dev,
396 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700397 res);
398 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700399 }
400 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700401}
402
Sam Ravnborg96bde062007-03-26 21:53:30 -0800403static struct pci_bus * pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700404{
405 struct pci_bus *b;
406
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100407 b = kzalloc(sizeof(*b), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700408 if (b) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700409 INIT_LIST_HEAD(&b->node);
410 INIT_LIST_HEAD(&b->children);
411 INIT_LIST_HEAD(&b->devices);
Alex Chiangf46753c2008-06-10 15:28:50 -0600412 INIT_LIST_HEAD(&b->slots);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700413 INIT_LIST_HEAD(&b->resources);
Matthew Wilcox3749c512009-12-13 08:11:32 -0500414 b->max_bus_speed = PCI_SPEED_UNKNOWN;
415 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700416 }
417 return b;
418}
419
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500420static unsigned char pcix_bus_speed[] = {
421 PCI_SPEED_UNKNOWN, /* 0 */
422 PCI_SPEED_66MHz_PCIX, /* 1 */
423 PCI_SPEED_100MHz_PCIX, /* 2 */
424 PCI_SPEED_133MHz_PCIX, /* 3 */
425 PCI_SPEED_UNKNOWN, /* 4 */
426 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
427 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
428 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
429 PCI_SPEED_UNKNOWN, /* 8 */
430 PCI_SPEED_66MHz_PCIX_266, /* 9 */
431 PCI_SPEED_100MHz_PCIX_266, /* A */
432 PCI_SPEED_133MHz_PCIX_266, /* B */
433 PCI_SPEED_UNKNOWN, /* C */
434 PCI_SPEED_66MHz_PCIX_533, /* D */
435 PCI_SPEED_100MHz_PCIX_533, /* E */
436 PCI_SPEED_133MHz_PCIX_533 /* F */
437};
438
Matthew Wilcox3749c512009-12-13 08:11:32 -0500439static unsigned char pcie_link_speed[] = {
440 PCI_SPEED_UNKNOWN, /* 0 */
441 PCIE_SPEED_2_5GT, /* 1 */
442 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500443 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500444 PCI_SPEED_UNKNOWN, /* 4 */
445 PCI_SPEED_UNKNOWN, /* 5 */
446 PCI_SPEED_UNKNOWN, /* 6 */
447 PCI_SPEED_UNKNOWN, /* 7 */
448 PCI_SPEED_UNKNOWN, /* 8 */
449 PCI_SPEED_UNKNOWN, /* 9 */
450 PCI_SPEED_UNKNOWN, /* A */
451 PCI_SPEED_UNKNOWN, /* B */
452 PCI_SPEED_UNKNOWN, /* C */
453 PCI_SPEED_UNKNOWN, /* D */
454 PCI_SPEED_UNKNOWN, /* E */
455 PCI_SPEED_UNKNOWN /* F */
456};
457
458void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
459{
460 bus->cur_bus_speed = pcie_link_speed[linksta & 0xf];
461}
462EXPORT_SYMBOL_GPL(pcie_update_link_speed);
463
Matthew Wilcox45b4cdd2009-12-13 08:11:34 -0500464static unsigned char agp_speeds[] = {
465 AGP_UNKNOWN,
466 AGP_1X,
467 AGP_2X,
468 AGP_4X,
469 AGP_8X
470};
471
472static enum pci_bus_speed agp_speed(int agp3, int agpstat)
473{
474 int index = 0;
475
476 if (agpstat & 4)
477 index = 3;
478 else if (agpstat & 2)
479 index = 2;
480 else if (agpstat & 1)
481 index = 1;
482 else
483 goto out;
484
485 if (agp3) {
486 index += 2;
487 if (index == 5)
488 index = 0;
489 }
490
491 out:
492 return agp_speeds[index];
493}
494
495
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500496static void pci_set_bus_speed(struct pci_bus *bus)
497{
498 struct pci_dev *bridge = bus->self;
499 int pos;
500
Matthew Wilcox45b4cdd2009-12-13 08:11:34 -0500501 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
502 if (!pos)
503 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
504 if (pos) {
505 u32 agpstat, agpcmd;
506
507 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
508 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
509
510 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
511 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
512 }
513
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500514 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
515 if (pos) {
516 u16 status;
517 enum pci_bus_speed max;
518 pci_read_config_word(bridge, pos + 2, &status);
519
520 if (status & 0x8000) {
521 max = PCI_SPEED_133MHz_PCIX_533;
522 } else if (status & 0x4000) {
523 max = PCI_SPEED_133MHz_PCIX_266;
524 } else if (status & 0x0002) {
525 if (((status >> 12) & 0x3) == 2) {
526 max = PCI_SPEED_133MHz_PCIX_ECC;
527 } else {
528 max = PCI_SPEED_133MHz_PCIX;
529 }
530 } else {
531 max = PCI_SPEED_66MHz_PCIX;
532 }
533
534 bus->max_bus_speed = max;
535 bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf];
536
537 return;
538 }
539
540 pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
541 if (pos) {
542 u32 linkcap;
543 u16 linksta;
544
545 pci_read_config_dword(bridge, pos + PCI_EXP_LNKCAP, &linkcap);
546 bus->max_bus_speed = pcie_link_speed[linkcap & 0xf];
547
548 pci_read_config_word(bridge, pos + PCI_EXP_LNKSTA, &linksta);
549 pcie_update_link_speed(bus, linksta);
550 }
551}
552
553
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700554static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
555 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700556{
557 struct pci_bus *child;
558 int i;
559
560 /*
561 * Allocate a new bus, and inherit stuff from the parent..
562 */
563 child = pci_alloc_bus();
564 if (!child)
565 return NULL;
566
Linus Torvalds1da177e2005-04-16 15:20:36 -0700567 child->parent = parent;
568 child->ops = parent->ops;
569 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200570 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700571
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400572 /* initialize some portions of the bus device, but don't register it
573 * now as the parent is not properly set up yet. This device will get
574 * registered later in pci_bus_add_devices()
575 */
576 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100577 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700578
579 /*
580 * Set up the primary, secondary and subordinate
581 * bus numbers.
582 */
583 child->number = child->secondary = busnr;
584 child->primary = parent->secondary;
585 child->subordinate = 0xff;
586
Yu Zhao3789fa82008-11-22 02:41:07 +0800587 if (!bridge)
588 return child;
589
590 child->self = bridge;
591 child->bridge = get_device(&bridge->dev);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +1000592 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500593 pci_set_bus_speed(child);
594
Linus Torvalds1da177e2005-04-16 15:20:36 -0700595 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800596 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700597 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
598 child->resource[i]->name = child->name;
599 }
600 bridge->subordinate = child;
601
602 return child;
603}
604
Sam Ravnborg451124a2008-02-02 22:33:43 +0100605struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700606{
607 struct pci_bus *child;
608
609 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700610 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800611 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700612 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800613 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700614 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700615 return child;
616}
617
Sam Ravnborg96bde062007-03-26 21:53:30 -0800618static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700619{
620 struct pci_bus *parent = child->parent;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700621
622 /* Attempts to fix that up are really dangerous unless
623 we're going to re-assign all bus numbers. */
624 if (!pcibios_assign_all_busses())
625 return;
626
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700627 while (parent->parent && parent->subordinate < max) {
628 parent->subordinate = max;
629 pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
630 parent = parent->parent;
631 }
632}
633
Linus Torvalds1da177e2005-04-16 15:20:36 -0700634/*
635 * If it's a bridge, configure it and scan the bus behind it.
636 * For CardBus bridges, we don't scan behind as the devices will
637 * be handled by the bridge driver itself.
638 *
639 * We need to process bridges in two passes -- first we scan those
640 * already configured by the BIOS and after we are done with all of
641 * them, we proceed to assigning numbers to the remaining buses in
642 * order to avoid overlaps between old and new bus numbers.
643 */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +0100644int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700645{
646 struct pci_bus *child;
647 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100648 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700649 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600650 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100651 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700652
653 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600654 primary = buses & 0xFF;
655 secondary = (buses >> 8) & 0xFF;
656 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700657
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600658 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
659 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700660
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100661 /* Check if setup is sensible at all */
662 if (!pass &&
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600663 (primary != bus->number || secondary <= bus->number)) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100664 dev_dbg(&dev->dev, "bus configuration invalid, reconfiguring\n");
665 broken = 1;
666 }
667
Linus Torvalds1da177e2005-04-16 15:20:36 -0700668 /* Disable MasterAbortMode during probing to avoid reporting
669 of bus errors (in some architectures) */
670 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
671 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
672 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
673
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600674 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
675 !is_cardbus && !broken) {
676 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700677 /*
678 * Bus already configured by firmware, process it in the first
679 * pass and just note the configuration.
680 */
681 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000682 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700683
684 /*
685 * If we already got to this bus through a different bridge,
Alex Chiang74710de2009-03-20 14:56:10 -0600686 * don't re-add it. This can happen with the i450NX chipset.
687 *
688 * However, we continue to descend down the hierarchy and
689 * scan remaining child buses.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700690 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600691 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600692 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600693 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600694 if (!child)
695 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600696 child->primary = primary;
697 child->subordinate = subordinate;
Alex Chiang74710de2009-03-20 14:56:10 -0600698 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700699 }
700
Linus Torvalds1da177e2005-04-16 15:20:36 -0700701 cmax = pci_scan_child_bus(child);
702 if (cmax > max)
703 max = cmax;
704 if (child->subordinate > max)
705 max = child->subordinate;
706 } else {
707 /*
708 * We need to assign a number to this bus which we always
709 * do in the second pass.
710 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700711 if (!pass) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100712 if (pcibios_assign_all_busses() || broken)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700713 /* Temporarily disable forwarding of the
714 configuration cycles on all bridges in
715 this bus segment to avoid possible
716 conflicts in the second pass between two
717 bridges programmed with overlapping
718 bus ranges. */
719 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
720 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000721 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700722 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700723
724 /* Clear errors */
725 pci_write_config_word(dev, PCI_STATUS, 0xffff);
726
Rajesh Shahcc574502005-04-28 00:25:47 -0700727 /* Prevent assigning a bus number that already exists.
728 * This can happen when a bridge is hot-plugged */
729 if (pci_find_bus(pci_domain_nr(bus), max+1))
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000730 goto out;
Rajesh Shah6ef6f0e2005-04-28 00:25:49 -0700731 child = pci_add_new_bus(bus, dev, ++max);
Jesper Juhl7c867c82011-01-24 21:14:33 +0100732 if (!child)
733 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700734 buses = (buses & 0xff000000)
735 | ((unsigned int)(child->primary) << 0)
736 | ((unsigned int)(child->secondary) << 8)
737 | ((unsigned int)(child->subordinate) << 16);
738
739 /*
740 * yenta.c forces a secondary latency timer of 176.
741 * Copy that behaviour here.
742 */
743 if (is_cardbus) {
744 buses &= ~0xff000000;
745 buses |= CARDBUS_LATENCY_TIMER << 24;
746 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100747
Linus Torvalds1da177e2005-04-16 15:20:36 -0700748 /*
749 * We need to blast all three values with a single write.
750 */
751 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
752
753 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700754 child->bridge_ctl = bctl;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700755 /*
756 * Adjust subordinate busnr in parent buses.
757 * We do this before scanning for children because
758 * some devices may not be detected if the bios
759 * was lazy.
760 */
761 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700762 /* Now we can scan all subordinate buses... */
763 max = pci_scan_child_bus(child);
Kristen Accardie3ac86d2006-01-17 16:57:01 -0800764 /*
765 * now fix it up again since we have found
766 * the real value of max.
767 */
768 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700769 } else {
770 /*
771 * For CardBus bridges, we leave 4 bus numbers
772 * as cards with a PCI-to-PCI bridge can be
773 * inserted later.
774 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100775 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
776 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700777 if (pci_find_bus(pci_domain_nr(bus),
778 max+i+1))
779 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100780 while (parent->parent) {
781 if ((!pcibios_assign_all_busses()) &&
782 (parent->subordinate > max) &&
783 (parent->subordinate <= max+i)) {
784 j = 1;
785 }
786 parent = parent->parent;
787 }
788 if (j) {
789 /*
790 * Often, there are two cardbus bridges
791 * -- try to leave one valid bus number
792 * for each one.
793 */
794 i /= 2;
795 break;
796 }
797 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700798 max += i;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700799 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700800 }
801 /*
802 * Set the subordinate bus number to its real value.
803 */
804 child->subordinate = max;
805 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
806 }
807
Gary Hadecb3576f2008-02-08 14:00:52 -0800808 sprintf(child->name,
809 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
810 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700811
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200812 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100813 while (bus->parent) {
814 if ((child->subordinate > bus->subordinate) ||
815 (child->number > bus->subordinate) ||
816 (child->number < bus->number) ||
817 (child->subordinate < bus->number)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700818 dev_info(&child->dev, "[bus %02x-%02x] %s "
819 "hidden behind%s bridge %s [bus %02x-%02x]\n",
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200820 child->number, child->subordinate,
821 (bus->number > child->subordinate &&
822 bus->subordinate < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800823 "wholly" : "partially",
824 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700825 dev_name(&bus->dev),
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200826 bus->number, bus->subordinate);
Dominik Brodowski49887942005-12-08 16:53:12 +0100827 }
828 bus = bus->parent;
829 }
830
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000831out:
832 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
833
Linus Torvalds1da177e2005-04-16 15:20:36 -0700834 return max;
835}
836
837/*
838 * Read interrupt line and base address registers.
839 * The architecture-dependent code can tweak these, of course.
840 */
841static void pci_read_irq(struct pci_dev *dev)
842{
843 unsigned char irq;
844
845 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800846 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700847 if (irq)
848 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
849 dev->irq = irq;
850}
851
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000852void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800853{
854 int pos;
855 u16 reg16;
856
857 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
858 if (!pos)
859 return;
860 pdev->is_pcie = 1;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900861 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800862 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
863 pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
864}
865
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000866void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700867{
868 int pos;
869 u16 reg16;
870 u32 reg32;
871
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +0900872 pos = pci_pcie_cap(pdev);
Eric W. Biederman28760482009-09-09 14:09:24 -0700873 if (!pos)
874 return;
875 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
876 if (!(reg16 & PCI_EXP_FLAGS_SLOT))
877 return;
878 pci_read_config_dword(pdev, pos + PCI_EXP_SLTCAP, &reg32);
879 if (reg32 & PCI_EXP_SLTCAP_HPC)
880 pdev->is_hotplug_bridge = 1;
881}
882
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +0200883#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -0800884
Linus Torvalds1da177e2005-04-16 15:20:36 -0700885/**
886 * pci_setup_device - fill in class and map information of a device
887 * @dev: the device structure to fill
888 *
889 * Initialize the device structure with information about the device's
890 * vendor,class,memory and IO-space addresses,IRQ lines etc.
891 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +0800892 * Returns 0 on success and negative if unknown type of device (not normal,
893 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700894 */
Yu Zhao480b93b2009-03-20 11:25:14 +0800895int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700896{
897 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +0800898 u8 hdr_type;
899 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -0500900 int pos = 0;
Yu Zhao480b93b2009-03-20 11:25:14 +0800901
902 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
903 return -EIO;
904
905 dev->sysdata = dev->bus->sysdata;
906 dev->dev.parent = dev->bus->bridge;
907 dev->dev.bus = &pci_bus_type;
908 dev->hdr_type = hdr_type & 0x7f;
909 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +0800910 dev->error_state = pci_channel_io_normal;
911 set_pcie_port_type(dev);
912
913 list_for_each_entry(slot, &dev->bus->slots, list)
914 if (PCI_SLOT(dev->devfn) == slot->number)
915 dev->slot = slot;
916
917 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
918 set this higher, assuming the system even supports it. */
919 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700920
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -0700921 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
922 dev->bus->number, PCI_SLOT(dev->devfn),
923 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700924
925 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -0700926 dev->revision = class & 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700927 class >>= 8; /* upper 3 bytes */
928 dev->class = class;
929 class >>= 8;
930
Bjorn Helgaas2c6413a2010-09-29 12:23:21 -0600931 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %d class %#08x\n",
932 dev->vendor, dev->device, dev->hdr_type, class);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700933
Yu Zhao853346e2009-03-21 22:05:11 +0800934 /* need to have dev->class ready */
935 dev->cfg_size = pci_cfg_space_size(dev);
936
Linus Torvalds1da177e2005-04-16 15:20:36 -0700937 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -0700938 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700939
940 /* Early fixups, before probing the BARs */
941 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +0800942 /* device class may be changed after fixup */
943 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700944
945 switch (dev->hdr_type) { /* header type */
946 case PCI_HEADER_TYPE_NORMAL: /* standard header */
947 if (class == PCI_CLASS_BRIDGE_PCI)
948 goto bad;
949 pci_read_irq(dev);
950 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
951 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
952 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +0100953
954 /*
955 * Do the ugly legacy mode stuff here rather than broken chip
956 * quirk code. Legacy mode ATA controllers have fixed
957 * addresses. These are not always echoed in BAR0-3, and
958 * BAR0-3 in a few cases contain junk!
959 */
960 if (class == PCI_CLASS_STORAGE_IDE) {
961 u8 progif;
962 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
963 if ((progif & 1) == 0) {
Linus Torvaldsaf1bff42007-12-10 07:40:54 -0800964 dev->resource[0].start = 0x1F0;
965 dev->resource[0].end = 0x1F7;
966 dev->resource[0].flags = LEGACY_IO_RESOURCE;
967 dev->resource[1].start = 0x3F6;
968 dev->resource[1].end = 0x3F6;
969 dev->resource[1].flags = LEGACY_IO_RESOURCE;
Alan Cox368c73d2006-10-04 00:41:26 +0100970 }
971 if ((progif & 4) == 0) {
Linus Torvaldsaf1bff42007-12-10 07:40:54 -0800972 dev->resource[2].start = 0x170;
973 dev->resource[2].end = 0x177;
974 dev->resource[2].flags = LEGACY_IO_RESOURCE;
975 dev->resource[3].start = 0x376;
976 dev->resource[3].end = 0x376;
977 dev->resource[3].flags = LEGACY_IO_RESOURCE;
Alan Cox368c73d2006-10-04 00:41:26 +0100978 }
979 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700980 break;
981
982 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
983 if (class != PCI_CLASS_BRIDGE_PCI)
984 goto bad;
985 /* The PCI-to-PCI bridge spec requires that subtractive
986 decoding (i.e. transparent) bridge must have programming
987 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -0800988 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700989 dev->transparent = ((dev->class & 0xff) == 1);
990 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -0700991 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -0500992 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
993 if (pos) {
994 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
995 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
996 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700997 break;
998
999 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1000 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1001 goto bad;
1002 pci_read_irq(dev);
1003 pci_read_bases(dev, 1, 0);
1004 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1005 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1006 break;
1007
1008 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001009 dev_err(&dev->dev, "unknown header type %02x, "
1010 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001011 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001012
1013 bad:
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001014 dev_err(&dev->dev, "ignoring class %02x (doesn't match header "
1015 "type %02x)\n", class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001016 dev->class = PCI_CLASS_NOT_DEFINED;
1017 }
1018
1019 /* We found a fine healthy device, go go go... */
1020 return 0;
1021}
1022
Zhao, Yu201de562008-10-13 19:49:55 +08001023static void pci_release_capabilities(struct pci_dev *dev)
1024{
1025 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001026 pci_iov_release(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001027}
1028
Linus Torvalds1da177e2005-04-16 15:20:36 -07001029/**
1030 * pci_release_dev - free a pci device structure when all users of it are finished.
1031 * @dev: device that's been disconnected
1032 *
1033 * Will be called only by the device core when all users of this pci device are
1034 * done.
1035 */
1036static void pci_release_dev(struct device *dev)
1037{
1038 struct pci_dev *pci_dev;
1039
1040 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001041 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001042 pci_release_of_node(pci_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001043 kfree(pci_dev);
1044}
1045
1046/**
1047 * pci_cfg_space_size - get the configuration space size of the PCI device.
Randy Dunlap8f7020d2005-10-23 11:57:38 -07001048 * @dev: PCI device
Linus Torvalds1da177e2005-04-16 15:20:36 -07001049 *
1050 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1051 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1052 * access it. Maybe we don't have a way to generate extended config space
1053 * accesses, or the device is behind a reverse Express bridge. So we try
1054 * reading the dword at 0x100 which must either be 0 or a valid extended
1055 * capability header.
1056 */
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001057int pci_cfg_space_size_ext(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001058{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001059 u32 status;
Zhao, Yu557848c2008-10-13 19:18:07 +08001060 int pos = PCI_CFG_SPACE_SIZE;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001061
Zhao, Yu557848c2008-10-13 19:18:07 +08001062 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001063 goto fail;
1064 if (status == 0xffffffff)
1065 goto fail;
1066
1067 return PCI_CFG_SPACE_EXP_SIZE;
1068
1069 fail:
1070 return PCI_CFG_SPACE_SIZE;
1071}
1072
Yinghai Lu57741a72008-02-15 01:32:50 -08001073int pci_cfg_space_size(struct pci_dev *dev)
1074{
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001075 int pos;
1076 u32 status;
Yinghai Ludfadd9e2009-03-08 21:35:37 -07001077 u16 class;
1078
1079 class = dev->class >> 8;
1080 if (class == PCI_CLASS_BRIDGE_HOST)
1081 return pci_cfg_space_size_ext(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001082
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +09001083 pos = pci_pcie_cap(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001084 if (!pos) {
1085 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1086 if (!pos)
1087 goto fail;
1088
1089 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1090 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1091 goto fail;
1092 }
1093
1094 return pci_cfg_space_size_ext(dev);
1095
1096 fail:
1097 return PCI_CFG_SPACE_SIZE;
Yinghai Lu57741a72008-02-15 01:32:50 -08001098}
1099
Linus Torvalds1da177e2005-04-16 15:20:36 -07001100static void pci_release_bus_bridge_dev(struct device *dev)
1101{
1102 kfree(dev);
1103}
1104
Michael Ellerman65891212007-04-05 17:19:08 +10001105struct pci_dev *alloc_pci_dev(void)
1106{
1107 struct pci_dev *dev;
1108
1109 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1110 if (!dev)
1111 return NULL;
1112
Michael Ellerman65891212007-04-05 17:19:08 +10001113 INIT_LIST_HEAD(&dev->bus_list);
1114
1115 return dev;
1116}
1117EXPORT_SYMBOL(alloc_pci_dev);
1118
Linus Torvalds1da177e2005-04-16 15:20:36 -07001119/*
1120 * Read the config data for a PCI device, sanity-check it
1121 * and fill in the dev structure...
1122 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001123static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001124{
1125 struct pci_dev *dev;
1126 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001127 int delay = 1;
1128
1129 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l))
1130 return NULL;
1131
1132 /* some broken boards return 0 or ~0 if a slot is empty: */
1133 if (l == 0xffffffff || l == 0x00000000 ||
1134 l == 0x0000ffff || l == 0xffff0000)
1135 return NULL;
1136
1137 /* Configuration request Retry Status */
1138 while (l == 0xffff0001) {
1139 msleep(delay);
1140 delay *= 2;
1141 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l))
1142 return NULL;
1143 /* Card hasn't responded in 60 seconds? Must be stuck. */
1144 if (delay > 60 * 1000) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001145 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
Linus Torvalds1da177e2005-04-16 15:20:36 -07001146 "responding\n", pci_domain_nr(bus),
1147 bus->number, PCI_SLOT(devfn),
1148 PCI_FUNC(devfn));
1149 return NULL;
1150 }
1151 }
1152
Michael Ellermanbab41e92007-04-05 17:19:09 +10001153 dev = alloc_pci_dev();
Linus Torvalds1da177e2005-04-16 15:20:36 -07001154 if (!dev)
1155 return NULL;
1156
Linus Torvalds1da177e2005-04-16 15:20:36 -07001157 dev->bus = bus;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001158 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001159 dev->vendor = l & 0xffff;
1160 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001161
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001162 pci_set_of_node(dev);
1163
Yu Zhao480b93b2009-03-20 11:25:14 +08001164 if (pci_setup_device(dev)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001165 kfree(dev);
1166 return NULL;
1167 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001168
1169 return dev;
1170}
1171
Zhao, Yu201de562008-10-13 19:49:55 +08001172static void pci_init_capabilities(struct pci_dev *dev)
1173{
1174 /* MSI/MSI-X list */
1175 pci_msi_init_pci_dev(dev);
1176
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001177 /* Buffers for saving PCIe and PCI-X capabilities */
1178 pci_allocate_cap_save_buffers(dev);
1179
Zhao, Yu201de562008-10-13 19:49:55 +08001180 /* Power Management */
1181 pci_pm_init(dev);
Jesse Barneseb9c39d2008-12-17 12:10:05 -08001182 platform_pci_wakeup_init(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001183
1184 /* Vital Product Data */
1185 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001186
1187 /* Alternative Routing-ID Forwarding */
1188 pci_enable_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001189
1190 /* Single Root I/O Virtualization */
1191 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001192
1193 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001194 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001195}
1196
Sam Ravnborg96bde062007-03-26 21:53:30 -08001197void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001198{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001199 device_initialize(&dev->dev);
1200 dev->dev.release = pci_release_dev;
1201 pci_dev_get(dev);
1202
Linus Torvalds1da177e2005-04-16 15:20:36 -07001203 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001204 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001205 dev->dev.coherent_dma_mask = 0xffffffffull;
1206
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001207 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001208 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001209
Linus Torvalds1da177e2005-04-16 15:20:36 -07001210 /* Fix up broken headers */
1211 pci_fixup_device(pci_fixup_header, dev);
1212
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001213 /* Clear the state_saved flag. */
1214 dev->state_saved = false;
1215
Zhao, Yu201de562008-10-13 19:49:55 +08001216 /* Initialize various capabilities */
1217 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001218
Linus Torvalds1da177e2005-04-16 15:20:36 -07001219 /*
1220 * Add the device to our list of discovered devices
1221 * and the bus list for fixup functions, etc.
1222 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001223 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001224 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001225 up_write(&pci_bus_sem);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001226}
1227
Sam Ravnborg451124a2008-02-02 22:33:43 +01001228struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001229{
1230 struct pci_dev *dev;
1231
Trent Piepho90bdb312009-03-20 14:56:00 -06001232 dev = pci_get_slot(bus, devfn);
1233 if (dev) {
1234 pci_dev_put(dev);
1235 return dev;
1236 }
1237
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001238 dev = pci_scan_device(bus, devfn);
1239 if (!dev)
1240 return NULL;
1241
1242 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001243
1244 return dev;
1245}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001246EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001247
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001248static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn)
1249{
1250 u16 cap;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001251 unsigned pos, next_fn;
1252
1253 if (!dev)
1254 return 0;
1255
1256 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001257 if (!pos)
1258 return 0;
1259 pci_read_config_word(dev, pos + 4, &cap);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001260 next_fn = cap >> 8;
1261 if (next_fn <= fn)
1262 return 0;
1263 return next_fn;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001264}
1265
1266static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn)
1267{
1268 return (fn + 1) % 8;
1269}
1270
1271static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
1272{
1273 return 0;
1274}
1275
1276static int only_one_child(struct pci_bus *bus)
1277{
1278 struct pci_dev *parent = bus->self;
1279 if (!parent || !pci_is_pcie(parent))
1280 return 0;
1281 if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
1282 parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
1283 return 1;
1284 return 0;
1285}
1286
Linus Torvalds1da177e2005-04-16 15:20:36 -07001287/**
1288 * pci_scan_slot - scan a PCI slot on a bus for devices.
1289 * @bus: PCI bus to scan
1290 * @devfn: slot number to scan (must have zero function.)
1291 *
1292 * Scan a PCI slot on the specified PCI bus for devices, adding
1293 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001294 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001295 *
1296 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001297 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001298int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001299{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001300 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001301 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001302 unsigned (*next_fn)(struct pci_dev *, unsigned) = no_next_fn;
1303
1304 if (only_one_child(bus) && (devfn > 0))
1305 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001306
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001307 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001308 if (!dev)
1309 return 0;
1310 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001311 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001312
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001313 if (pci_ari_enabled(bus))
1314 next_fn = next_ari_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001315 else if (dev->multifunction)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001316 next_fn = next_trad_fn;
1317
1318 for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {
1319 dev = pci_scan_single_device(bus, devfn + fn);
1320 if (dev) {
1321 if (!dev->is_added)
1322 nr++;
1323 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001324 }
1325 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001326
Shaohua Li149e1632008-07-23 10:32:31 +08001327 /* only one slot has pcie device */
1328 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001329 pcie_aspm_init_link_state(bus->self);
1330
Linus Torvalds1da177e2005-04-16 15:20:36 -07001331 return nr;
1332}
1333
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001334unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001335{
1336 unsigned int devfn, pass, max = bus->secondary;
1337 struct pci_dev *dev;
1338
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001339 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001340
1341 /* Go find them, Rover! */
1342 for (devfn = 0; devfn < 0x100; devfn += 8)
1343 pci_scan_slot(bus, devfn);
1344
Yu Zhaoa28724b2009-03-20 11:25:13 +08001345 /* Reserve buses for SR-IOV capability. */
1346 max += pci_iov_bus_range(bus);
1347
Linus Torvalds1da177e2005-04-16 15:20:36 -07001348 /*
1349 * After performing arch-dependent fixup of the bus, look behind
1350 * all PCI-to-PCI bridges on this bus.
1351 */
Alex Chiang74710de2009-03-20 14:56:10 -06001352 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001353 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001354 pcibios_fixup_bus(bus);
1355 if (pci_is_root_bus(bus))
1356 bus->is_added = 1;
1357 }
1358
Linus Torvalds1da177e2005-04-16 15:20:36 -07001359 for (pass=0; pass < 2; pass++)
1360 list_for_each_entry(dev, &bus->devices, bus_list) {
1361 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1362 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1363 max = pci_scan_bridge(bus, dev, max, pass);
1364 }
1365
1366 /*
1367 * We've scanned the bus and so we know all about what's on
1368 * the other side of any bridges that may be on this bus plus
1369 * any devices.
1370 *
1371 * Return how far we've got finding sub-buses.
1372 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001373 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001374 return max;
1375}
1376
Sam Ravnborg96bde062007-03-26 21:53:30 -08001377struct pci_bus * pci_create_bus(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001378 int bus, struct pci_ops *ops, void *sysdata)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001379{
1380 int error;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001381 struct pci_bus *b, *b2;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001382 struct device *dev;
1383
1384 b = pci_alloc_bus();
1385 if (!b)
1386 return NULL;
1387
Geert Uytterhoeven6a3b3e22009-03-15 20:14:37 +01001388 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001389 if (!dev){
1390 kfree(b);
1391 return NULL;
1392 }
1393
1394 b->sysdata = sysdata;
1395 b->ops = ops;
1396
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001397 b2 = pci_find_bus(pci_domain_nr(b), bus);
1398 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001399 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001400 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001401 goto err_out;
1402 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001403
1404 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001405 list_add_tail(&b->node, &pci_root_buses);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001406 up_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001407
Linus Torvalds1da177e2005-04-16 15:20:36 -07001408 dev->parent = parent;
1409 dev->release = pci_release_bus_bridge_dev;
Kay Sievers1a927132008-10-30 02:17:49 +01001410 dev_set_name(dev, "pci%04x:%02x", pci_domain_nr(b), bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001411 error = device_register(dev);
1412 if (error)
1413 goto dev_reg_err;
1414 b->bridge = get_device(dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001415 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f302011-04-11 11:37:07 +10001416 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001417
Yinghai Lu0d358f22008-02-19 03:20:41 -08001418 if (!parent)
1419 set_dev_node(b->bridge, pcibus_to_node(b));
1420
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001421 b->dev.class = &pcibus_class;
1422 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001423 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001424 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001425 if (error)
1426 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001427
1428 /* Create legacy_io and legacy_mem files for this bus */
1429 pci_create_legacy_files(b);
1430
Linus Torvalds1da177e2005-04-16 15:20:36 -07001431 b->number = b->secondary = bus;
1432 b->resource[0] = &ioport_resource;
1433 b->resource[1] = &iomem_resource;
1434
Linus Torvalds1da177e2005-04-16 15:20:36 -07001435 return b;
1436
Linus Torvalds1da177e2005-04-16 15:20:36 -07001437class_dev_reg_err:
1438 device_unregister(dev);
1439dev_reg_err:
Zhang Yanmind71374d2006-06-02 12:35:43 +08001440 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001441 list_del(&b->node);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001442 up_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001443err_out:
1444 kfree(dev);
1445 kfree(b);
1446 return NULL;
1447}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001448
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001449struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001450 int bus, struct pci_ops *ops, void *sysdata)
1451{
1452 struct pci_bus *b;
1453
1454 b = pci_create_bus(parent, bus, ops, sysdata);
1455 if (b)
1456 b->subordinate = pci_scan_child_bus(b);
1457 return b;
1458}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001459EXPORT_SYMBOL(pci_scan_bus_parented);
1460
1461#ifdef CONFIG_HOTPLUG
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001462/**
1463 * pci_rescan_bus - scan a PCI bus for devices.
1464 * @bus: PCI bus to scan
1465 *
1466 * Scan a PCI bus and child buses for new devices, adds them,
1467 * and enables them.
1468 *
1469 * Returns the max number of subordinate bus discovered.
1470 */
Alex Chiang5446a6b2009-04-01 18:24:12 -06001471unsigned int __ref pci_rescan_bus(struct pci_bus *bus)
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001472{
1473 unsigned int max;
1474 struct pci_dev *dev;
1475
1476 max = pci_scan_child_bus(bus);
1477
Alex Chiang705b1aa2009-03-20 14:56:31 -06001478 down_read(&pci_bus_sem);
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001479 list_for_each_entry(dev, &bus->devices, bus_list)
1480 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1481 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1482 if (dev->subordinate)
1483 pci_bus_size_bridges(dev->subordinate);
Alex Chiang705b1aa2009-03-20 14:56:31 -06001484 up_read(&pci_bus_sem);
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001485
1486 pci_bus_assign_resources(bus);
1487 pci_enable_bridges(bus);
1488 pci_bus_add_devices(bus);
1489
1490 return max;
1491}
1492EXPORT_SYMBOL_GPL(pci_rescan_bus);
1493
Linus Torvalds1da177e2005-04-16 15:20:36 -07001494EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001495EXPORT_SYMBOL(pci_scan_slot);
1496EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001497EXPORT_SYMBOL_GPL(pci_scan_child_bus);
1498#endif
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001499
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001500static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001501{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001502 const struct pci_dev *a = to_pci_dev(d_a);
1503 const struct pci_dev *b = to_pci_dev(d_b);
1504
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001505 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1506 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1507
1508 if (a->bus->number < b->bus->number) return -1;
1509 else if (a->bus->number > b->bus->number) return 1;
1510
1511 if (a->devfn < b->devfn) return -1;
1512 else if (a->devfn > b->devfn) return 1;
1513
1514 return 0;
1515}
1516
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08001517void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001518{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001519 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001520}