blob: 6258f6f24983495ee1e89b215d2ad1fa6eebc021 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * probe.c - PCI detection and setup code
3 */
4
5#include <linux/kernel.h>
6#include <linux/delay.h>
7#include <linux/init.h>
8#include <linux/pci.h>
9#include <linux/slab.h>
10#include <linux/module.h>
11#include <linux/cpumask.h>
Shaohua Li7d715a62008-02-25 09:46:41 +080012#include <linux/pci-aspm.h>
Bjorn Helgaas284f5f92012-04-30 15:21:02 -060013#include <asm-generic/pci-bridge.h>
Greg KHbc56b9e2005-04-08 14:53:31 +090014#include "pci.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
17#define CARDBUS_RESERVE_BUSNR 3
Linus Torvalds1da177e2005-04-16 15:20:36 -070018
19/* Ugh. Need to stop exporting this to modules. */
20LIST_HEAD(pci_root_buses);
21EXPORT_SYMBOL(pci_root_buses);
22
Yinghai Lu5cc62c22012-05-17 18:51:11 -070023static LIST_HEAD(pci_domain_busn_res_list);
24
25struct pci_domain_busn_res {
26 struct list_head list;
27 struct resource res;
28 int domain_nr;
29};
30
31static struct resource *get_pci_domain_busn_res(int domain_nr)
32{
33 struct pci_domain_busn_res *r;
34
35 list_for_each_entry(r, &pci_domain_busn_res_list, list)
36 if (r->domain_nr == domain_nr)
37 return &r->res;
38
39 r = kzalloc(sizeof(*r), GFP_KERNEL);
40 if (!r)
41 return NULL;
42
43 r->domain_nr = domain_nr;
44 r->res.start = 0;
45 r->res.end = 0xff;
46 r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
47
48 list_add_tail(&r->list, &pci_domain_busn_res_list);
49
50 return &r->res;
51}
52
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080053static int find_anything(struct device *dev, void *data)
54{
55 return 1;
56}
Linus Torvalds1da177e2005-04-16 15:20:36 -070057
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070058/*
59 * Some device drivers need know if pci is initiated.
60 * Basically, we think pci is not initiated when there
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080061 * is no device to be found on the pci_bus_type.
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070062 */
63int no_pci_devices(void)
64{
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080065 struct device *dev;
66 int no_devices;
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070067
Greg Kroah-Hartman70308922008-02-13 22:30:39 -080068 dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
69 no_devices = (dev == NULL);
70 put_device(dev);
71 return no_devices;
72}
Zhang, Yanmined4aaad2007-07-15 23:39:39 -070073EXPORT_SYMBOL(no_pci_devices);
74
Linus Torvalds1da177e2005-04-16 15:20:36 -070075/*
Linus Torvalds1da177e2005-04-16 15:20:36 -070076 * PCI Bus Class
77 */
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040078static void release_pcibus_dev(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -070079{
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040080 struct pci_bus *pci_bus = to_pci_bus(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -070081
82 if (pci_bus->bridge)
83 put_device(pci_bus->bridge);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -070084 pci_bus_remove_resources(pci_bus);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +100085 pci_release_bus_of_node(pci_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -070086 kfree(pci_bus);
87}
88
89static struct class pcibus_class = {
90 .name = "pci_bus",
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -040091 .dev_release = &release_pcibus_dev,
Yinghai Lub9d320f2011-05-12 17:11:39 -070092 .dev_attrs = pcibus_dev_attrs,
Linus Torvalds1da177e2005-04-16 15:20:36 -070093};
94
95static int __init pcibus_class_init(void)
96{
97 return class_register(&pcibus_class);
98}
99postcore_initcall(pcibus_class_init);
100
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400101static u64 pci_size(u64 base, u64 maxbase, u64 mask)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800102{
103 u64 size = mask & maxbase; /* Find the significant bits */
104 if (!size)
105 return 0;
106
107 /* Get the lowest of them to find the decode size, and
108 from that the extent. */
109 size = (size & ~(size-1)) - 1;
110
111 /* base == maxbase can be valid only if the BAR has
112 already been programmed with all 1s. */
113 if (base == maxbase && ((base | size) & mask) != mask)
114 return 0;
115
116 return size;
117}
118
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600119static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
Yinghai Lu07eddf32006-11-29 13:53:10 -0800120{
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600121 u32 mem_type;
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600122 unsigned long flags;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600123
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400124 if ((bar & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600125 flags = bar & ~PCI_BASE_ADDRESS_IO_MASK;
126 flags |= IORESOURCE_IO;
127 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400128 }
129
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600130 flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK;
131 flags |= IORESOURCE_MEM;
132 if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
133 flags |= IORESOURCE_PREFETCH;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400134
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600135 mem_type = bar & PCI_BASE_ADDRESS_MEM_TYPE_MASK;
136 switch (mem_type) {
137 case PCI_BASE_ADDRESS_MEM_TYPE_32:
138 break;
139 case PCI_BASE_ADDRESS_MEM_TYPE_1M:
140 dev_info(&dev->dev, "1M mem BAR treated as 32-bit BAR\n");
141 break;
142 case PCI_BASE_ADDRESS_MEM_TYPE_64:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600143 flags |= IORESOURCE_MEM_64;
144 break;
Bjorn Helgaas8d6a6a42011-06-14 13:04:29 -0600145 default:
146 dev_warn(&dev->dev,
147 "mem unknown type %x treated as 32-bit BAR\n",
148 mem_type);
149 break;
150 }
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600151 return flags;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400152}
153
Yu Zhao0b400c72008-11-22 02:40:40 +0800154/**
155 * pci_read_base - read a PCI BAR
156 * @dev: the PCI device
157 * @type: type of the BAR
158 * @res: resource buffer to be filled in
159 * @pos: BAR position in the config space
160 *
161 * Returns 1 if the BAR is 64-bit, or 0 if 32-bit.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400162 */
Yu Zhao0b400c72008-11-22 02:40:40 +0800163int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400164 struct resource *res, unsigned int pos)
165{
166 u32 l, sz, mask;
Jacob Pan253d2e52010-07-16 10:19:22 -0700167 u16 orig_cmd;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700168 struct pci_bus_region region;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400169
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200170 mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400171
Jacob Pan253d2e52010-07-16 10:19:22 -0700172 if (!dev->mmio_always_on) {
173 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
174 pci_write_config_word(dev, PCI_COMMAND,
175 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
176 }
177
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400178 res->name = pci_name(dev);
179
180 pci_read_config_dword(dev, pos, &l);
Michael S. Tsirkin1ed67432009-10-29 17:24:59 +0200181 pci_write_config_dword(dev, pos, l | mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400182 pci_read_config_dword(dev, pos, &sz);
183 pci_write_config_dword(dev, pos, l);
184
Jacob Pan253d2e52010-07-16 10:19:22 -0700185 if (!dev->mmio_always_on)
186 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
187
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400188 /*
189 * All bits set in sz means the device isn't working properly.
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600190 * If the BAR isn't implemented, all bits must be 0. If it's a
191 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
192 * 1 must be clear.
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400193 */
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600194 if (!sz || sz == 0xffffffff)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400195 goto fail;
196
197 /*
198 * I don't know how l can have all bits set. Copied from old code.
199 * Maybe it fixes a bug on some ancient platform.
200 */
201 if (l == 0xffffffff)
202 l = 0;
203
204 if (type == pci_bar_unknown) {
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600205 res->flags = decode_bar(dev, l);
206 res->flags |= IORESOURCE_SIZEALIGN;
207 if (res->flags & IORESOURCE_IO) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400208 l &= PCI_BASE_ADDRESS_IO_MASK;
David S. Miller5aceca92011-05-23 17:12:22 -0700209 mask = PCI_BASE_ADDRESS_IO_MASK & (u32) IO_SPACE_LIMIT;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400210 } else {
211 l &= PCI_BASE_ADDRESS_MEM_MASK;
212 mask = (u32)PCI_BASE_ADDRESS_MEM_MASK;
213 }
214 } else {
215 res->flags |= (l & IORESOURCE_ROM_ENABLE);
216 l &= PCI_ROM_ADDRESS_MASK;
217 mask = (u32)PCI_ROM_ADDRESS_MASK;
218 }
219
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600220 if (res->flags & IORESOURCE_MEM_64) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400221 u64 l64 = l;
222 u64 sz64 = sz;
223 u64 mask64 = mask | (u64)~0 << 32;
224
225 pci_read_config_dword(dev, pos + 4, &l);
226 pci_write_config_dword(dev, pos + 4, ~0);
227 pci_read_config_dword(dev, pos + 4, &sz);
228 pci_write_config_dword(dev, pos + 4, l);
229
230 l64 |= ((u64)l << 32);
231 sz64 |= ((u64)sz << 32);
232
233 sz64 = pci_size(l64, sz64, mask64);
234
235 if (!sz64)
236 goto fail;
237
Matthew Wilcoxcc5499c2008-07-28 13:39:00 -0400238 if ((sizeof(resource_size_t) < 8) && (sz64 > 0x100000000ULL)) {
Bjorn Helgaas865df572009-11-04 10:32:57 -0700239 dev_err(&dev->dev, "reg %x: can't handle 64-bit BAR\n",
240 pos);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400241 goto fail;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600242 }
243
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600244 if ((sizeof(resource_size_t) < 8) && l) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400245 /* Address above 32-bit boundary; disable the BAR */
246 pci_write_config_dword(dev, pos, 0);
247 pci_write_config_dword(dev, pos + 4, 0);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700248 region.start = 0;
249 region.end = sz64;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700250 pcibios_bus_to_resource(dev, res, &region);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400251 } else {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700252 region.start = l64;
253 region.end = l64 + sz64;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700254 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600255 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n",
Bjorn Helgaasa369c792009-10-06 15:33:44 -0600256 pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400257 }
258 } else {
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600259 sz = pci_size(l, sz, mask);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400260
Bjorn Helgaas45aa23b2010-04-22 09:02:43 -0600261 if (!sz)
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400262 goto fail;
263
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700264 region.start = l;
265 region.end = l + sz;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700266 pcibios_bus_to_resource(dev, res, &region);
Vincent Legollf393d9b2008-10-12 12:26:12 +0200267
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600268 dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400269 }
270
271 out:
Bjorn Helgaas28c68212011-06-14 13:04:35 -0600272 return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400273 fail:
274 res->flags = 0;
275 goto out;
Yinghai Lu07eddf32006-11-29 13:53:10 -0800276}
277
Linus Torvalds1da177e2005-04-16 15:20:36 -0700278static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
279{
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400280 unsigned int pos, reg;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700281
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400282 for (pos = 0; pos < howmany; pos++) {
283 struct resource *res = &dev->resource[pos];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700284 reg = PCI_BASE_ADDRESS_0 + (pos << 2);
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400285 pos += __pci_read_base(dev, pci_bar_unknown, res, reg);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700286 }
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400287
Linus Torvalds1da177e2005-04-16 15:20:36 -0700288 if (rom) {
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400289 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
Linus Torvalds1da177e2005-04-16 15:20:36 -0700290 dev->rom_base_reg = rom;
Matthew Wilcox6ac665c2008-07-28 13:38:59 -0400291 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
292 IORESOURCE_READONLY | IORESOURCE_CACHEABLE |
293 IORESOURCE_SIZEALIGN;
294 __pci_read_base(dev, pci_bar_mem32, res, rom);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700295 }
296}
297
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700298static void __devinit pci_read_bridge_io(struct pci_bus *child)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700299{
300 struct pci_dev *dev = child->self;
301 u8 io_base_lo, io_limit_lo;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700302 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700303 struct pci_bus_region region;
304 struct resource *res, res2;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700305
Linus Torvalds1da177e2005-04-16 15:20:36 -0700306 res = child->resource[0];
307 pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
308 pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
309 base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
310 limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
311
312 if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
313 u16 io_base_hi, io_limit_hi;
314 pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
315 pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
316 base |= (io_base_hi << 16);
317 limit |= (io_limit_hi << 16);
318 }
319
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800320 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700321 res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
Bjorn Helgaascf48fb62012-03-16 17:47:59 -0600322 res2.flags = res->flags;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700323 region.start = base;
324 region.end = limit + 0xfff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700325 pcibios_bus_to_resource(dev, &res2, &region);
Daniel Yeisley9d265122005-12-05 07:06:43 -0500326 if (!res->start)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700327 res->start = res2.start;
Daniel Yeisley9d265122005-12-05 07:06:43 -0500328 if (!res->end)
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700329 res->end = res2.end;
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600330 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700331 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700332}
333
334static void __devinit pci_read_bridge_mmio(struct pci_bus *child)
335{
336 struct pci_dev *dev = child->self;
337 u16 mem_base_lo, mem_limit_lo;
338 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700339 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700340 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700341
342 res = child->resource[1];
343 pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
344 pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
345 base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
346 limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800347 if (base && base <= limit) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700348 res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700349 region.start = base;
350 region.end = limit + 0xfffff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700351 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600352 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700353 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700354}
355
356static void __devinit pci_read_bridge_mmio_pref(struct pci_bus *child)
357{
358 struct pci_dev *dev = child->self;
359 u16 mem_base_lo, mem_limit_lo;
360 unsigned long base, limit;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700361 struct pci_bus_region region;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700362 struct resource *res;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700363
364 res = child->resource[2];
365 pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
366 pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
367 base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
368 limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
369
370 if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
371 u32 mem_base_hi, mem_limit_hi;
372 pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
373 pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
374
375 /*
376 * Some bridges set the base > limit by default, and some
377 * (broken) BIOSes do not initialize them. If we find
378 * this, just assume they are not being used.
379 */
380 if (mem_base_hi <= mem_limit_hi) {
381#if BITS_PER_LONG == 64
382 base |= ((long) mem_base_hi) << 32;
383 limit |= ((long) mem_limit_hi) << 32;
384#else
385 if (mem_base_hi || mem_limit_hi) {
Bjorn Helgaas80ccba12008-06-13 10:52:11 -0600386 dev_err(&dev->dev, "can't handle 64-bit "
387 "address space for bridge\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -0700388 return;
389 }
390#endif
391 }
392 }
Yinghai Lucd81e1e2010-01-22 01:02:22 -0800393 if (base && base <= limit) {
Yinghai Lu1f82de12009-04-23 20:48:32 -0700394 res->flags = (mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) |
395 IORESOURCE_MEM | IORESOURCE_PREFETCH;
396 if (res->flags & PCI_PREF_RANGE_TYPE_64)
397 res->flags |= IORESOURCE_MEM_64;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700398 region.start = base;
399 region.end = limit + 0xfffff;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -0700400 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaasc7dabef2009-10-27 13:26:47 -0600401 dev_printk(KERN_DEBUG, &dev->dev, " bridge window %pR\n", res);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700402 }
403}
404
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700405void __devinit pci_read_bridge_bases(struct pci_bus *child)
406{
407 struct pci_dev *dev = child->self;
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700408 struct resource *res;
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700409 int i;
410
411 if (pci_is_root_bus(child)) /* It's a host bus, nothing to read */
412 return;
413
Yinghai Lub918c622012-05-17 18:51:11 -0700414 dev_info(&dev->dev, "PCI bridge to %pR%s\n",
415 &child->busn_res,
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700416 dev->transparent ? " (subtractive decode)" : "");
417
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700418 pci_bus_remove_resources(child);
419 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++)
420 child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
421
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700422 pci_read_bridge_io(child);
423 pci_read_bridge_mmio(child);
424 pci_read_bridge_mmio_pref(child);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700425
426 if (dev->transparent) {
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700427 pci_bus_for_each_resource(child->parent, res, i) {
428 if (res) {
429 pci_bus_add_resource(child, res,
430 PCI_SUBTRACTIVE_DECODE);
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700431 dev_printk(KERN_DEBUG, &dev->dev,
432 " bridge window %pR (subtractive decode)\n",
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700433 res);
434 }
Bjorn Helgaas2adf7512010-02-23 10:24:26 -0700435 }
436 }
Bjorn Helgaasfa27b2d2010-02-23 10:24:21 -0700437}
438
Sam Ravnborg96bde062007-03-26 21:53:30 -0800439static struct pci_bus * pci_alloc_bus(void)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700440{
441 struct pci_bus *b;
442
Eric Sesterhennf5afe802006-02-28 15:34:49 +0100443 b = kzalloc(sizeof(*b), GFP_KERNEL);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700444 if (b) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700445 INIT_LIST_HEAD(&b->node);
446 INIT_LIST_HEAD(&b->children);
447 INIT_LIST_HEAD(&b->devices);
Alex Chiangf46753c2008-06-10 15:28:50 -0600448 INIT_LIST_HEAD(&b->slots);
Bjorn Helgaas2fe2abf2010-02-23 10:24:36 -0700449 INIT_LIST_HEAD(&b->resources);
Matthew Wilcox3749c512009-12-13 08:11:32 -0500450 b->max_bus_speed = PCI_SPEED_UNKNOWN;
451 b->cur_bus_speed = PCI_SPEED_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700452 }
453 return b;
454}
455
Yinghai Lu7b543662012-04-02 18:31:53 -0700456static struct pci_host_bridge *pci_alloc_host_bridge(struct pci_bus *b)
457{
458 struct pci_host_bridge *bridge;
459
460 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
461 if (bridge) {
462 INIT_LIST_HEAD(&bridge->windows);
463 bridge->bus = b;
464 }
465
466 return bridge;
467}
468
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500469static unsigned char pcix_bus_speed[] = {
470 PCI_SPEED_UNKNOWN, /* 0 */
471 PCI_SPEED_66MHz_PCIX, /* 1 */
472 PCI_SPEED_100MHz_PCIX, /* 2 */
473 PCI_SPEED_133MHz_PCIX, /* 3 */
474 PCI_SPEED_UNKNOWN, /* 4 */
475 PCI_SPEED_66MHz_PCIX_ECC, /* 5 */
476 PCI_SPEED_100MHz_PCIX_ECC, /* 6 */
477 PCI_SPEED_133MHz_PCIX_ECC, /* 7 */
478 PCI_SPEED_UNKNOWN, /* 8 */
479 PCI_SPEED_66MHz_PCIX_266, /* 9 */
480 PCI_SPEED_100MHz_PCIX_266, /* A */
481 PCI_SPEED_133MHz_PCIX_266, /* B */
482 PCI_SPEED_UNKNOWN, /* C */
483 PCI_SPEED_66MHz_PCIX_533, /* D */
484 PCI_SPEED_100MHz_PCIX_533, /* E */
485 PCI_SPEED_133MHz_PCIX_533 /* F */
486};
487
Matthew Wilcox3749c512009-12-13 08:11:32 -0500488static unsigned char pcie_link_speed[] = {
489 PCI_SPEED_UNKNOWN, /* 0 */
490 PCIE_SPEED_2_5GT, /* 1 */
491 PCIE_SPEED_5_0GT, /* 2 */
Matthew Wilcox9dfd97f2009-12-13 08:11:35 -0500492 PCIE_SPEED_8_0GT, /* 3 */
Matthew Wilcox3749c512009-12-13 08:11:32 -0500493 PCI_SPEED_UNKNOWN, /* 4 */
494 PCI_SPEED_UNKNOWN, /* 5 */
495 PCI_SPEED_UNKNOWN, /* 6 */
496 PCI_SPEED_UNKNOWN, /* 7 */
497 PCI_SPEED_UNKNOWN, /* 8 */
498 PCI_SPEED_UNKNOWN, /* 9 */
499 PCI_SPEED_UNKNOWN, /* A */
500 PCI_SPEED_UNKNOWN, /* B */
501 PCI_SPEED_UNKNOWN, /* C */
502 PCI_SPEED_UNKNOWN, /* D */
503 PCI_SPEED_UNKNOWN, /* E */
504 PCI_SPEED_UNKNOWN /* F */
505};
506
507void pcie_update_link_speed(struct pci_bus *bus, u16 linksta)
508{
509 bus->cur_bus_speed = pcie_link_speed[linksta & 0xf];
510}
511EXPORT_SYMBOL_GPL(pcie_update_link_speed);
512
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500513static unsigned char agp_speeds[] = {
514 AGP_UNKNOWN,
515 AGP_1X,
516 AGP_2X,
517 AGP_4X,
518 AGP_8X
519};
520
521static enum pci_bus_speed agp_speed(int agp3, int agpstat)
522{
523 int index = 0;
524
525 if (agpstat & 4)
526 index = 3;
527 else if (agpstat & 2)
528 index = 2;
529 else if (agpstat & 1)
530 index = 1;
531 else
532 goto out;
533
534 if (agp3) {
535 index += 2;
536 if (index == 5)
537 index = 0;
538 }
539
540 out:
541 return agp_speeds[index];
542}
543
544
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500545static void pci_set_bus_speed(struct pci_bus *bus)
546{
547 struct pci_dev *bridge = bus->self;
548 int pos;
549
Matthew Wilcox45b4cdd52009-12-13 08:11:34 -0500550 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP);
551 if (!pos)
552 pos = pci_find_capability(bridge, PCI_CAP_ID_AGP3);
553 if (pos) {
554 u32 agpstat, agpcmd;
555
556 pci_read_config_dword(bridge, pos + PCI_AGP_STATUS, &agpstat);
557 bus->max_bus_speed = agp_speed(agpstat & 8, agpstat & 7);
558
559 pci_read_config_dword(bridge, pos + PCI_AGP_COMMAND, &agpcmd);
560 bus->cur_bus_speed = agp_speed(agpstat & 8, agpcmd & 7);
561 }
562
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500563 pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
564 if (pos) {
565 u16 status;
566 enum pci_bus_speed max;
567 pci_read_config_word(bridge, pos + 2, &status);
568
569 if (status & 0x8000) {
570 max = PCI_SPEED_133MHz_PCIX_533;
571 } else if (status & 0x4000) {
572 max = PCI_SPEED_133MHz_PCIX_266;
573 } else if (status & 0x0002) {
574 if (((status >> 12) & 0x3) == 2) {
575 max = PCI_SPEED_133MHz_PCIX_ECC;
576 } else {
577 max = PCI_SPEED_133MHz_PCIX;
578 }
579 } else {
580 max = PCI_SPEED_66MHz_PCIX;
581 }
582
583 bus->max_bus_speed = max;
584 bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf];
585
586 return;
587 }
588
589 pos = pci_find_capability(bridge, PCI_CAP_ID_EXP);
590 if (pos) {
591 u32 linkcap;
592 u16 linksta;
593
594 pci_read_config_dword(bridge, pos + PCI_EXP_LNKCAP, &linkcap);
595 bus->max_bus_speed = pcie_link_speed[linkcap & 0xf];
596
597 pci_read_config_word(bridge, pos + PCI_EXP_LNKSTA, &linksta);
598 pcie_update_link_speed(bus, linksta);
599 }
600}
601
602
Adrian Bunkcbd4e052008-04-18 13:53:55 -0700603static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
604 struct pci_dev *bridge, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700605{
606 struct pci_bus *child;
607 int i;
608
609 /*
610 * Allocate a new bus, and inherit stuff from the parent..
611 */
612 child = pci_alloc_bus();
613 if (!child)
614 return NULL;
615
Linus Torvalds1da177e2005-04-16 15:20:36 -0700616 child->parent = parent;
617 child->ops = parent->ops;
618 child->sysdata = parent->sysdata;
Michael S. Tsirkin6e325a62006-02-14 18:52:22 +0200619 child->bus_flags = parent->bus_flags;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700620
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -0400621 /* initialize some portions of the bus device, but don't register it
622 * now as the parent is not properly set up yet. This device will get
623 * registered later in pci_bus_add_devices()
624 */
625 child->dev.class = &pcibus_class;
Kay Sievers1a927132008-10-30 02:17:49 +0100626 dev_set_name(&child->dev, "%04x:%02x", pci_domain_nr(child), busnr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700627
628 /*
629 * Set up the primary, secondary and subordinate
630 * bus numbers.
631 */
Yinghai Lub918c622012-05-17 18:51:11 -0700632 child->number = child->busn_res.start = busnr;
633 child->primary = parent->busn_res.start;
634 child->busn_res.end = 0xff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700635
Yu Zhao3789fa82008-11-22 02:41:07 +0800636 if (!bridge)
637 return child;
638
639 child->self = bridge;
640 child->bridge = get_device(&bridge->dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +1000641 pci_set_bus_of_node(child);
Matthew Wilcox9be60ca2009-12-13 08:11:33 -0500642 pci_set_bus_speed(child);
643
Linus Torvalds1da177e2005-04-16 15:20:36 -0700644 /* Set up default resource pointers and names.. */
Yu Zhaofde09c62008-11-22 02:39:32 +0800645 for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700646 child->resource[i] = &bridge->resource[PCI_BRIDGE_RESOURCES+i];
647 child->resource[i]->name = child->name;
648 }
649 bridge->subordinate = child;
650
651 return child;
652}
653
Sam Ravnborg451124a2008-02-02 22:33:43 +0100654struct pci_bus *__ref pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700655{
656 struct pci_bus *child;
657
658 child = pci_alloc_child_bus(parent, dev, busnr);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700659 if (child) {
Zhang Yanmind71374d2006-06-02 12:35:43 +0800660 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700661 list_add_tail(&child->node, &parent->children);
Zhang Yanmind71374d2006-06-02 12:35:43 +0800662 up_write(&pci_bus_sem);
Rajesh Shahe4ea9bb2005-04-28 00:25:48 -0700663 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700664 return child;
665}
666
Sam Ravnborg96bde062007-03-26 21:53:30 -0800667static void pci_fixup_parent_subordinate_busnr(struct pci_bus *child, int max)
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700668{
669 struct pci_bus *parent = child->parent;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700670
671 /* Attempts to fix that up are really dangerous unless
672 we're going to re-assign all bus numbers. */
673 if (!pcibios_assign_all_busses())
674 return;
675
Yinghai Lub918c622012-05-17 18:51:11 -0700676 while (parent->parent && parent->busn_res.end < max) {
677 parent->busn_res.end = max;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700678 pci_write_config_byte(parent->self, PCI_SUBORDINATE_BUS, max);
679 parent = parent->parent;
680 }
681}
682
Linus Torvalds1da177e2005-04-16 15:20:36 -0700683/*
684 * If it's a bridge, configure it and scan the bus behind it.
685 * For CardBus bridges, we don't scan behind as the devices will
686 * be handled by the bridge driver itself.
687 *
688 * We need to process bridges in two passes -- first we scan those
689 * already configured by the BIOS and after we are done with all of
690 * them, we proceed to assigning numbers to the remaining buses in
691 * order to avoid overlaps between old and new bus numbers.
692 */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +0100693int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700694{
695 struct pci_bus *child;
696 int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
Dominik Brodowski49887942005-12-08 16:53:12 +0100697 u32 buses, i, j = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700698 u16 bctl;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600699 u8 primary, secondary, subordinate;
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100700 int broken = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700701
702 pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600703 primary = buses & 0xFF;
704 secondary = (buses >> 8) & 0xFF;
705 subordinate = (buses >> 16) & 0xFF;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700706
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600707 dev_dbg(&dev->dev, "scanning [bus %02x-%02x] behind bridge, pass %d\n",
708 secondary, subordinate, pass);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700709
Yinghai Lu71f6bd42012-01-30 12:25:24 +0100710 if (!primary && (primary != bus->number) && secondary && subordinate) {
711 dev_warn(&dev->dev, "Primary bus is hard wired to 0\n");
712 primary = bus->number;
713 }
714
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100715 /* Check if setup is sensible at all */
716 if (!pass &&
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600717 (primary != bus->number || secondary <= bus->number)) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100718 dev_dbg(&dev->dev, "bus configuration invalid, reconfiguring\n");
719 broken = 1;
720 }
721
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722 /* Disable MasterAbortMode during probing to avoid reporting
723 of bus errors (in some architectures) */
724 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
725 pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
726 bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
727
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600728 if ((secondary || subordinate) && !pcibios_assign_all_busses() &&
729 !is_cardbus && !broken) {
730 unsigned int cmax;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700731 /*
732 * Bus already configured by firmware, process it in the first
733 * pass and just note the configuration.
734 */
735 if (pass)
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000736 goto out;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700737
738 /*
739 * If we already got to this bus through a different bridge,
Alex Chiang74710de2009-03-20 14:56:10 -0600740 * don't re-add it. This can happen with the i450NX chipset.
741 *
742 * However, we continue to descend down the hierarchy and
743 * scan remaining child buses.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700744 */
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600745 child = pci_find_bus(pci_domain_nr(bus), secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600746 if (!child) {
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600747 child = pci_add_new_bus(bus, dev, secondary);
Alex Chiang74710de2009-03-20 14:56:10 -0600748 if (!child)
749 goto out;
Bjorn Helgaas99ddd552010-03-16 15:52:58 -0600750 child->primary = primary;
Yinghai Lub918c622012-05-17 18:51:11 -0700751 child->busn_res.end = subordinate;
Alex Chiang74710de2009-03-20 14:56:10 -0600752 child->bridge_ctl = bctl;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700753 }
754
Linus Torvalds1da177e2005-04-16 15:20:36 -0700755 cmax = pci_scan_child_bus(child);
756 if (cmax > max)
757 max = cmax;
Yinghai Lub918c622012-05-17 18:51:11 -0700758 if (child->busn_res.end > max)
759 max = child->busn_res.end;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700760 } else {
761 /*
762 * We need to assign a number to this bus which we always
763 * do in the second pass.
764 */
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700765 if (!pass) {
Benjamin Herrenschmidta1c19892008-10-21 10:06:29 +1100766 if (pcibios_assign_all_busses() || broken)
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700767 /* Temporarily disable forwarding of the
768 configuration cycles on all bridges in
769 this bus segment to avoid possible
770 conflicts in the second pass between two
771 bridges programmed with overlapping
772 bus ranges. */
773 pci_write_config_dword(dev, PCI_PRIMARY_BUS,
774 buses & ~0xffffff);
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000775 goto out;
Ivan Kokshaysky12f44f42005-09-22 21:06:31 -0700776 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700777
778 /* Clear errors */
779 pci_write_config_word(dev, PCI_STATUS, 0xffff);
780
Rajesh Shahcc574502005-04-28 00:25:47 -0700781 /* Prevent assigning a bus number that already exists.
Tiejun Chenb1a98b62011-06-02 11:02:50 +0800782 * This can happen when a bridge is hot-plugged, so in
783 * this case we only re-scan this bus. */
784 child = pci_find_bus(pci_domain_nr(bus), max+1);
785 if (!child) {
786 child = pci_add_new_bus(bus, dev, ++max);
787 if (!child)
788 goto out;
789 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700790 buses = (buses & 0xff000000)
791 | ((unsigned int)(child->primary) << 0)
Yinghai Lub918c622012-05-17 18:51:11 -0700792 | ((unsigned int)(child->busn_res.start) << 8)
793 | ((unsigned int)(child->busn_res.end) << 16);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700794
795 /*
796 * yenta.c forces a secondary latency timer of 176.
797 * Copy that behaviour here.
798 */
799 if (is_cardbus) {
800 buses &= ~0xff000000;
801 buses |= CARDBUS_LATENCY_TIMER << 24;
802 }
Jesper Juhl7c867c82011-01-24 21:14:33 +0100803
Linus Torvalds1da177e2005-04-16 15:20:36 -0700804 /*
805 * We need to blast all three values with a single write.
806 */
807 pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
808
809 if (!is_cardbus) {
Gary Hade11949252007-10-08 16:24:16 -0700810 child->bridge_ctl = bctl;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700811 /*
812 * Adjust subordinate busnr in parent buses.
813 * We do this before scanning for children because
814 * some devices may not be detected if the bios
815 * was lazy.
816 */
817 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700818 /* Now we can scan all subordinate buses... */
819 max = pci_scan_child_bus(child);
Kristen Accardie3ac86d2006-01-17 16:57:01 -0800820 /*
821 * now fix it up again since we have found
822 * the real value of max.
823 */
824 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700825 } else {
826 /*
827 * For CardBus bridges, we leave 4 bus numbers
828 * as cards with a PCI-to-PCI bridge can be
829 * inserted later.
830 */
Dominik Brodowski49887942005-12-08 16:53:12 +0100831 for (i=0; i<CARDBUS_RESERVE_BUSNR; i++) {
832 struct pci_bus *parent = bus;
Rajesh Shahcc574502005-04-28 00:25:47 -0700833 if (pci_find_bus(pci_domain_nr(bus),
834 max+i+1))
835 break;
Dominik Brodowski49887942005-12-08 16:53:12 +0100836 while (parent->parent) {
837 if ((!pcibios_assign_all_busses()) &&
Yinghai Lub918c622012-05-17 18:51:11 -0700838 (parent->busn_res.end > max) &&
839 (parent->busn_res.end <= max+i)) {
Dominik Brodowski49887942005-12-08 16:53:12 +0100840 j = 1;
841 }
842 parent = parent->parent;
843 }
844 if (j) {
845 /*
846 * Often, there are two cardbus bridges
847 * -- try to leave one valid bus number
848 * for each one.
849 */
850 i /= 2;
851 break;
852 }
853 }
Rajesh Shahcc574502005-04-28 00:25:47 -0700854 max += i;
Greg Kroah-Hartman26f674a2005-06-02 15:41:48 -0700855 pci_fixup_parent_subordinate_busnr(child, max);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700856 }
857 /*
858 * Set the subordinate bus number to its real value.
859 */
Yinghai Lub918c622012-05-17 18:51:11 -0700860 child->busn_res.end = max;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700861 pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
862 }
863
Gary Hadecb3576f2008-02-08 14:00:52 -0800864 sprintf(child->name,
865 (is_cardbus ? "PCI CardBus %04x:%02x" : "PCI Bus %04x:%02x"),
866 pci_domain_nr(bus), child->number);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700867
Bernhard Kaindld55bef52007-07-30 20:35:13 +0200868 /* Has only triggered on CardBus, fixup is in yenta_socket */
Dominik Brodowski49887942005-12-08 16:53:12 +0100869 while (bus->parent) {
Yinghai Lub918c622012-05-17 18:51:11 -0700870 if ((child->busn_res.end > bus->busn_res.end) ||
871 (child->number > bus->busn_res.end) ||
Dominik Brodowski49887942005-12-08 16:53:12 +0100872 (child->number < bus->number) ||
Yinghai Lub918c622012-05-17 18:51:11 -0700873 (child->busn_res.end < bus->number)) {
874 dev_info(&child->dev, "%pR %s "
875 "hidden behind%s bridge %s %pR\n",
876 &child->busn_res,
877 (bus->number > child->busn_res.end &&
878 bus->busn_res.end < child->number) ?
Joe Perchesa6f29a92007-11-19 17:48:29 -0800879 "wholly" : "partially",
880 bus->self->transparent ? " transparent" : "",
Bjorn Helgaas865df572009-11-04 10:32:57 -0700881 dev_name(&bus->dev),
Yinghai Lub918c622012-05-17 18:51:11 -0700882 &bus->busn_res);
Dominik Brodowski49887942005-12-08 16:53:12 +0100883 }
884 bus = bus->parent;
885 }
886
Ralf Baechlebbe8f9a2006-02-14 16:23:57 +0000887out:
888 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl);
889
Linus Torvalds1da177e2005-04-16 15:20:36 -0700890 return max;
891}
892
893/*
894 * Read interrupt line and base address registers.
895 * The architecture-dependent code can tweak these, of course.
896 */
897static void pci_read_irq(struct pci_dev *dev)
898{
899 unsigned char irq;
900
901 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
Kristen Accardiffeff782005-11-02 16:24:32 -0800902 dev->pin = irq;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700903 if (irq)
904 pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
905 dev->irq = irq;
906}
907
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000908void set_pcie_port_type(struct pci_dev *pdev)
Yu Zhao480b93b2009-03-20 11:25:14 +0800909{
910 int pos;
911 u16 reg16;
912
913 pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
914 if (!pos)
915 return;
916 pdev->is_pcie = 1;
Kenji Kaneshige0efea002009-11-05 12:05:11 +0900917 pdev->pcie_cap = pos;
Yu Zhao480b93b2009-03-20 11:25:14 +0800918 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
919 pdev->pcie_type = (reg16 & PCI_EXP_FLAGS_TYPE) >> 4;
Jon Masonb03e7492011-07-20 15:20:54 -0500920 pci_read_config_word(pdev, pos + PCI_EXP_DEVCAP, &reg16);
921 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD;
Yu Zhao480b93b2009-03-20 11:25:14 +0800922}
923
Benjamin Herrenschmidtbb209c82010-01-26 17:10:03 +0000924void set_pcie_hotplug_bridge(struct pci_dev *pdev)
Eric W. Biederman28760482009-09-09 14:09:24 -0700925{
926 int pos;
927 u16 reg16;
928 u32 reg32;
929
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +0900930 pos = pci_pcie_cap(pdev);
Eric W. Biederman28760482009-09-09 14:09:24 -0700931 if (!pos)
932 return;
933 pci_read_config_word(pdev, pos + PCI_EXP_FLAGS, &reg16);
934 if (!(reg16 & PCI_EXP_FLAGS_SLOT))
935 return;
936 pci_read_config_dword(pdev, pos + PCI_EXP_SLTCAP, &reg32);
937 if (reg32 & PCI_EXP_SLTCAP_HPC)
938 pdev->is_hotplug_bridge = 1;
939}
940
Bartlomiej Zolnierkiewicz01abc2a2007-04-23 23:19:36 +0200941#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
Randy Dunlap76e6a1d2006-12-29 16:47:29 -0800942
Linus Torvalds1da177e2005-04-16 15:20:36 -0700943/**
944 * pci_setup_device - fill in class and map information of a device
945 * @dev: the device structure to fill
946 *
947 * Initialize the device structure with information about the device's
948 * vendor,class,memory and IO-space addresses,IRQ lines etc.
949 * Called at initialisation of the PCI subsystem and by CardBus services.
Yu Zhao480b93b2009-03-20 11:25:14 +0800950 * Returns 0 on success and negative if unknown type of device (not normal,
951 * bridge or CardBus).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700952 */
Yu Zhao480b93b2009-03-20 11:25:14 +0800953int pci_setup_device(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700954{
955 u32 class;
Yu Zhao480b93b2009-03-20 11:25:14 +0800956 u8 hdr_type;
957 struct pci_slot *slot;
Gabe Blackbc577d22009-10-06 10:45:19 -0500958 int pos = 0;
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -0700959 struct pci_bus_region region;
960 struct resource *res;
Yu Zhao480b93b2009-03-20 11:25:14 +0800961
962 if (pci_read_config_byte(dev, PCI_HEADER_TYPE, &hdr_type))
963 return -EIO;
964
965 dev->sysdata = dev->bus->sysdata;
966 dev->dev.parent = dev->bus->bridge;
967 dev->dev.bus = &pci_bus_type;
968 dev->hdr_type = hdr_type & 0x7f;
969 dev->multifunction = !!(hdr_type & 0x80);
Yu Zhao480b93b2009-03-20 11:25:14 +0800970 dev->error_state = pci_channel_io_normal;
971 set_pcie_port_type(dev);
972
973 list_for_each_entry(slot, &dev->bus->slots, list)
974 if (PCI_SLOT(dev->devfn) == slot->number)
975 dev->slot = slot;
976
977 /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
978 set this higher, assuming the system even supports it. */
979 dev->dma_mask = 0xffffffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700980
Greg Kroah-Hartmaneebfcfb2008-07-02 13:24:49 -0700981 dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
982 dev->bus->number, PCI_SLOT(dev->devfn),
983 PCI_FUNC(dev->devfn));
Linus Torvalds1da177e2005-04-16 15:20:36 -0700984
985 pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
Auke Kokb8a3a522007-06-08 15:46:30 -0700986 dev->revision = class & 0xff;
Yinghai Lu2dd8ba92012-02-19 14:50:12 -0800987 dev->class = class >> 8; /* upper 3 bytes */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700988
Yinghai Lu2dd8ba92012-02-19 14:50:12 -0800989 dev_printk(KERN_DEBUG, &dev->dev, "[%04x:%04x] type %02x class %#08x\n",
990 dev->vendor, dev->device, dev->hdr_type, dev->class);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700991
Yu Zhao853346e2009-03-21 22:05:11 +0800992 /* need to have dev->class ready */
993 dev->cfg_size = pci_cfg_space_size(dev);
994
Linus Torvalds1da177e2005-04-16 15:20:36 -0700995 /* "Unknown power state" */
Daniel Ritz3fe9d192005-08-17 15:32:19 -0700996 dev->current_state = PCI_UNKNOWN;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700997
998 /* Early fixups, before probing the BARs */
999 pci_fixup_device(pci_fixup_early, dev);
Yu Zhaof79b1b12009-05-28 00:25:05 +08001000 /* device class may be changed after fixup */
1001 class = dev->class >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001002
1003 switch (dev->hdr_type) { /* header type */
1004 case PCI_HEADER_TYPE_NORMAL: /* standard header */
1005 if (class == PCI_CLASS_BRIDGE_PCI)
1006 goto bad;
1007 pci_read_irq(dev);
1008 pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
1009 pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1010 pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
Alan Cox368c73d2006-10-04 00:41:26 +01001011
1012 /*
1013 * Do the ugly legacy mode stuff here rather than broken chip
1014 * quirk code. Legacy mode ATA controllers have fixed
1015 * addresses. These are not always echoed in BAR0-3, and
1016 * BAR0-3 in a few cases contain junk!
1017 */
1018 if (class == PCI_CLASS_STORAGE_IDE) {
1019 u8 progif;
1020 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1021 if ((progif & 1) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001022 region.start = 0x1F0;
1023 region.end = 0x1F7;
1024 res = &dev->resource[0];
1025 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001026 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001027 region.start = 0x3F6;
1028 region.end = 0x3F6;
1029 res = &dev->resource[1];
1030 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001031 pcibios_bus_to_resource(dev, res, &region);
Alan Cox368c73d2006-10-04 00:41:26 +01001032 }
1033 if ((progif & 4) == 0) {
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001034 region.start = 0x170;
1035 region.end = 0x177;
1036 res = &dev->resource[2];
1037 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001038 pcibios_bus_to_resource(dev, res, &region);
Bjorn Helgaas5bfa14e2012-02-23 20:19:00 -07001039 region.start = 0x376;
1040 region.end = 0x376;
1041 res = &dev->resource[3];
1042 res->flags = LEGACY_IO_RESOURCE;
Bjorn Helgaasfb127cb2012-02-23 20:19:04 -07001043 pcibios_bus_to_resource(dev, res, &region);
Alan Cox368c73d2006-10-04 00:41:26 +01001044 }
1045 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001046 break;
1047
1048 case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
1049 if (class != PCI_CLASS_BRIDGE_PCI)
1050 goto bad;
1051 /* The PCI-to-PCI bridge spec requires that subtractive
1052 decoding (i.e. transparent) bridge must have programming
1053 interface code of 0x01. */
Kristen Accardi3efd2732005-11-02 16:55:49 -08001054 pci_read_irq(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001055 dev->transparent = ((dev->class & 0xff) == 1);
1056 pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
Eric W. Biederman28760482009-09-09 14:09:24 -07001057 set_pcie_hotplug_bridge(dev);
Gabe Blackbc577d22009-10-06 10:45:19 -05001058 pos = pci_find_capability(dev, PCI_CAP_ID_SSVID);
1059 if (pos) {
1060 pci_read_config_word(dev, pos + PCI_SSVID_VENDOR_ID, &dev->subsystem_vendor);
1061 pci_read_config_word(dev, pos + PCI_SSVID_DEVICE_ID, &dev->subsystem_device);
1062 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001063 break;
1064
1065 case PCI_HEADER_TYPE_CARDBUS: /* CardBus bridge header */
1066 if (class != PCI_CLASS_BRIDGE_CARDBUS)
1067 goto bad;
1068 pci_read_irq(dev);
1069 pci_read_bases(dev, 1, 0);
1070 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
1071 pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
1072 break;
1073
1074 default: /* unknown header */
Bjorn Helgaas80ccba12008-06-13 10:52:11 -06001075 dev_err(&dev->dev, "unknown header type %02x, "
1076 "ignoring device\n", dev->hdr_type);
Yu Zhao480b93b2009-03-20 11:25:14 +08001077 return -EIO;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001078
1079 bad:
Yinghai Lu2dd8ba92012-02-19 14:50:12 -08001080 dev_err(&dev->dev, "ignoring class %#08x (doesn't match header "
1081 "type %02x)\n", dev->class, dev->hdr_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001082 dev->class = PCI_CLASS_NOT_DEFINED;
1083 }
1084
1085 /* We found a fine healthy device, go go go... */
1086 return 0;
1087}
1088
Zhao, Yu201de562008-10-13 19:49:55 +08001089static void pci_release_capabilities(struct pci_dev *dev)
1090{
1091 pci_vpd_release(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001092 pci_iov_release(dev);
Yinghai Luf7968412012-02-11 00:18:30 -08001093 pci_free_cap_save_buffers(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001094}
1095
Linus Torvalds1da177e2005-04-16 15:20:36 -07001096/**
1097 * pci_release_dev - free a pci device structure when all users of it are finished.
1098 * @dev: device that's been disconnected
1099 *
1100 * Will be called only by the device core when all users of this pci device are
1101 * done.
1102 */
1103static void pci_release_dev(struct device *dev)
1104{
1105 struct pci_dev *pci_dev;
1106
1107 pci_dev = to_pci_dev(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001108 pci_release_capabilities(pci_dev);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001109 pci_release_of_node(pci_dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001110 kfree(pci_dev);
1111}
1112
1113/**
1114 * pci_cfg_space_size - get the configuration space size of the PCI device.
Randy Dunlap8f7020d2005-10-23 11:57:38 -07001115 * @dev: PCI device
Linus Torvalds1da177e2005-04-16 15:20:36 -07001116 *
1117 * Regular PCI devices have 256 bytes, but PCI-X 2 and PCI Express devices
1118 * have 4096 bytes. Even if the device is capable, that doesn't mean we can
1119 * access it. Maybe we don't have a way to generate extended config space
1120 * accesses, or the device is behind a reverse Express bridge. So we try
1121 * reading the dword at 0x100 which must either be 0 or a valid extended
1122 * capability header.
1123 */
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001124int pci_cfg_space_size_ext(struct pci_dev *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001125{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001126 u32 status;
Zhao, Yu557848c2008-10-13 19:18:07 +08001127 int pos = PCI_CFG_SPACE_SIZE;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001128
Zhao, Yu557848c2008-10-13 19:18:07 +08001129 if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001130 goto fail;
1131 if (status == 0xffffffff)
1132 goto fail;
1133
1134 return PCI_CFG_SPACE_EXP_SIZE;
1135
1136 fail:
1137 return PCI_CFG_SPACE_SIZE;
1138}
1139
Yinghai Lu57741a72008-02-15 01:32:50 -08001140int pci_cfg_space_size(struct pci_dev *dev)
1141{
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001142 int pos;
1143 u32 status;
Yinghai Ludfadd9ed2009-03-08 21:35:37 -07001144 u16 class;
1145
1146 class = dev->class >> 8;
1147 if (class == PCI_CLASS_BRIDGE_HOST)
1148 return pci_cfg_space_size_ext(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001149
Kenji Kaneshige06a1cba2009-11-11 14:30:56 +09001150 pos = pci_pcie_cap(dev);
Yinghai Lu70b9f7d2008-04-28 16:27:23 -07001151 if (!pos) {
1152 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1153 if (!pos)
1154 goto fail;
1155
1156 pci_read_config_dword(dev, pos + PCI_X_STATUS, &status);
1157 if (!(status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ)))
1158 goto fail;
1159 }
1160
1161 return pci_cfg_space_size_ext(dev);
1162
1163 fail:
1164 return PCI_CFG_SPACE_SIZE;
Yinghai Lu57741a72008-02-15 01:32:50 -08001165}
1166
Linus Torvalds1da177e2005-04-16 15:20:36 -07001167static void pci_release_bus_bridge_dev(struct device *dev)
1168{
Yinghai Lu7b543662012-04-02 18:31:53 -07001169 struct pci_host_bridge *bridge = to_pci_host_bridge(dev);
1170
Yinghai Lu4fa26492012-04-02 18:31:53 -07001171 if (bridge->release_fn)
1172 bridge->release_fn(bridge);
Yinghai Lu7b543662012-04-02 18:31:53 -07001173
1174 pci_free_resource_list(&bridge->windows);
1175
1176 kfree(bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001177}
1178
Michael Ellerman65891212007-04-05 17:19:08 +10001179struct pci_dev *alloc_pci_dev(void)
1180{
1181 struct pci_dev *dev;
1182
1183 dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL);
1184 if (!dev)
1185 return NULL;
1186
Michael Ellerman65891212007-04-05 17:19:08 +10001187 INIT_LIST_HEAD(&dev->bus_list);
1188
1189 return dev;
1190}
1191EXPORT_SYMBOL(alloc_pci_dev);
1192
Yinghai Luefdc87d2012-01-27 10:55:10 -08001193bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *l,
1194 int crs_timeout)
1195{
1196 int delay = 1;
1197
1198 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1199 return false;
1200
1201 /* some broken boards return 0 or ~0 if a slot is empty: */
1202 if (*l == 0xffffffff || *l == 0x00000000 ||
1203 *l == 0x0000ffff || *l == 0xffff0000)
1204 return false;
1205
1206 /* Configuration request Retry Status */
1207 while (*l == 0xffff0001) {
1208 if (!crs_timeout)
1209 return false;
1210
1211 msleep(delay);
1212 delay *= 2;
1213 if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
1214 return false;
1215 /* Card hasn't responded in 60 seconds? Must be stuck. */
1216 if (delay > crs_timeout) {
1217 printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
1218 "responding\n", pci_domain_nr(bus),
1219 bus->number, PCI_SLOT(devfn),
1220 PCI_FUNC(devfn));
1221 return false;
1222 }
1223 }
1224
1225 return true;
1226}
1227EXPORT_SYMBOL(pci_bus_read_dev_vendor_id);
1228
Linus Torvalds1da177e2005-04-16 15:20:36 -07001229/*
1230 * Read the config data for a PCI device, sanity-check it
1231 * and fill in the dev structure...
1232 */
Adrian Bunk7f7b5de2008-04-18 13:53:55 -07001233static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001234{
1235 struct pci_dev *dev;
1236 u32 l;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001237
Yinghai Luefdc87d2012-01-27 10:55:10 -08001238 if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000))
Linus Torvalds1da177e2005-04-16 15:20:36 -07001239 return NULL;
1240
Michael Ellermanbab41e92007-04-05 17:19:09 +10001241 dev = alloc_pci_dev();
Linus Torvalds1da177e2005-04-16 15:20:36 -07001242 if (!dev)
1243 return NULL;
1244
Linus Torvalds1da177e2005-04-16 15:20:36 -07001245 dev->bus = bus;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001246 dev->devfn = devfn;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001247 dev->vendor = l & 0xffff;
1248 dev->device = (l >> 16) & 0xffff;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001249
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001250 pci_set_of_node(dev);
1251
Yu Zhao480b93b2009-03-20 11:25:14 +08001252 if (pci_setup_device(dev)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001253 kfree(dev);
1254 return NULL;
1255 }
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001256
1257 return dev;
1258}
1259
Zhao, Yu201de562008-10-13 19:49:55 +08001260static void pci_init_capabilities(struct pci_dev *dev)
1261{
1262 /* MSI/MSI-X list */
1263 pci_msi_init_pci_dev(dev);
1264
Rafael J. Wysocki63f48982008-12-07 22:02:58 +01001265 /* Buffers for saving PCIe and PCI-X capabilities */
1266 pci_allocate_cap_save_buffers(dev);
1267
Zhao, Yu201de562008-10-13 19:49:55 +08001268 /* Power Management */
1269 pci_pm_init(dev);
Jesse Barneseb9c39d2008-12-17 12:10:05 -08001270 platform_pci_wakeup_init(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001271
1272 /* Vital Product Data */
1273 pci_vpd_pci22_init(dev);
Yu Zhao58c3a722008-10-14 14:02:53 +08001274
1275 /* Alternative Routing-ID Forwarding */
1276 pci_enable_ari(dev);
Yu Zhaod1b054d2009-03-20 11:25:11 +08001277
1278 /* Single Root I/O Virtualization */
1279 pci_iov_init(dev);
Allen Kayae21ee62009-10-07 10:27:17 -07001280
1281 /* Enable ACS P2P upstream forwarding */
Chris Wright5d990b62009-12-04 12:15:21 -08001282 pci_enable_acs(dev);
Zhao, Yu201de562008-10-13 19:49:55 +08001283}
1284
Sam Ravnborg96bde062007-03-26 21:53:30 -08001285void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001286{
Linus Torvalds1da177e2005-04-16 15:20:36 -07001287 device_initialize(&dev->dev);
1288 dev->dev.release = pci_release_dev;
1289 pci_dev_get(dev);
1290
Linus Torvalds1da177e2005-04-16 15:20:36 -07001291 dev->dev.dma_mask = &dev->dma_mask;
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001292 dev->dev.dma_parms = &dev->dma_parms;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001293 dev->dev.coherent_dma_mask = 0xffffffffull;
1294
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001295 pci_set_dma_max_seg_size(dev, 65536);
FUJITA Tomonori59fc67d2008-02-04 22:28:14 -08001296 pci_set_dma_seg_boundary(dev, 0xffffffff);
FUJITA Tomonori4d57cdf2008-02-04 22:27:55 -08001297
Linus Torvalds1da177e2005-04-16 15:20:36 -07001298 /* Fix up broken headers */
1299 pci_fixup_device(pci_fixup_header, dev);
1300
Yinghai Lu2069ecf2012-02-15 21:40:31 -08001301 /* moved out from quirk header fixup code */
1302 pci_reassigndev_resource_alignment(dev);
1303
Rafael J. Wysocki4b77b0a2009-09-09 23:49:59 +02001304 /* Clear the state_saved flag. */
1305 dev->state_saved = false;
1306
Zhao, Yu201de562008-10-13 19:49:55 +08001307 /* Initialize various capabilities */
1308 pci_init_capabilities(dev);
Rafael J. Wysockieb9d0fe2008-07-07 03:34:48 +02001309
Linus Torvalds1da177e2005-04-16 15:20:36 -07001310 /*
1311 * Add the device to our list of discovered devices
1312 * and the bus list for fixup functions, etc.
1313 */
Zhang Yanmind71374d2006-06-02 12:35:43 +08001314 down_write(&pci_bus_sem);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001315 list_add_tail(&dev->bus_list, &bus->devices);
Zhang Yanmind71374d2006-06-02 12:35:43 +08001316 up_write(&pci_bus_sem);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001317}
1318
Sam Ravnborg451124a2008-02-02 22:33:43 +01001319struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001320{
1321 struct pci_dev *dev;
1322
Trent Piepho90bdb312009-03-20 14:56:00 -06001323 dev = pci_get_slot(bus, devfn);
1324 if (dev) {
1325 pci_dev_put(dev);
1326 return dev;
1327 }
1328
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001329 dev = pci_scan_device(bus, devfn);
1330 if (!dev)
1331 return NULL;
1332
1333 pci_device_add(dev, bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001334
1335 return dev;
1336}
Adrian Bunkb73e9682007-11-21 15:07:11 -08001337EXPORT_SYMBOL(pci_scan_single_device);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001338
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001339static unsigned next_ari_fn(struct pci_dev *dev, unsigned fn)
1340{
1341 u16 cap;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001342 unsigned pos, next_fn;
1343
1344 if (!dev)
1345 return 0;
1346
1347 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001348 if (!pos)
1349 return 0;
1350 pci_read_config_word(dev, pos + 4, &cap);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001351 next_fn = cap >> 8;
1352 if (next_fn <= fn)
1353 return 0;
1354 return next_fn;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001355}
1356
1357static unsigned next_trad_fn(struct pci_dev *dev, unsigned fn)
1358{
1359 return (fn + 1) % 8;
1360}
1361
1362static unsigned no_next_fn(struct pci_dev *dev, unsigned fn)
1363{
1364 return 0;
1365}
1366
1367static int only_one_child(struct pci_bus *bus)
1368{
1369 struct pci_dev *parent = bus->self;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001370
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001371 if (!parent || !pci_is_pcie(parent))
1372 return 0;
Bjorn Helgaas284f5f92012-04-30 15:21:02 -06001373 if (parent->pcie_type == PCI_EXP_TYPE_ROOT_PORT)
1374 return 1;
1375 if (parent->pcie_type == PCI_EXP_TYPE_DOWNSTREAM &&
1376 !pci_has_flag(PCI_SCAN_ALL_PCIE_DEVS))
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001377 return 1;
1378 return 0;
1379}
1380
Linus Torvalds1da177e2005-04-16 15:20:36 -07001381/**
1382 * pci_scan_slot - scan a PCI slot on a bus for devices.
1383 * @bus: PCI bus to scan
1384 * @devfn: slot number to scan (must have zero function.)
1385 *
1386 * Scan a PCI slot on the specified PCI bus for devices, adding
1387 * discovered devices to the @bus->devices list. New devices
Greg Kroah-Hartman8a1bc902008-02-14 14:56:56 -08001388 * will not have is_added set.
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001389 *
1390 * Returns the number of new devices found.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001391 */
Sam Ravnborg96bde062007-03-26 21:53:30 -08001392int pci_scan_slot(struct pci_bus *bus, int devfn)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001393{
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001394 unsigned fn, nr = 0;
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001395 struct pci_dev *dev;
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001396 unsigned (*next_fn)(struct pci_dev *, unsigned) = no_next_fn;
1397
1398 if (only_one_child(bus) && (devfn > 0))
1399 return 0; /* Already scanned the entire slot */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001400
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001401 dev = pci_scan_single_device(bus, devfn);
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001402 if (!dev)
1403 return 0;
1404 if (!dev->is_added)
Trent Piepho1b69dfc2009-03-20 14:56:05 -06001405 nr++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001406
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001407 if (pci_ari_enabled(bus))
1408 next_fn = next_ari_fn;
Matthew Wilcox4fb88c12010-01-17 14:01:41 -07001409 else if (dev->multifunction)
Matthew Wilcoxf07852d2009-12-13 08:10:02 -05001410 next_fn = next_trad_fn;
1411
1412 for (fn = next_fn(dev, 0); fn > 0; fn = next_fn(dev, fn)) {
1413 dev = pci_scan_single_device(bus, devfn + fn);
1414 if (dev) {
1415 if (!dev->is_added)
1416 nr++;
1417 dev->multifunction = 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001418 }
1419 }
Shaohua Li7d715a62008-02-25 09:46:41 +08001420
Shaohua Li149e1632008-07-23 10:32:31 +08001421 /* only one slot has pcie device */
1422 if (bus->self && nr)
Shaohua Li7d715a62008-02-25 09:46:41 +08001423 pcie_aspm_init_link_state(bus->self);
1424
Linus Torvalds1da177e2005-04-16 15:20:36 -07001425 return nr;
1426}
1427
Jon Masonb03e7492011-07-20 15:20:54 -05001428static int pcie_find_smpss(struct pci_dev *dev, void *data)
1429{
1430 u8 *smpss = data;
1431
1432 if (!pci_is_pcie(dev))
1433 return 0;
1434
1435 /* For PCIE hotplug enabled slots not connected directly to a
1436 * PCI-E root port, there can be problems when hotplugging
1437 * devices. This is due to the possibility of hotplugging a
1438 * device into the fabric with a smaller MPS that the devices
1439 * currently running have configured. Modifying the MPS on the
1440 * running devices could cause a fatal bus error due to an
1441 * incoming frame being larger than the newly configured MPS.
1442 * To work around this, the MPS for the entire fabric must be
1443 * set to the minimum size. Any devices hotplugged into this
1444 * fabric will have the minimum MPS set. If the PCI hotplug
1445 * slot is directly connected to the root port and there are not
1446 * other devices on the fabric (which seems to be the most
1447 * common case), then this is not an issue and MPS discovery
1448 * will occur as normal.
1449 */
1450 if (dev->is_hotplug_bridge && (!list_is_singular(&dev->bus->devices) ||
Benjamin Herrenschmidt1a4b1a42011-09-13 15:16:33 -03001451 (dev->bus->self &&
1452 dev->bus->self->pcie_type != PCI_EXP_TYPE_ROOT_PORT)))
Jon Masonb03e7492011-07-20 15:20:54 -05001453 *smpss = 0;
1454
1455 if (*smpss > dev->pcie_mpss)
1456 *smpss = dev->pcie_mpss;
1457
1458 return 0;
1459}
1460
1461static void pcie_write_mps(struct pci_dev *dev, int mps)
1462{
Jon Mason62f392e2011-10-14 14:56:14 -05001463 int rc;
Jon Masonb03e7492011-07-20 15:20:54 -05001464
1465 if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
Jon Mason62f392e2011-10-14 14:56:14 -05001466 mps = 128 << dev->pcie_mpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001467
Jon Mason62f392e2011-10-14 14:56:14 -05001468 if (dev->pcie_type != PCI_EXP_TYPE_ROOT_PORT && dev->bus->self)
1469 /* For "Performance", the assumption is made that
Jon Masonb03e7492011-07-20 15:20:54 -05001470 * downstream communication will never be larger than
1471 * the MRRS. So, the MPS only needs to be configured
1472 * for the upstream communication. This being the case,
1473 * walk from the top down and set the MPS of the child
1474 * to that of the parent bus.
Jon Mason62f392e2011-10-14 14:56:14 -05001475 *
1476 * Configure the device MPS with the smaller of the
1477 * device MPSS or the bridge MPS (which is assumed to be
1478 * properly configured at this point to the largest
1479 * allowable MPS based on its parent bus).
Jon Masonb03e7492011-07-20 15:20:54 -05001480 */
Jon Mason62f392e2011-10-14 14:56:14 -05001481 mps = min(mps, pcie_get_mps(dev->bus->self));
Jon Masonb03e7492011-07-20 15:20:54 -05001482 }
1483
1484 rc = pcie_set_mps(dev, mps);
1485 if (rc)
1486 dev_err(&dev->dev, "Failed attempting to set the MPS\n");
1487}
1488
Jon Mason62f392e2011-10-14 14:56:14 -05001489static void pcie_write_mrrs(struct pci_dev *dev)
Jon Masonb03e7492011-07-20 15:20:54 -05001490{
Jon Mason62f392e2011-10-14 14:56:14 -05001491 int rc, mrrs;
Jon Masonb03e7492011-07-20 15:20:54 -05001492
Jon Masoned2888e2011-09-08 16:41:18 -05001493 /* In the "safe" case, do not configure the MRRS. There appear to be
1494 * issues with setting MRRS to 0 on a number of devices.
1495 */
Jon Masoned2888e2011-09-08 16:41:18 -05001496 if (pcie_bus_config != PCIE_BUS_PERFORMANCE)
1497 return;
Jon Masonb03e7492011-07-20 15:20:54 -05001498
Jon Masoned2888e2011-09-08 16:41:18 -05001499 /* For Max performance, the MRRS must be set to the largest supported
1500 * value. However, it cannot be configured larger than the MPS the
Jon Mason62f392e2011-10-14 14:56:14 -05001501 * device or the bus can support. This should already be properly
1502 * configured by a prior call to pcie_write_mps.
Jon Masoned2888e2011-09-08 16:41:18 -05001503 */
Jon Mason62f392e2011-10-14 14:56:14 -05001504 mrrs = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001505
1506 /* MRRS is a R/W register. Invalid values can be written, but a
Jon Masoned2888e2011-09-08 16:41:18 -05001507 * subsequent read will verify if the value is acceptable or not.
Jon Masonb03e7492011-07-20 15:20:54 -05001508 * If the MRRS value provided is not acceptable (e.g., too large),
1509 * shrink the value until it is acceptable to the HW.
1510 */
1511 while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
1512 rc = pcie_set_readrq(dev, mrrs);
Jon Mason62f392e2011-10-14 14:56:14 -05001513 if (!rc)
1514 break;
Jon Masonb03e7492011-07-20 15:20:54 -05001515
Jon Mason62f392e2011-10-14 14:56:14 -05001516 dev_warn(&dev->dev, "Failed attempting to set the MRRS\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001517 mrrs /= 2;
1518 }
Jon Mason62f392e2011-10-14 14:56:14 -05001519
1520 if (mrrs < 128)
1521 dev_err(&dev->dev, "MRRS was unable to be configured with a "
1522 "safe value. If problems are experienced, try running "
1523 "with pci=pcie_bus_safe.\n");
Jon Masonb03e7492011-07-20 15:20:54 -05001524}
1525
1526static int pcie_bus_configure_set(struct pci_dev *dev, void *data)
1527{
Jon Masona513a992011-10-14 14:56:16 -05001528 int mps, orig_mps;
Jon Masonb03e7492011-07-20 15:20:54 -05001529
1530 if (!pci_is_pcie(dev))
1531 return 0;
1532
Jon Masona513a992011-10-14 14:56:16 -05001533 mps = 128 << *(u8 *)data;
1534 orig_mps = pcie_get_mps(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001535
1536 pcie_write_mps(dev, mps);
Jon Mason62f392e2011-10-14 14:56:14 -05001537 pcie_write_mrrs(dev);
Jon Masonb03e7492011-07-20 15:20:54 -05001538
Jon Masona513a992011-10-14 14:56:16 -05001539 dev_info(&dev->dev, "PCI-E Max Payload Size set to %4d/%4d (was %4d), "
1540 "Max Read Rq %4d\n", pcie_get_mps(dev), 128 << dev->pcie_mpss,
1541 orig_mps, pcie_get_readrq(dev));
Jon Masonb03e7492011-07-20 15:20:54 -05001542
1543 return 0;
1544}
1545
Jon Masona513a992011-10-14 14:56:16 -05001546/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down,
Jon Masonb03e7492011-07-20 15:20:54 -05001547 * parents then children fashion. If this changes, then this code will not
1548 * work as designed.
1549 */
1550void pcie_bus_configure_settings(struct pci_bus *bus, u8 mpss)
1551{
Jon Mason5f39e672011-10-03 09:50:20 -05001552 u8 smpss;
Jon Masonb03e7492011-07-20 15:20:54 -05001553
Jon Masonb03e7492011-07-20 15:20:54 -05001554 if (!pci_is_pcie(bus->self))
1555 return;
1556
Jon Mason5f39e672011-10-03 09:50:20 -05001557 if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
1558 return;
1559
1560 /* FIXME - Peer to peer DMA is possible, though the endpoint would need
1561 * to be aware to the MPS of the destination. To work around this,
1562 * simply force the MPS of the entire system to the smallest possible.
1563 */
1564 if (pcie_bus_config == PCIE_BUS_PEER2PEER)
1565 smpss = 0;
1566
Jon Masonb03e7492011-07-20 15:20:54 -05001567 if (pcie_bus_config == PCIE_BUS_SAFE) {
Jon Mason5f39e672011-10-03 09:50:20 -05001568 smpss = mpss;
1569
Jon Masonb03e7492011-07-20 15:20:54 -05001570 pcie_find_smpss(bus->self, &smpss);
1571 pci_walk_bus(bus, pcie_find_smpss, &smpss);
1572 }
1573
1574 pcie_bus_configure_set(bus->self, &smpss);
1575 pci_walk_bus(bus, pcie_bus_configure_set, &smpss);
1576}
Jon Masondebc3b72011-08-02 00:01:18 -05001577EXPORT_SYMBOL_GPL(pcie_bus_configure_settings);
Jon Masonb03e7492011-07-20 15:20:54 -05001578
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001579unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001580{
Yinghai Lub918c622012-05-17 18:51:11 -07001581 unsigned int devfn, pass, max = bus->busn_res.start;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001582 struct pci_dev *dev;
1583
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001584 dev_dbg(&bus->dev, "scanning bus\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001585
1586 /* Go find them, Rover! */
1587 for (devfn = 0; devfn < 0x100; devfn += 8)
1588 pci_scan_slot(bus, devfn);
1589
Yu Zhaoa28724b2009-03-20 11:25:13 +08001590 /* Reserve buses for SR-IOV capability. */
1591 max += pci_iov_bus_range(bus);
1592
Linus Torvalds1da177e2005-04-16 15:20:36 -07001593 /*
1594 * After performing arch-dependent fixup of the bus, look behind
1595 * all PCI-to-PCI bridges on this bus.
1596 */
Alex Chiang74710de2009-03-20 14:56:10 -06001597 if (!bus->is_added) {
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001598 dev_dbg(&bus->dev, "fixups for bus\n");
Alex Chiang74710de2009-03-20 14:56:10 -06001599 pcibios_fixup_bus(bus);
1600 if (pci_is_root_bus(bus))
1601 bus->is_added = 1;
1602 }
1603
Linus Torvalds1da177e2005-04-16 15:20:36 -07001604 for (pass=0; pass < 2; pass++)
1605 list_for_each_entry(dev, &bus->devices, bus_list) {
1606 if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
1607 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
1608 max = pci_scan_bridge(bus, dev, max, pass);
1609 }
1610
1611 /*
1612 * We've scanned the bus and so we know all about what's on
1613 * the other side of any bridges that may be on this bus plus
1614 * any devices.
1615 *
1616 * Return how far we've got finding sub-buses.
1617 */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001618 dev_dbg(&bus->dev, "bus scan returning with max=%02x\n", max);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001619 return max;
1620}
1621
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001622struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
1623 struct pci_ops *ops, void *sysdata, struct list_head *resources)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001624{
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001625 int error;
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001626 struct pci_host_bridge *bridge;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001627 struct pci_bus *b, *b2;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001628 struct pci_host_bridge_window *window, *n;
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001629 struct resource *res;
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001630 resource_size_t offset;
1631 char bus_addr[64];
1632 char *fmt;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001633
Linus Torvalds1da177e2005-04-16 15:20:36 -07001634
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001635 b = pci_alloc_bus();
1636 if (!b)
Yinghai Lu7b543662012-04-02 18:31:53 -07001637 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001638
1639 b->sysdata = sysdata;
1640 b->ops = ops;
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001641 b2 = pci_find_bus(pci_domain_nr(b), bus);
1642 if (b2) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001643 /* If we already got to this bus through a different bridge, ignore it */
Bjorn Helgaas0207c352009-11-04 10:32:52 -07001644 dev_dbg(&b2->dev, "bus already known\n");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001645 goto err_out;
1646 }
Zhang Yanmind71374d2006-06-02 12:35:43 +08001647
Yinghai Lu7b543662012-04-02 18:31:53 -07001648 bridge = pci_alloc_host_bridge(b);
1649 if (!bridge)
1650 goto err_out;
1651
1652 bridge->dev.parent = parent;
1653 bridge->dev.release = pci_release_bus_bridge_dev;
1654 dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus);
1655 error = device_register(&bridge->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001656 if (error)
Yinghai Lu7b543662012-04-02 18:31:53 -07001657 goto bridge_dev_reg_err;
1658 b->bridge = get_device(&bridge->dev);
Rafael J. Wysockia1e4d722010-02-08 19:16:33 +01001659 device_enable_async_suspend(b->bridge);
Benjamin Herrenschmidt98d9f30c82011-04-11 11:37:07 +10001660 pci_set_bus_of_node(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001661
Yinghai Lu0d358f22008-02-19 03:20:41 -08001662 if (!parent)
1663 set_dev_node(b->bridge, pcibus_to_node(b));
1664
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001665 b->dev.class = &pcibus_class;
1666 b->dev.parent = b->bridge;
Kay Sievers1a927132008-10-30 02:17:49 +01001667 dev_set_name(&b->dev, "%04x:%02x", pci_domain_nr(b), bus);
Greg Kroah-Hartmanfd7d1ce2007-05-22 22:47:54 -04001668 error = device_register(&b->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001669 if (error)
1670 goto class_dev_reg_err;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001671
1672 /* Create legacy_io and legacy_mem files for this bus */
1673 pci_create_legacy_files(b);
1674
Yinghai Lub918c622012-05-17 18:51:11 -07001675 b->number = b->busn_res.start = bus;
Bjorn Helgaas166c6372011-10-28 16:25:45 -06001676
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001677 if (parent)
1678 dev_info(parent, "PCI host bridge to bus %s\n", dev_name(&b->dev));
1679 else
1680 printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev));
1681
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001682 /* Add initial resources to the bus */
1683 list_for_each_entry_safe(window, n, resources, list) {
1684 list_move_tail(&window->list, &bridge->windows);
1685 res = window->res;
1686 offset = window->offset;
Yinghai Luf848ffb2012-05-17 18:51:12 -07001687 if (res->flags & IORESOURCE_BUS)
1688 pci_bus_insert_busn_res(b, bus, res->end);
1689 else
1690 pci_bus_add_resource(b, res, 0);
Bjorn Helgaas0efd5aa2012-02-23 20:19:00 -07001691 if (offset) {
1692 if (resource_type(res) == IORESOURCE_IO)
1693 fmt = " (bus address [%#06llx-%#06llx])";
1694 else
1695 fmt = " (bus address [%#010llx-%#010llx])";
1696 snprintf(bus_addr, sizeof(bus_addr), fmt,
1697 (unsigned long long) (res->start - offset),
1698 (unsigned long long) (res->end - offset));
1699 } else
1700 bus_addr[0] = '\0';
1701 dev_info(&b->dev, "root bus resource %pR%s\n", res, bus_addr);
Bjorn Helgaasa9d9f522011-10-28 16:25:40 -06001702 }
1703
Bjorn Helgaasa5390aa2012-02-23 20:18:59 -07001704 down_write(&pci_bus_sem);
1705 list_add_tail(&b->node, &pci_root_buses);
1706 up_write(&pci_bus_sem);
1707
Linus Torvalds1da177e2005-04-16 15:20:36 -07001708 return b;
1709
Linus Torvalds1da177e2005-04-16 15:20:36 -07001710class_dev_reg_err:
Yinghai Lu7b543662012-04-02 18:31:53 -07001711 put_device(&bridge->dev);
1712 device_unregister(&bridge->dev);
1713bridge_dev_reg_err:
Bjorn Helgaas5a21d702012-02-23 20:18:59 -07001714 kfree(bridge);
Yinghai Lu7b543662012-04-02 18:31:53 -07001715err_out:
1716 kfree(b);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001717 return NULL;
1718}
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001719
Yinghai Lu98a35832012-05-18 11:35:50 -06001720int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int bus_max)
1721{
1722 struct resource *res = &b->busn_res;
1723 struct resource *parent_res, *conflict;
1724
1725 res->start = bus;
1726 res->end = bus_max;
1727 res->flags = IORESOURCE_BUS;
1728
1729 if (!pci_is_root_bus(b))
1730 parent_res = &b->parent->busn_res;
1731 else {
1732 parent_res = get_pci_domain_busn_res(pci_domain_nr(b));
1733 res->flags |= IORESOURCE_PCI_FIXED;
1734 }
1735
1736 conflict = insert_resource_conflict(parent_res, res);
1737
1738 if (conflict)
1739 dev_printk(KERN_DEBUG, &b->dev,
1740 "busn_res: can not insert %pR under %s%pR (conflicts with %s %pR)\n",
1741 res, pci_is_root_bus(b) ? "domain " : "",
1742 parent_res, conflict->name, conflict);
1743 else
1744 dev_printk(KERN_DEBUG, &b->dev,
1745 "busn_res: %pR is inserted under %s%pR\n",
1746 res, pci_is_root_bus(b) ? "domain " : "",
1747 parent_res);
1748
1749 return conflict == NULL;
1750}
1751
1752int pci_bus_update_busn_res_end(struct pci_bus *b, int bus_max)
1753{
1754 struct resource *res = &b->busn_res;
1755 struct resource old_res = *res;
1756 resource_size_t size;
1757 int ret;
1758
1759 if (res->start > bus_max)
1760 return -EINVAL;
1761
1762 size = bus_max - res->start + 1;
1763 ret = adjust_resource(res, res->start, size);
1764 dev_printk(KERN_DEBUG, &b->dev,
1765 "busn_res: %pR end %s updated to %02x\n",
1766 &old_res, ret ? "can not be" : "is", bus_max);
1767
1768 if (!ret && !res->parent)
1769 pci_bus_insert_busn_res(b, res->start, res->end);
1770
1771 return ret;
1772}
1773
1774void pci_bus_release_busn_res(struct pci_bus *b)
1775{
1776 struct resource *res = &b->busn_res;
1777 int ret;
1778
1779 if (!res->flags || !res->parent)
1780 return;
1781
1782 ret = release_resource(res);
1783 dev_printk(KERN_DEBUG, &b->dev,
1784 "busn_res: %pR %s released\n",
1785 res, ret ? "can not be" : "is");
1786}
1787
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001788struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
1789 struct pci_ops *ops, void *sysdata, struct list_head *resources)
1790{
Yinghai Lu4d99f522012-05-17 18:51:12 -07001791 struct pci_host_bridge_window *window;
1792 bool found = false;
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001793 struct pci_bus *b;
Yinghai Lu4d99f522012-05-17 18:51:12 -07001794 int max;
1795
1796 list_for_each_entry(window, resources, list)
1797 if (window->res->flags & IORESOURCE_BUS) {
1798 found = true;
1799 break;
1800 }
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001801
1802 b = pci_create_root_bus(parent, bus, ops, sysdata, resources);
1803 if (!b)
1804 return NULL;
1805
Yinghai Lu4d99f522012-05-17 18:51:12 -07001806 if (!found) {
1807 dev_info(&b->dev,
1808 "No busn resource found for root bus, will use [bus %02x-ff]\n",
1809 bus);
1810 pci_bus_insert_busn_res(b, bus, 255);
1811 }
1812
1813 max = pci_scan_child_bus(b);
1814
1815 if (!found)
1816 pci_bus_update_busn_res_end(b, max);
1817
Bjorn Helgaasa2ebb822011-10-28 16:25:50 -06001818 pci_bus_add_devices(b);
1819 return b;
1820}
1821EXPORT_SYMBOL(pci_scan_root_bus);
1822
Bjorn Helgaas7e00fe22011-10-28 16:26:05 -06001823/* Deprecated; use pci_scan_root_bus() instead */
Sam Ravnborg0ab2b572008-02-17 10:45:28 +01001824struct pci_bus * __devinit pci_scan_bus_parented(struct device *parent,
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001825 int bus, struct pci_ops *ops, void *sysdata)
1826{
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001827 LIST_HEAD(resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001828 struct pci_bus *b;
1829
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001830 pci_add_resource(&resources, &ioport_resource);
1831 pci_add_resource(&resources, &iomem_resource);
1832 b = pci_create_root_bus(parent, bus, ops, sysdata, &resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001833 if (b)
Yinghai Lub918c622012-05-17 18:51:11 -07001834 b->busn_res.end = pci_scan_child_bus(b);
Bjorn Helgaas1e39ae92011-10-28 16:26:00 -06001835 else
1836 pci_free_resource_list(&resources);
Paul Mackerrascdb9b9f2005-09-06 09:31:03 +10001837 return b;
1838}
Linus Torvalds1da177e2005-04-16 15:20:36 -07001839EXPORT_SYMBOL(pci_scan_bus_parented);
1840
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001841struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
1842 void *sysdata)
1843{
1844 LIST_HEAD(resources);
1845 struct pci_bus *b;
1846
1847 pci_add_resource(&resources, &ioport_resource);
1848 pci_add_resource(&resources, &iomem_resource);
1849 b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources);
1850 if (b) {
Yinghai Lub918c622012-05-17 18:51:11 -07001851 b->busn_res.end = pci_scan_child_bus(b);
Bjorn Helgaasde4b2f72011-10-28 16:25:55 -06001852 pci_bus_add_devices(b);
1853 } else {
1854 pci_free_resource_list(&resources);
1855 }
1856 return b;
1857}
1858EXPORT_SYMBOL(pci_scan_bus);
1859
Linus Torvalds1da177e2005-04-16 15:20:36 -07001860#ifdef CONFIG_HOTPLUG
Alex Chiang3ed4fd92009-03-20 14:56:25 -06001861/**
Yinghai Lu2f320522012-01-21 02:08:22 -08001862 * pci_rescan_bus_bridge_resize - scan a PCI bus for devices.
1863 * @bridge: PCI bridge for the bus to scan
1864 *
1865 * Scan a PCI bus and child buses for new devices, add them,
1866 * and enable them, resizing bridge mmio/io resource if necessary
1867 * and possible. The caller must ensure the child devices are already
1868 * removed for resizing to occur.
1869 *
1870 * Returns the max number of subordinate bus discovered.
1871 */
1872unsigned int __ref pci_rescan_bus_bridge_resize(struct pci_dev *bridge)
1873{
1874 unsigned int max;
1875 struct pci_bus *bus = bridge->subordinate;
1876
1877 max = pci_scan_child_bus(bus);
1878
1879 pci_assign_unassigned_bridge_resources(bridge);
1880
1881 pci_bus_add_devices(bus);
1882
1883 return max;
1884}
1885
Linus Torvalds1da177e2005-04-16 15:20:36 -07001886EXPORT_SYMBOL(pci_add_new_bus);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001887EXPORT_SYMBOL(pci_scan_slot);
1888EXPORT_SYMBOL(pci_scan_bridge);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001889EXPORT_SYMBOL_GPL(pci_scan_child_bus);
1890#endif
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001891
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001892static int __init pci_sort_bf_cmp(const struct device *d_a, const struct device *d_b)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001893{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001894 const struct pci_dev *a = to_pci_dev(d_a);
1895 const struct pci_dev *b = to_pci_dev(d_b);
1896
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001897 if (pci_domain_nr(a->bus) < pci_domain_nr(b->bus)) return -1;
1898 else if (pci_domain_nr(a->bus) > pci_domain_nr(b->bus)) return 1;
1899
1900 if (a->bus->number < b->bus->number) return -1;
1901 else if (a->bus->number > b->bus->number) return 1;
1902
1903 if (a->devfn < b->devfn) return -1;
1904 else if (a->devfn > b->devfn) return 1;
1905
1906 return 0;
1907}
1908
Greg Kroah-Hartman5ff580c2008-02-14 14:56:56 -08001909void __init pci_sort_breadthfirst(void)
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001910{
Greg Kroah-Hartman99178b02008-08-26 11:00:57 -05001911 bus_sort_breadthfirst(&pci_bus_type, &pci_sort_bf_cmp);
Matt Domsch6b4b78f2006-09-29 15:23:23 -05001912}