- Update Xen patches to 3.3-rc5 and c/s 1157.
[linux-flexiantxendom0-3.2.10.git] / drivers / pci / setup-bus.c
1 /*
2  *      drivers/pci/setup-bus.c
3  *
4  * Extruded from code written by
5  *      Dave Rusling (david.rusling@reo.mts.dec.com)
6  *      David Mosberger (davidm@cs.arizona.edu)
7  *      David Miller (davem@redhat.com)
8  *
9  * Support routines for initializing a PCI subsystem.
10  */
11
12 /*
13  * Nov 2000, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
14  *           PCI-PCI bridges cleanup, sorted resource allocation.
15  * Feb 2002, Ivan Kokshaysky <ink@jurassic.park.msu.ru>
16  *           Converted to allocation in 3 passes, which gives
17  *           tighter packing. Prefetchable range support.
18  */
19
20 #include <linux/init.h>
21 #include <linux/kernel.h>
22 #include <linux/module.h>
23 #include <linux/pci.h>
24 #include <linux/errno.h>
25 #include <linux/ioport.h>
26 #include <linux/cache.h>
27 #include <linux/slab.h>
28 #include "pci.h"
29
30 struct resource_list_x {
31         struct resource_list_x *next;
32         struct resource *res;
33         struct pci_dev *dev;
34         resource_size_t start;
35         resource_size_t end;
36         resource_size_t add_size;
37         resource_size_t min_align;
38         unsigned long flags;
39 };
40
41 #define free_list(type, head) do {                      \
42         struct type *list, *tmp;                        \
43         for (list = (head)->next; list;) {              \
44                 tmp = list;                             \
45                 list = list->next;                      \
46                 kfree(tmp);                             \
47         }                                               \
48         (head)->next = NULL;                            \
49 } while (0)
50
51 int pci_realloc_enable = 0;
52 #define pci_realloc_enabled() pci_realloc_enable
53 void pci_realloc(void)
54 {
55         pci_realloc_enable = 1;
56 }
57
58 /**
59  * add_to_list() - add a new resource tracker to the list
60  * @head:       Head of the list
61  * @dev:        device corresponding to which the resource
62  *              belongs
63  * @res:        The resource to be tracked
64  * @add_size:   additional size to be optionally added
65  *              to the resource
66  */
67 static void add_to_list(struct resource_list_x *head,
68                  struct pci_dev *dev, struct resource *res,
69                  resource_size_t add_size, resource_size_t min_align)
70 {
71         struct resource_list_x *list = head;
72         struct resource_list_x *ln = list->next;
73         struct resource_list_x *tmp;
74
75         tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
76         if (!tmp) {
77                 pr_warning("add_to_list: kmalloc() failed!\n");
78                 return;
79         }
80
81         tmp->next = ln;
82         tmp->res = res;
83         tmp->dev = dev;
84         tmp->start = res->start;
85         tmp->end = res->end;
86         tmp->flags = res->flags;
87         tmp->add_size = add_size;
88         tmp->min_align = min_align;
89         list->next = tmp;
90 }
91
92 static void add_to_failed_list(struct resource_list_x *head,
93                                 struct pci_dev *dev, struct resource *res)
94 {
95         add_to_list(head, dev, res,
96                         0 /* dont care */,
97                         0 /* dont care */);
98 }
99
100 static void __dev_sort_resources(struct pci_dev *dev,
101                                  struct resource_list *head)
102 {
103         u16 class = dev->class >> 8;
104
105         /* Don't touch classless devices or host bridges or ioapics.  */
106         if (class == PCI_CLASS_NOT_DEFINED || class == PCI_CLASS_BRIDGE_HOST)
107                 return;
108
109         /* Don't touch ioapic devices already enabled by firmware */
110         if (class == PCI_CLASS_SYSTEM_PIC) {
111                 u16 command;
112                 pci_read_config_word(dev, PCI_COMMAND, &command);
113                 if (command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))
114                         return;
115         }
116
117         pdev_sort_resources(dev, head);
118 }
119
120 static inline void reset_resource(struct resource *res)
121 {
122         res->start = 0;
123         res->end = 0;
124         res->flags = 0;
125 }
126
127 /**
128  * reassign_resources_sorted() - satisfy any additional resource requests
129  *
130  * @realloc_head : head of the list tracking requests requiring additional
131  *             resources
132  * @head     : head of the list tracking requests with allocated
133  *             resources
134  *
135  * Walk through each element of the realloc_head and try to procure
136  * additional resources for the element, provided the element
137  * is in the head list.
138  */
139 static void reassign_resources_sorted(struct resource_list_x *realloc_head,
140                 struct resource_list *head)
141 {
142         struct resource *res;
143         struct resource_list_x *list, *tmp, *prev;
144         struct resource_list *hlist;
145         resource_size_t add_size;
146         int idx;
147
148         prev = realloc_head;
149         for (list = realloc_head->next; list;) {
150                 res = list->res;
151                 /* skip resource that has been reset */
152                 if (!res->flags)
153                         goto out;
154
155                 /* skip this resource if not found in head list */
156                 for (hlist = head->next; hlist && hlist->res != res;
157                                 hlist = hlist->next);
158                 if (!hlist) { /* just skip */
159                         prev = list;
160                         list = list->next;
161                         continue;
162                 }
163
164                 idx = res - &list->dev->resource[0];
165                 add_size=list->add_size;
166                 if (!resource_size(res)) {
167                         res->start = list->start;
168                         res->end = res->start + add_size - 1;
169                         if(pci_assign_resource(list->dev, idx))
170                                 reset_resource(res);
171                 } else {
172                         resource_size_t align = list->min_align;
173                         res->flags |= list->flags & (IORESOURCE_STARTALIGN|IORESOURCE_SIZEALIGN);
174                         if (pci_reassign_resource(list->dev, idx, add_size, align))
175                                 dev_printk(KERN_DEBUG, &list->dev->dev, "failed to add optional resources res=%pR\n",
176                                                         res);
177                 }
178 out:
179                 tmp = list;
180                 prev->next = list = list->next;
181                 kfree(tmp);
182         }
183 }
184
185 /**
186  * assign_requested_resources_sorted() - satisfy resource requests
187  *
188  * @head : head of the list tracking requests for resources
189  * @failed_list : head of the list tracking requests that could
190  *              not be allocated
191  *
192  * Satisfy resource requests of each element in the list. Add
193  * requests that could not satisfied to the failed_list.
194  */
195 static void assign_requested_resources_sorted(struct resource_list *head,
196                                  struct resource_list_x *fail_head)
197 {
198         struct resource *res;
199         struct resource_list *list;
200         int idx;
201
202         for (list = head->next; list; list = list->next) {
203                 res = list->res;
204                 idx = res - &list->dev->resource[0];
205                 if (resource_size(res) && pci_assign_resource(list->dev, idx)) {
206                         if (fail_head && !pci_is_root_bus(list->dev->bus)) {
207                                 /*
208                                  * if the failed res is for ROM BAR, and it will
209                                  * be enabled later, don't add it to the list
210                                  */
211                                 if (!((idx == PCI_ROM_RESOURCE) &&
212                                       (!(res->flags & IORESOURCE_ROM_ENABLE))))
213                                         add_to_failed_list(fail_head, list->dev, res);
214                         }
215                         reset_resource(res);
216                 }
217         }
218 }
219
220 static void __assign_resources_sorted(struct resource_list *head,
221                                  struct resource_list_x *realloc_head,
222                                  struct resource_list_x *fail_head)
223 {
224         /* Satisfy the must-have resource requests */
225         assign_requested_resources_sorted(head, fail_head);
226
227         /* Try to satisfy any additional optional resource
228                 requests */
229         if (realloc_head)
230                 reassign_resources_sorted(realloc_head, head);
231         free_list(resource_list, head);
232 }
233
234 static void pdev_assign_resources_sorted(struct pci_dev *dev,
235                                  struct resource_list_x *fail_head)
236 {
237         struct resource_list head;
238
239         head.next = NULL;
240         __dev_sort_resources(dev, &head);
241         __assign_resources_sorted(&head, NULL, fail_head);
242
243 }
244
245 static void pbus_assign_resources_sorted(const struct pci_bus *bus,
246                                          struct resource_list_x *realloc_head,
247                                          struct resource_list_x *fail_head)
248 {
249         struct pci_dev *dev;
250         struct resource_list head;
251
252         head.next = NULL;
253         list_for_each_entry(dev, &bus->devices, bus_list)
254                 __dev_sort_resources(dev, &head);
255
256         __assign_resources_sorted(&head, realloc_head, fail_head);
257 }
258
259 void pci_setup_cardbus(struct pci_bus *bus)
260 {
261         struct pci_dev *bridge = bus->self;
262         struct resource *res;
263         struct pci_bus_region region;
264
265         dev_info(&bridge->dev, "CardBus bridge to [bus %02x-%02x]\n",
266                  bus->secondary, bus->subordinate);
267
268         res = bus->resource[0];
269         pcibios_resource_to_bus(bridge, &region, res);
270         if (res->flags & IORESOURCE_IO) {
271                 /*
272                  * The IO resource is allocated a range twice as large as it
273                  * would normally need.  This allows us to set both IO regs.
274                  */
275                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
276                 pci_write_config_dword(bridge, PCI_CB_IO_BASE_0,
277                                         region.start);
278                 pci_write_config_dword(bridge, PCI_CB_IO_LIMIT_0,
279                                         region.end);
280         }
281
282         res = bus->resource[1];
283         pcibios_resource_to_bus(bridge, &region, res);
284         if (res->flags & IORESOURCE_IO) {
285                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
286                 pci_write_config_dword(bridge, PCI_CB_IO_BASE_1,
287                                         region.start);
288                 pci_write_config_dword(bridge, PCI_CB_IO_LIMIT_1,
289                                         region.end);
290         }
291
292         res = bus->resource[2];
293         pcibios_resource_to_bus(bridge, &region, res);
294         if (res->flags & IORESOURCE_MEM) {
295                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
296                 pci_write_config_dword(bridge, PCI_CB_MEMORY_BASE_0,
297                                         region.start);
298                 pci_write_config_dword(bridge, PCI_CB_MEMORY_LIMIT_0,
299                                         region.end);
300         }
301
302         res = bus->resource[3];
303         pcibios_resource_to_bus(bridge, &region, res);
304         if (res->flags & IORESOURCE_MEM) {
305                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
306                 pci_write_config_dword(bridge, PCI_CB_MEMORY_BASE_1,
307                                         region.start);
308                 pci_write_config_dword(bridge, PCI_CB_MEMORY_LIMIT_1,
309                                         region.end);
310         }
311 }
312 EXPORT_SYMBOL(pci_setup_cardbus);
313
314 /* Initialize bridges with base/limit values we have collected.
315    PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
316    requires that if there is no I/O ports or memory behind the
317    bridge, corresponding range must be turned off by writing base
318    value greater than limit to the bridge's base/limit registers.
319
320    Note: care must be taken when updating I/O base/limit registers
321    of bridges which support 32-bit I/O. This update requires two
322    config space writes, so it's quite possible that an I/O window of
323    the bridge will have some undesirable address (e.g. 0) after the
324    first write. Ditto 64-bit prefetchable MMIO.  */
325 static void pci_setup_bridge_io(struct pci_bus *bus)
326 {
327         struct pci_dev *bridge = bus->self;
328         struct resource *res;
329         struct pci_bus_region region;
330         u32 l, io_upper16;
331
332         /* Set up the top and bottom of the PCI I/O segment for this bus. */
333         res = bus->resource[0];
334         pcibios_resource_to_bus(bridge, &region, res);
335         if (res->flags & IORESOURCE_IO) {
336                 pci_read_config_dword(bridge, PCI_IO_BASE, &l);
337                 l &= 0xffff0000;
338                 l |= (region.start >> 8) & 0x00f0;
339                 l |= region.end & 0xf000;
340                 /* Set up upper 16 bits of I/O base/limit. */
341                 io_upper16 = (region.end & 0xffff0000) | (region.start >> 16);
342                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
343         } else {
344                 /* Clear upper 16 bits of I/O base/limit. */
345                 io_upper16 = 0;
346                 l = 0x00f0;
347         }
348         /* Temporarily disable the I/O range before updating PCI_IO_BASE. */
349         pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0x0000ffff);
350         /* Update lower 16 bits of I/O base/limit. */
351         pci_write_config_dword(bridge, PCI_IO_BASE, l);
352         /* Update upper 16 bits of I/O base/limit. */
353         pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, io_upper16);
354 }
355
356 static void pci_setup_bridge_mmio(struct pci_bus *bus)
357 {
358         struct pci_dev *bridge = bus->self;
359         struct resource *res;
360         struct pci_bus_region region;
361         u32 l;
362
363         /* Set up the top and bottom of the PCI Memory segment for this bus. */
364         res = bus->resource[1];
365         pcibios_resource_to_bus(bridge, &region, res);
366         if (res->flags & IORESOURCE_MEM) {
367                 l = (region.start >> 16) & 0xfff0;
368                 l |= region.end & 0xfff00000;
369                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
370         } else {
371                 l = 0x0000fff0;
372         }
373         pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
374 }
375
376 static void pci_setup_bridge_mmio_pref(struct pci_bus *bus)
377 {
378         struct pci_dev *bridge = bus->self;
379         struct resource *res;
380         struct pci_bus_region region;
381         u32 l, bu, lu;
382
383         /* Clear out the upper 32 bits of PREF limit.
384            If PCI_PREF_BASE_UPPER32 was non-zero, this temporarily
385            disables PREF range, which is ok. */
386         pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);
387
388         /* Set up PREF base/limit. */
389         bu = lu = 0;
390         res = bus->resource[2];
391         pcibios_resource_to_bus(bridge, &region, res);
392         if (res->flags & IORESOURCE_PREFETCH) {
393                 l = (region.start >> 16) & 0xfff0;
394                 l |= region.end & 0xfff00000;
395                 if (res->flags & IORESOURCE_MEM_64) {
396                         bu = upper_32_bits(region.start);
397                         lu = upper_32_bits(region.end);
398                 }
399                 dev_info(&bridge->dev, "  bridge window %pR\n", res);
400         } else {
401                 l = 0x0000fff0;
402         }
403         pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
404
405         /* Set the upper 32 bits of PREF base & limit. */
406         pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, bu);
407         pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, lu);
408 }
409
410 static void __pci_setup_bridge(struct pci_bus *bus, unsigned long type)
411 {
412         struct pci_dev *bridge = bus->self;
413
414         dev_info(&bridge->dev, "PCI bridge to [bus %02x-%02x]\n",
415                  bus->secondary, bus->subordinate);
416
417         if (type & IORESOURCE_IO)
418                 pci_setup_bridge_io(bus);
419
420         if (type & IORESOURCE_MEM)
421                 pci_setup_bridge_mmio(bus);
422
423         if (type & IORESOURCE_PREFETCH)
424                 pci_setup_bridge_mmio_pref(bus);
425
426         pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl);
427 }
428
429 void pci_setup_bridge(struct pci_bus *bus)
430 {
431         unsigned long type = IORESOURCE_IO | IORESOURCE_MEM |
432                                   IORESOURCE_PREFETCH;
433
434         __pci_setup_bridge(bus, type);
435 }
436
437 /* Check whether the bridge supports optional I/O and
438    prefetchable memory ranges. If not, the respective
439    base/limit registers must be read-only and read as 0. */
440 static void pci_bridge_check_ranges(struct pci_bus *bus)
441 {
442         u16 io;
443         u32 pmem;
444         struct pci_dev *bridge = bus->self;
445         struct resource *b_res;
446
447         b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
448         b_res[1].flags |= IORESOURCE_MEM;
449
450         pci_read_config_word(bridge, PCI_IO_BASE, &io);
451         if (!io) {
452                 pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
453                 pci_read_config_word(bridge, PCI_IO_BASE, &io);
454                 pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
455         }
456         if (io)
457                 b_res[0].flags |= IORESOURCE_IO;
458         /*  DECchip 21050 pass 2 errata: the bridge may miss an address
459             disconnect boundary by one PCI data phase.
460             Workaround: do not use prefetching on this device. */
461         if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
462                 return;
463         pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
464         if (!pmem) {
465                 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
466                                                0xfff0fff0);
467                 pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
468                 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
469         }
470         if (pmem) {
471                 b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
472                 if ((pmem & PCI_PREF_RANGE_TYPE_MASK) ==
473                     PCI_PREF_RANGE_TYPE_64) {
474                         b_res[2].flags |= IORESOURCE_MEM_64;
475                         b_res[2].flags |= PCI_PREF_RANGE_TYPE_64;
476                 }
477         }
478
479         /* double check if bridge does support 64 bit pref */
480         if (b_res[2].flags & IORESOURCE_MEM_64) {
481                 u32 mem_base_hi, tmp;
482                 pci_read_config_dword(bridge, PCI_PREF_BASE_UPPER32,
483                                          &mem_base_hi);
484                 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32,
485                                                0xffffffff);
486                 pci_read_config_dword(bridge, PCI_PREF_BASE_UPPER32, &tmp);
487                 if (!tmp)
488                         b_res[2].flags &= ~IORESOURCE_MEM_64;
489                 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32,
490                                        mem_base_hi);
491         }
492 }
493
494 /* Helper function for sizing routines: find first available
495    bus resource of a given type. Note: we intentionally skip
496    the bus resources which have already been assigned (that is,
497    have non-NULL parent resource). */
498 static struct resource *find_free_bus_resource(struct pci_bus *bus, unsigned long type)
499 {
500         int i;
501         struct resource *r;
502         unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM |
503                                   IORESOURCE_PREFETCH;
504
505         pci_bus_for_each_resource(bus, r, i) {
506                 if (r == &ioport_resource || r == &iomem_resource)
507                         continue;
508                 if (r && (r->flags & type_mask) == type && !r->parent)
509                         return r;
510         }
511         return NULL;
512 }
513
514 static resource_size_t calculate_iosize(resource_size_t size,
515                 resource_size_t min_size,
516                 resource_size_t size1,
517                 resource_size_t old_size,
518                 resource_size_t align)
519 {
520         if (size < min_size)
521                 size = min_size;
522         if (old_size == 1 )
523                 old_size = 0;
524         /* To be fixed in 2.5: we should have sort of HAVE_ISA
525            flag in the struct pci_bus. */
526 #if defined(CONFIG_ISA) || defined(CONFIG_EISA)
527         size = (size & 0xff) + ((size & ~0xffUL) << 2);
528 #endif
529         size = ALIGN(size + size1, align);
530         if (size < old_size)
531                 size = old_size;
532         return size;
533 }
534
535 static resource_size_t calculate_memsize(resource_size_t size,
536                 resource_size_t min_size,
537                 resource_size_t size1,
538                 resource_size_t old_size,
539                 resource_size_t align)
540 {
541         if (size < min_size)
542                 size = min_size;
543         if (old_size == 1 )
544                 old_size = 0;
545         if (size < old_size)
546                 size = old_size;
547         size = ALIGN(size + size1, align);
548         return size;
549 }
550
551 static resource_size_t get_res_add_size(struct resource_list_x *realloc_head,
552                                         struct resource *res)
553 {
554         struct resource_list_x *list;
555
556         /* check if it is in realloc_head list */
557         for (list = realloc_head->next; list && list->res != res;
558                         list = list->next);
559         if (list)
560                 return list->add_size;
561
562         return 0;
563 }
564
565 /**
566  * pbus_size_io() - size the io window of a given bus
567  *
568  * @bus : the bus
569  * @min_size : the minimum io window that must to be allocated
570  * @add_size : additional optional io window
571  * @realloc_head : track the additional io window on this list
572  *
573  * Sizing the IO windows of the PCI-PCI bridge is trivial,
574  * since these windows have 4K granularity and the IO ranges
575  * of non-bridge PCI devices are limited to 256 bytes.
576  * We must be careful with the ISA aliasing though.
577  */
578 static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
579                 resource_size_t add_size, struct resource_list_x *realloc_head)
580 {
581         struct pci_dev *dev;
582         struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO);
583         unsigned long size = 0, size0 = 0, size1 = 0, res_size;
584         resource_size_t children_add_size = 0;
585
586         if (!b_res)
587                 return;
588
589         list_for_each_entry(dev, &bus->devices, bus_list) {
590                 int i;
591
592                 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
593                         struct resource *r = &dev->resource[i];
594                         unsigned long r_size;
595
596                         if (r->parent || !(r->flags & IORESOURCE_IO))
597                                 continue;
598                         r_size = resource_size(r);
599
600                         if (r_size < 0x400)
601                                 /* Might be re-aligned for ISA */
602                                 size += r_size;
603                         else
604                                 size1 += r_size;
605
606                         if (realloc_head)
607                                 children_add_size += get_res_add_size(realloc_head, r);
608                 }
609         }
610         size0 = calculate_iosize(size, min_size, size1,
611                         resource_size(b_res), 4096);
612         if (children_add_size > add_size)
613                 add_size = children_add_size;
614         size1 = (!realloc_head || (realloc_head && !add_size)) ? size0 :
615                 calculate_iosize(size, min_size+add_size, size1,
616                         resource_size(b_res), 4096);
617         res_size = pci_reserve_size_io(bus);
618         if (size0 < res_size)
619                 size0 = ALIGN(res_size, 4096);
620         if (size1 < res_size)
621                 size1 = ALIGN(res_size, 4096);
622         if (!size0 && !size1) {
623                 if (b_res->start || b_res->end)
624                         dev_info(&bus->self->dev, "disabling bridge window "
625                                  "%pR to [bus %02x-%02x] (unused)\n", b_res,
626                                  bus->secondary, bus->subordinate);
627                 b_res->flags = 0;
628                 return;
629         }
630         /* Alignment of the IO window is always 4K */
631         b_res->start = 4096;
632         b_res->end = b_res->start + size0 - 1;
633         b_res->flags |= IORESOURCE_STARTALIGN;
634         if (size1 > size0 && realloc_head)
635                 add_to_list(realloc_head, bus->self, b_res, size1-size0, 4096);
636 }
637
638 /**
639  * pbus_size_mem() - size the memory window of a given bus
640  *
641  * @bus : the bus
642  * @min_size : the minimum memory window that must to be allocated
643  * @add_size : additional optional memory window
644  * @realloc_head : track the additional memory window on this list
645  *
646  * Calculate the size of the bus and minimal alignment which
647  * guarantees that all child resources fit in this size.
648  */
649 static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
650                          unsigned long type, resource_size_t min_size,
651                         resource_size_t add_size,
652                         struct resource_list_x *realloc_head)
653 {
654         struct pci_dev *dev;
655         resource_size_t min_align, align, size, size0, size1;
656         resource_size_t aligns[12];     /* Alignments from 1Mb to 2Gb */
657         int order, max_order;
658         struct resource *b_res = find_free_bus_resource(bus, type);
659         unsigned int mem64_mask = 0;
660         resource_size_t children_add_size = 0;
661
662         if (!b_res)
663                 return 0;
664
665         memset(aligns, 0, sizeof(aligns));
666         max_order = 0;
667         size = 0;
668
669         mem64_mask = b_res->flags & IORESOURCE_MEM_64;
670         b_res->flags &= ~IORESOURCE_MEM_64;
671
672         list_for_each_entry(dev, &bus->devices, bus_list) {
673                 int i;
674
675                 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
676                         struct resource *r = &dev->resource[i];
677                         resource_size_t r_size;
678
679                         if (r->parent || (r->flags & mask) != type)
680                                 continue;
681                         r_size = resource_size(r);
682 #ifdef CONFIG_PCI_IOV
683                         /* put SRIOV requested res to the optional list */
684                         if (realloc_head && i >= PCI_IOV_RESOURCES &&
685                                         i <= PCI_IOV_RESOURCE_END) {
686                                 r->end = r->start - 1;
687                                 add_to_list(realloc_head, dev, r, r_size, 0/* dont' care */);
688                                 children_add_size += r_size;
689                                 continue;
690                         }
691 #endif
692                         /* For bridges size != alignment */
693                         align = pci_resource_alignment(dev, r);
694                         order = __ffs(align) - 20;
695                         if (order > 11) {
696                                 dev_warn(&dev->dev, "disabling BAR %d: %pR "
697                                          "(bad alignment %#llx)\n", i, r,
698                                          (unsigned long long) align);
699                                 r->flags = 0;
700                                 continue;
701                         }
702                         size += r_size;
703                         if (order < 0)
704                                 order = 0;
705                         /* Exclude ranges with size > align from
706                            calculation of the alignment. */
707                         if (r_size == align)
708                                 aligns[order] += align;
709                         if (order > max_order)
710                                 max_order = order;
711                         mem64_mask &= r->flags & IORESOURCE_MEM_64;
712
713                         if (realloc_head)
714                                 children_add_size += get_res_add_size(realloc_head, r);
715                 }
716         }
717         align = 0;
718         min_align = 0;
719         for (order = 0; order <= max_order; order++) {
720                 resource_size_t align1 = 1;
721
722                 align1 <<= (order + 20);
723
724                 if (!align)
725                         min_align = align1;
726                 else if (ALIGN(align + min_align, min_align) < align1)
727                         min_align = align1 >> 1;
728                 align += aligns[order];
729         }
730         size = max(size, (resource_size_t)pci_reserve_size_mem(bus));
731         size0 = calculate_memsize(size, min_size, 0, resource_size(b_res), min_align);
732         if (children_add_size > add_size)
733                 add_size = children_add_size;
734         size1 = (!realloc_head || (realloc_head && !add_size)) ? size0 :
735                 calculate_memsize(size, min_size+add_size, 0,
736                                 resource_size(b_res), min_align);
737         if (!size0 && !size1) {
738                 if (b_res->start || b_res->end)
739                         dev_info(&bus->self->dev, "disabling bridge window "
740                                  "%pR to [bus %02x-%02x] (unused)\n", b_res,
741                                  bus->secondary, bus->subordinate);
742                 b_res->flags = 0;
743                 return 1;
744         }
745         b_res->start = min_align;
746         b_res->end = size0 + min_align - 1;
747         b_res->flags |= IORESOURCE_STARTALIGN | mem64_mask;
748         if (size1 > size0 && realloc_head)
749                 add_to_list(realloc_head, bus->self, b_res, size1-size0, min_align);
750         return 1;
751 }
752
753 unsigned long pci_cardbus_resource_alignment(struct resource *res)
754 {
755         if (res->flags & IORESOURCE_IO)
756                 return pci_cardbus_io_size;
757         if (res->flags & IORESOURCE_MEM)
758                 return pci_cardbus_mem_size;
759         return 0;
760 }
761
762 static void pci_bus_size_cardbus(struct pci_bus *bus,
763                         struct resource_list_x *realloc_head)
764 {
765         struct pci_dev *bridge = bus->self;
766         struct resource *b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
767         u16 ctrl;
768
769         /*
770          * Reserve some resources for CardBus.  We reserve
771          * a fixed amount of bus space for CardBus bridges.
772          */
773         b_res[0].start = 0;
774         b_res[0].flags |= IORESOURCE_IO | IORESOURCE_SIZEALIGN;
775         if (realloc_head)
776                 add_to_list(realloc_head, bridge, b_res, pci_cardbus_io_size, 0 /* dont care */);
777
778         b_res[1].start = 0;
779         b_res[1].flags |= IORESOURCE_IO | IORESOURCE_SIZEALIGN;
780         if (realloc_head)
781                 add_to_list(realloc_head, bridge, b_res+1, pci_cardbus_io_size, 0 /* dont care */);
782
783         /*
784          * Check whether prefetchable memory is supported
785          * by this bridge.
786          */
787         pci_read_config_word(bridge, PCI_CB_BRIDGE_CONTROL, &ctrl);
788         if (!(ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0)) {
789                 ctrl |= PCI_CB_BRIDGE_CTL_PREFETCH_MEM0;
790                 pci_write_config_word(bridge, PCI_CB_BRIDGE_CONTROL, ctrl);
791                 pci_read_config_word(bridge, PCI_CB_BRIDGE_CONTROL, &ctrl);
792         }
793
794         /*
795          * If we have prefetchable memory support, allocate
796          * two regions.  Otherwise, allocate one region of
797          * twice the size.
798          */
799         if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
800                 b_res[2].start = 0;
801                 b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH | IORESOURCE_SIZEALIGN;
802                 if (realloc_head)
803                         add_to_list(realloc_head, bridge, b_res+2, pci_cardbus_mem_size, 0 /* dont care */);
804
805                 b_res[3].start = 0;
806                 b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_SIZEALIGN;
807                 if (realloc_head)
808                         add_to_list(realloc_head, bridge, b_res+3, pci_cardbus_mem_size, 0 /* dont care */);
809         } else {
810                 b_res[3].start = 0;
811                 b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_SIZEALIGN;
812                 if (realloc_head)
813                         add_to_list(realloc_head, bridge, b_res+3, pci_cardbus_mem_size * 2, 0 /* dont care */);
814         }
815
816         /* set the size of the resource to zero, so that the resource does not
817          * get assigned during required-resource allocation cycle but gets assigned
818          * during the optional-resource allocation cycle.
819          */
820         b_res[0].start = b_res[1].start = b_res[2].start = b_res[3].start = 1;
821         b_res[0].end = b_res[1].end = b_res[2].end = b_res[3].end = 0;
822 }
823
824 void __ref __pci_bus_size_bridges(struct pci_bus *bus,
825                         struct resource_list_x *realloc_head)
826 {
827         struct pci_dev *dev;
828         unsigned long mask, prefmask;
829         resource_size_t additional_mem_size = 0, additional_io_size = 0;
830
831         list_for_each_entry(dev, &bus->devices, bus_list) {
832                 struct pci_bus *b = dev->subordinate;
833                 if (!b)
834                         continue;
835
836                 switch (dev->class >> 8) {
837                 case PCI_CLASS_BRIDGE_CARDBUS:
838                         pci_bus_size_cardbus(b, realloc_head);
839                         break;
840
841                 case PCI_CLASS_BRIDGE_PCI:
842                 default:
843                         __pci_bus_size_bridges(b, realloc_head);
844                         break;
845                 }
846         }
847
848         /* The root bus? */
849         if (!bus->self)
850                 return;
851
852         switch (bus->self->class >> 8) {
853         case PCI_CLASS_BRIDGE_CARDBUS:
854                 /* don't size cardbuses yet. */
855                 break;
856
857         case PCI_CLASS_BRIDGE_PCI:
858                 pci_bridge_check_ranges(bus);
859                 if (bus->self->is_hotplug_bridge) {
860                         additional_io_size  = pci_hotplug_io_size;
861                         additional_mem_size = pci_hotplug_mem_size;
862                 }
863                 /*
864                  * Follow thru
865                  */
866         default:
867                 pbus_size_io(bus, 0, additional_io_size, realloc_head);
868                 /* If the bridge supports prefetchable range, size it
869                    separately. If it doesn't, or its prefetchable window
870                    has already been allocated by arch code, try
871                    non-prefetchable range for both types of PCI memory
872                    resources. */
873                 mask = IORESOURCE_MEM;
874                 prefmask = IORESOURCE_MEM | IORESOURCE_PREFETCH;
875                 if (pbus_size_mem(bus, prefmask, prefmask, 0, additional_mem_size, realloc_head))
876                         mask = prefmask; /* Success, size non-prefetch only. */
877                 else
878                         additional_mem_size += additional_mem_size;
879                 pbus_size_mem(bus, mask, IORESOURCE_MEM, 0, additional_mem_size, realloc_head);
880                 break;
881         }
882 }
883
884 void __ref pci_bus_size_bridges(struct pci_bus *bus)
885 {
886         __pci_bus_size_bridges(bus, NULL);
887 }
888 EXPORT_SYMBOL(pci_bus_size_bridges);
889
890 static void __ref __pci_bus_assign_resources(const struct pci_bus *bus,
891                                          struct resource_list_x *realloc_head,
892                                          struct resource_list_x *fail_head)
893 {
894         struct pci_bus *b;
895         struct pci_dev *dev;
896
897         pbus_assign_resources_sorted(bus, realloc_head, fail_head);
898
899         list_for_each_entry(dev, &bus->devices, bus_list) {
900                 b = dev->subordinate;
901                 if (!b)
902                         continue;
903
904                 __pci_bus_assign_resources(b, realloc_head, fail_head);
905
906                 switch (dev->class >> 8) {
907                 case PCI_CLASS_BRIDGE_PCI:
908                         if (!pci_is_enabled(dev))
909                                 pci_setup_bridge(b);
910                         break;
911
912                 case PCI_CLASS_BRIDGE_CARDBUS:
913                         pci_setup_cardbus(b);
914                         break;
915
916                 default:
917                         dev_info(&dev->dev, "not setting up bridge for bus "
918                                  "%04x:%02x\n", pci_domain_nr(b), b->number);
919                         break;
920                 }
921         }
922 }
923
924 void __ref pci_bus_assign_resources(const struct pci_bus *bus)
925 {
926         __pci_bus_assign_resources(bus, NULL, NULL);
927 }
928 EXPORT_SYMBOL(pci_bus_assign_resources);
929
930 static void __ref __pci_bridge_assign_resources(const struct pci_dev *bridge,
931                                          struct resource_list_x *fail_head)
932 {
933         struct pci_bus *b;
934
935         pdev_assign_resources_sorted((struct pci_dev *)bridge, fail_head);
936
937         b = bridge->subordinate;
938         if (!b)
939                 return;
940
941         __pci_bus_assign_resources(b, NULL, fail_head);
942
943         switch (bridge->class >> 8) {
944         case PCI_CLASS_BRIDGE_PCI:
945                 pci_setup_bridge(b);
946                 break;
947
948         case PCI_CLASS_BRIDGE_CARDBUS:
949                 pci_setup_cardbus(b);
950                 break;
951
952         default:
953                 dev_info(&bridge->dev, "not setting up bridge for bus "
954                          "%04x:%02x\n", pci_domain_nr(b), b->number);
955                 break;
956         }
957 }
958 static void pci_bridge_release_resources(struct pci_bus *bus,
959                                           unsigned long type)
960 {
961         int idx;
962         bool changed = false;
963         struct pci_dev *dev;
964         struct resource *r;
965         unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM |
966                                   IORESOURCE_PREFETCH;
967
968         dev = bus->self;
969         for (idx = PCI_BRIDGE_RESOURCES; idx <= PCI_BRIDGE_RESOURCE_END;
970              idx++) {
971                 r = &dev->resource[idx];
972                 if ((r->flags & type_mask) != type)
973                         continue;
974                 if (!r->parent)
975                         continue;
976                 /*
977                  * if there are children under that, we should release them
978                  *  all
979                  */
980                 release_child_resources(r);
981                 if (!release_resource(r)) {
982                         dev_printk(KERN_DEBUG, &dev->dev,
983                                  "resource %d %pR released\n", idx, r);
984                         /* keep the old size */
985                         r->end = resource_size(r) - 1;
986                         r->start = 0;
987                         r->flags = 0;
988                         changed = true;
989                 }
990         }
991
992         if (changed) {
993                 /* avoiding touch the one without PREF */
994                 if (type & IORESOURCE_PREFETCH)
995                         type = IORESOURCE_PREFETCH;
996                 __pci_setup_bridge(bus, type);
997         }
998 }
999
1000 enum release_type {
1001         leaf_only,
1002         whole_subtree,
1003 };
1004 /*
1005  * try to release pci bridge resources that is from leaf bridge,
1006  * so we can allocate big new one later
1007  */
1008 static void __ref pci_bus_release_bridge_resources(struct pci_bus *bus,
1009                                                    unsigned long type,
1010                                                    enum release_type rel_type)
1011 {
1012         struct pci_dev *dev;
1013         bool is_leaf_bridge = true;
1014
1015         list_for_each_entry(dev, &bus->devices, bus_list) {
1016                 struct pci_bus *b = dev->subordinate;
1017                 if (!b)
1018                         continue;
1019
1020                 is_leaf_bridge = false;
1021
1022                 if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI)
1023                         continue;
1024
1025                 if (rel_type == whole_subtree)
1026                         pci_bus_release_bridge_resources(b, type,
1027                                                  whole_subtree);
1028         }
1029
1030         if (pci_is_root_bus(bus))
1031                 return;
1032
1033         if ((bus->self->class >> 8) != PCI_CLASS_BRIDGE_PCI)
1034                 return;
1035
1036         if ((rel_type == whole_subtree) || is_leaf_bridge)
1037                 pci_bridge_release_resources(bus, type);
1038 }
1039
1040 static void pci_bus_dump_res(struct pci_bus *bus)
1041 {
1042         struct resource *res;
1043         int i;
1044
1045         pci_bus_for_each_resource(bus, res, i) {
1046                 if (!res || !res->end || !res->flags)
1047                         continue;
1048
1049                 dev_printk(KERN_DEBUG, &bus->dev, "resource %d %pR\n", i, res);
1050         }
1051 }
1052
1053 static void pci_bus_dump_resources(struct pci_bus *bus)
1054 {
1055         struct pci_bus *b;
1056         struct pci_dev *dev;
1057
1058
1059         pci_bus_dump_res(bus);
1060
1061         list_for_each_entry(dev, &bus->devices, bus_list) {
1062                 b = dev->subordinate;
1063                 if (!b)
1064                         continue;
1065
1066                 pci_bus_dump_resources(b);
1067         }
1068 }
1069
1070 static int __init pci_bus_get_depth(struct pci_bus *bus)
1071 {
1072         int depth = 0;
1073         struct pci_dev *dev;
1074
1075         list_for_each_entry(dev, &bus->devices, bus_list) {
1076                 int ret;
1077                 struct pci_bus *b = dev->subordinate;
1078                 if (!b)
1079                         continue;
1080
1081                 ret = pci_bus_get_depth(b);
1082                 if (ret + 1 > depth)
1083                         depth = ret + 1;
1084         }
1085
1086         return depth;
1087 }
1088 static int __init pci_get_max_depth(void)
1089 {
1090         int depth = 0;
1091         struct pci_bus *bus;
1092
1093         list_for_each_entry(bus, &pci_root_buses, node) {
1094                 int ret;
1095
1096                 ret = pci_bus_get_depth(bus);
1097                 if (ret > depth)
1098                         depth = ret;
1099         }
1100
1101         return depth;
1102 }
1103
1104
1105 /*
1106  * first try will not touch pci bridge res
1107  * second  and later try will clear small leaf bridge res
1108  * will stop till to the max  deepth if can not find good one
1109  */
1110 void __init
1111 pci_assign_unassigned_resources(void)
1112 {
1113         struct pci_bus *bus;
1114         struct resource_list_x realloc_list; /* list of resources that
1115                                         want additional resources */
1116         int tried_times = 0;
1117         enum release_type rel_type = leaf_only;
1118         struct resource_list_x head, *list;
1119         unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM |
1120                                   IORESOURCE_PREFETCH;
1121         unsigned long failed_type;
1122         int max_depth = pci_get_max_depth();
1123         int pci_try_num;
1124
1125
1126         head.next = NULL;
1127         realloc_list.next = NULL;
1128
1129         pci_try_num = max_depth + 1;
1130         printk(KERN_DEBUG "PCI: max bus depth: %d pci_try_num: %d\n",
1131                  max_depth, pci_try_num);
1132
1133 again:
1134         /* Depth first, calculate sizes and alignments of all
1135            subordinate buses. */
1136         list_for_each_entry(bus, &pci_root_buses, node)
1137                 __pci_bus_size_bridges(bus, &realloc_list);
1138
1139         /* Depth last, allocate resources and update the hardware. */
1140         list_for_each_entry(bus, &pci_root_buses, node)
1141                 __pci_bus_assign_resources(bus, &realloc_list, &head);
1142         BUG_ON(realloc_list.next);
1143         tried_times++;
1144
1145         /* any device complain? */
1146         if (!head.next)
1147                 goto enable_and_dump;
1148
1149         /* don't realloc if asked to do so */
1150         if (!pci_realloc_enabled()) {
1151                 free_list(resource_list_x, &head);
1152                 goto enable_and_dump;
1153         }
1154
1155         failed_type = 0;
1156         for (list = head.next; list;) {
1157                 failed_type |= list->flags;
1158                 list = list->next;
1159         }
1160         /*
1161          * io port are tight, don't try extra
1162          * or if reach the limit, don't want to try more
1163          */
1164         failed_type &= type_mask;
1165         if ((failed_type == IORESOURCE_IO) || (tried_times >= pci_try_num)) {
1166                 free_list(resource_list_x, &head);
1167                 goto enable_and_dump;
1168         }
1169
1170         printk(KERN_DEBUG "PCI: No. %d try to assign unassigned res\n",
1171                          tried_times + 1);
1172
1173         /* third times and later will not check if it is leaf */
1174         if ((tried_times + 1) > 2)
1175                 rel_type = whole_subtree;
1176
1177         /*
1178          * Try to release leaf bridge's resources that doesn't fit resource of
1179          * child device under that bridge
1180          */
1181         for (list = head.next; list;) {
1182                 bus = list->dev->bus;
1183                 pci_bus_release_bridge_resources(bus, list->flags & type_mask,
1184                                                   rel_type);
1185                 list = list->next;
1186         }
1187         /* restore size and flags */
1188         for (list = head.next; list;) {
1189                 struct resource *res = list->res;
1190
1191                 res->start = list->start;
1192                 res->end = list->end;
1193                 res->flags = list->flags;
1194                 if (list->dev->subordinate)
1195                         res->flags = 0;
1196
1197                 list = list->next;
1198         }
1199         free_list(resource_list_x, &head);
1200
1201         goto again;
1202
1203 enable_and_dump:
1204         /* Depth last, update the hardware. */
1205         list_for_each_entry(bus, &pci_root_buses, node)
1206                 pci_enable_bridges(bus);
1207
1208         /* dump the resource on buses */
1209         list_for_each_entry(bus, &pci_root_buses, node)
1210                 pci_bus_dump_resources(bus);
1211 }
1212
1213 void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)
1214 {
1215         struct pci_bus *parent = bridge->subordinate;
1216         int tried_times = 0;
1217         struct resource_list_x head, *list;
1218         int retval;
1219         unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM |
1220                                   IORESOURCE_PREFETCH;
1221
1222         head.next = NULL;
1223
1224 again:
1225         pci_bus_size_bridges(parent);
1226         __pci_bridge_assign_resources(bridge, &head);
1227
1228         tried_times++;
1229
1230         if (!head.next)
1231                 goto enable_all;
1232
1233         if (tried_times >= 2) {
1234                 /* still fail, don't need to try more */
1235                 free_list(resource_list_x, &head);
1236                 goto enable_all;
1237         }
1238
1239         printk(KERN_DEBUG "PCI: No. %d try to assign unassigned res\n",
1240                          tried_times + 1);
1241
1242         /*
1243          * Try to release leaf bridge's resources that doesn't fit resource of
1244          * child device under that bridge
1245          */
1246         for (list = head.next; list;) {
1247                 struct pci_bus *bus = list->dev->bus;
1248                 unsigned long flags = list->flags;
1249
1250                 pci_bus_release_bridge_resources(bus, flags & type_mask,
1251                                                  whole_subtree);
1252                 list = list->next;
1253         }
1254         /* restore size and flags */
1255         for (list = head.next; list;) {
1256                 struct resource *res = list->res;
1257
1258                 res->start = list->start;
1259                 res->end = list->end;
1260                 res->flags = list->flags;
1261                 if (list->dev->subordinate)
1262                         res->flags = 0;
1263
1264                 list = list->next;
1265         }
1266         free_list(resource_list_x, &head);
1267
1268         goto again;
1269
1270 enable_all:
1271         retval = pci_reenable_device(bridge);
1272         pci_set_master(bridge);
1273         pci_enable_bridges(parent);
1274 }
1275 EXPORT_SYMBOL_GPL(pci_assign_unassigned_bridge_resources);