1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/kernel.h>
20#include <linux/pci.h>
21#include <linux/string.h>
22#include <linux/init.h>
23#include <linux/bootmem.h>
24#include <linux/mm.h>
25#include <linux/list.h>
26#include <linux/syscalls.h>
27#include <linux/irq.h>
28#include <linux/vmalloc.h>
29#include <linux/slab.h>
30#include <linux/of.h>
31#include <linux/of_address.h>
32#include <linux/of_pci.h>
33#include <linux/export.h>
34
35#include <asm/processor.h>
36#include <asm/io.h>
37#include <asm/pci-bridge.h>
38#include <asm/byteorder.h>
39
40static DEFINE_SPINLOCK(hose_spinlock);
41LIST_HEAD(hose_list);
42
43
44static int global_phb_number;
45
46
47resource_size_t isa_mem_base;
48
49static struct dma_map_ops *pci_dma_ops = &dma_direct_ops;
50
51unsigned long isa_io_base;
52unsigned long pci_dram_offset;
53static int pci_bus_count;
54
55
56void set_pci_dma_ops(struct dma_map_ops *dma_ops)
57{
58 pci_dma_ops = dma_ops;
59}
60
61struct dma_map_ops *get_pci_dma_ops(void)
62{
63 return pci_dma_ops;
64}
65EXPORT_SYMBOL(get_pci_dma_ops);
66
67struct pci_controller *pcibios_alloc_controller(struct device_node *dev)
68{
69 struct pci_controller *phb;
70
71 phb = zalloc_maybe_bootmem(sizeof(struct pci_controller), GFP_KERNEL);
72 if (!phb)
73 return NULL;
74 spin_lock(&hose_spinlock);
75 phb->global_number = global_phb_number++;
76 list_add_tail(&phb->list_node, &hose_list);
77 spin_unlock(&hose_spinlock);
78 phb->dn = dev;
79 phb->is_dynamic = mem_init_done;
80 return phb;
81}
82
83void pcibios_free_controller(struct pci_controller *phb)
84{
85 spin_lock(&hose_spinlock);
86 list_del(&phb->list_node);
87 spin_unlock(&hose_spinlock);
88
89 if (phb->is_dynamic)
90 kfree(phb);
91}
92
93static resource_size_t pcibios_io_size(const struct pci_controller *hose)
94{
95 return resource_size(&hose->io_resource);
96}
97
98int pcibios_vaddr_is_ioport(void __iomem *address)
99{
100 int ret = 0;
101 struct pci_controller *hose;
102 resource_size_t size;
103
104 spin_lock(&hose_spinlock);
105 list_for_each_entry(hose, &hose_list, list_node) {
106 size = pcibios_io_size(hose);
107 if (address >= hose->io_base_virt &&
108 address < (hose->io_base_virt + size)) {
109 ret = 1;
110 break;
111 }
112 }
113 spin_unlock(&hose_spinlock);
114 return ret;
115}
116
117unsigned long pci_address_to_pio(phys_addr_t address)
118{
119 struct pci_controller *hose;
120 resource_size_t size;
121 unsigned long ret = ~0;
122
123 spin_lock(&hose_spinlock);
124 list_for_each_entry(hose, &hose_list, list_node) {
125 size = pcibios_io_size(hose);
126 if (address >= hose->io_base_phys &&
127 address < (hose->io_base_phys + size)) {
128 unsigned long base =
129 (unsigned long)hose->io_base_virt - _IO_BASE;
130 ret = base + (address - hose->io_base_phys);
131 break;
132 }
133 }
134 spin_unlock(&hose_spinlock);
135
136 return ret;
137}
138EXPORT_SYMBOL_GPL(pci_address_to_pio);
139
140
141
142
143int pci_domain_nr(struct pci_bus *bus)
144{
145 struct pci_controller *hose = pci_bus_to_host(bus);
146
147 return hose->global_number;
148}
149EXPORT_SYMBOL(pci_domain_nr);
150
151
152
153
154
155
156
157
158struct pci_controller *pci_find_hose_for_OF_device(struct device_node *node)
159{
160 while (node) {
161 struct pci_controller *hose, *tmp;
162 list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
163 if (hose->dn == node)
164 return hose;
165 node = node->parent;
166 }
167 return NULL;
168}
169
170static ssize_t pci_show_devspec(struct device *dev,
171 struct device_attribute *attr, char *buf)
172{
173 struct pci_dev *pdev;
174 struct device_node *np;
175
176 pdev = to_pci_dev(dev);
177 np = pci_device_to_OF_node(pdev);
178 if (np == NULL || np->full_name == NULL)
179 return 0;
180 return sprintf(buf, "%s", np->full_name);
181}
182static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
183
184
185int pcibios_add_platform_entries(struct pci_dev *pdev)
186{
187 return device_create_file(&pdev->dev, &dev_attr_devspec);
188}
189
190void pcibios_set_master(struct pci_dev *dev)
191{
192
193}
194
195
196
197
198
199
200int pci_read_irq_line(struct pci_dev *pci_dev)
201{
202 struct of_irq oirq;
203 unsigned int virq;
204
205
206
207
208
209
210
211
212
213
214 pr_debug("PCI: Try to map irq for %s...\n", pci_name(pci_dev));
215
216#ifdef DEBUG
217 memset(&oirq, 0xff, sizeof(oirq));
218#endif
219
220 if (of_irq_map_pci(pci_dev, &oirq)) {
221 u8 line, pin;
222
223
224
225
226
227
228
229
230 if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_PIN, &pin))
231 return -1;
232 if (pin == 0)
233 return -1;
234 if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) ||
235 line == 0xff || line == 0) {
236 return -1;
237 }
238 pr_debug(" No map ! Using line %d (pin %d) from PCI config\n",
239 line, pin);
240
241 virq = irq_create_mapping(NULL, line);
242 if (virq)
243 irq_set_irq_type(virq, IRQ_TYPE_LEVEL_LOW);
244 } else {
245 pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n",
246 oirq.size, oirq.specifier[0], oirq.specifier[1],
247 of_node_full_name(oirq.controller));
248
249 virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
250 oirq.size);
251 }
252 if (!virq) {
253 pr_debug(" Failed to map !\n");
254 return -1;
255 }
256
257 pr_debug(" Mapped to linux irq %d\n", virq);
258
259 pci_dev->irq = virq;
260
261 return 0;
262}
263EXPORT_SYMBOL(pci_read_irq_line);
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282static struct resource *__pci_mmap_make_offset(struct pci_dev *dev,
283 resource_size_t *offset,
284 enum pci_mmap_state mmap_state)
285{
286 struct pci_controller *hose = pci_bus_to_host(dev->bus);
287 unsigned long io_offset = 0;
288 int i, res_bit;
289
290 if (hose == 0)
291 return NULL;
292
293
294 if (mmap_state == pci_mmap_mem) {
295#if 0
296 *offset += hose->pci_mem_offset;
297#endif
298 res_bit = IORESOURCE_MEM;
299 } else {
300 io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
301 *offset += io_offset;
302 res_bit = IORESOURCE_IO;
303 }
304
305
306
307
308
309 for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
310 struct resource *rp = &dev->resource[i];
311 int flags = rp->flags;
312
313
314 if (i == PCI_ROM_RESOURCE)
315 flags |= IORESOURCE_MEM;
316
317
318 if ((flags & res_bit) == 0)
319 continue;
320
321
322 if (*offset < (rp->start & PAGE_MASK) || *offset > rp->end)
323 continue;
324
325
326 if (mmap_state == pci_mmap_io)
327 *offset += hose->io_base_phys - io_offset;
328 return rp;
329 }
330
331 return NULL;
332}
333
334
335
336
337
338static pgprot_t __pci_mmap_set_pgprot(struct pci_dev *dev, struct resource *rp,
339 pgprot_t protection,
340 enum pci_mmap_state mmap_state,
341 int write_combine)
342{
343 pgprot_t prot = protection;
344
345
346
347
348
349
350
351 if (mmap_state != pci_mmap_mem)
352 write_combine = 0;
353 else if (write_combine == 0) {
354 if (rp->flags & IORESOURCE_PREFETCH)
355 write_combine = 1;
356 }
357
358 return pgprot_noncached(prot);
359}
360
361
362
363
364
365
366pgprot_t pci_phys_mem_access_prot(struct file *file,
367 unsigned long pfn,
368 unsigned long size,
369 pgprot_t prot)
370{
371 struct pci_dev *pdev = NULL;
372 struct resource *found = NULL;
373 resource_size_t offset = ((resource_size_t)pfn) << PAGE_SHIFT;
374 int i;
375
376 if (page_is_ram(pfn))
377 return prot;
378
379 prot = pgprot_noncached(prot);
380 for_each_pci_dev(pdev) {
381 for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
382 struct resource *rp = &pdev->resource[i];
383 int flags = rp->flags;
384
385
386 if ((flags & IORESOURCE_MEM) == 0)
387 continue;
388
389 if (offset < (rp->start & PAGE_MASK) ||
390 offset > rp->end)
391 continue;
392 found = rp;
393 break;
394 }
395 if (found)
396 break;
397 }
398 if (found) {
399 if (found->flags & IORESOURCE_PREFETCH)
400 prot = pgprot_noncached_wc(prot);
401 pci_dev_put(pdev);
402 }
403
404 pr_debug("PCI: Non-PCI map for %llx, prot: %lx\n",
405 (unsigned long long)offset, pgprot_val(prot));
406
407 return prot;
408}
409
410
411
412
413
414
415
416
417
418
419
420int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
421 enum pci_mmap_state mmap_state, int write_combine)
422{
423 resource_size_t offset =
424 ((resource_size_t)vma->vm_pgoff) << PAGE_SHIFT;
425 struct resource *rp;
426 int ret;
427
428 rp = __pci_mmap_make_offset(dev, &offset, mmap_state);
429 if (rp == NULL)
430 return -EINVAL;
431
432 vma->vm_pgoff = offset >> PAGE_SHIFT;
433 vma->vm_page_prot = __pci_mmap_set_pgprot(dev, rp,
434 vma->vm_page_prot,
435 mmap_state, write_combine);
436
437 ret = remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
438 vma->vm_end - vma->vm_start, vma->vm_page_prot);
439
440 return ret;
441}
442
443
444int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val, size_t size)
445{
446 unsigned long offset;
447 struct pci_controller *hose = pci_bus_to_host(bus);
448 struct resource *rp = &hose->io_resource;
449 void __iomem *addr;
450
451
452
453
454
455
456 offset = (unsigned long)hose->io_base_virt - _IO_BASE;
457 offset += port;
458
459 if (!(rp->flags & IORESOURCE_IO))
460 return -ENXIO;
461 if (offset < rp->start || (offset + size) > rp->end)
462 return -ENXIO;
463 addr = hose->io_base_virt + port;
464
465 switch (size) {
466 case 1:
467 *((u8 *)val) = in_8(addr);
468 return 1;
469 case 2:
470 if (port & 1)
471 return -EINVAL;
472 *((u16 *)val) = in_le16(addr);
473 return 2;
474 case 4:
475 if (port & 3)
476 return -EINVAL;
477 *((u32 *)val) = in_le32(addr);
478 return 4;
479 }
480 return -EINVAL;
481}
482
483
484int pci_legacy_write(struct pci_bus *bus, loff_t port, u32 val, size_t size)
485{
486 unsigned long offset;
487 struct pci_controller *hose = pci_bus_to_host(bus);
488 struct resource *rp = &hose->io_resource;
489 void __iomem *addr;
490
491
492
493
494
495
496 offset = (unsigned long)hose->io_base_virt - _IO_BASE;
497 offset += port;
498
499 if (!(rp->flags & IORESOURCE_IO))
500 return -ENXIO;
501 if (offset < rp->start || (offset + size) > rp->end)
502 return -ENXIO;
503 addr = hose->io_base_virt + port;
504
505
506
507
508
509
510 switch (size) {
511 case 1:
512 out_8(addr, val >> 24);
513 return 1;
514 case 2:
515 if (port & 1)
516 return -EINVAL;
517 out_le16(addr, val >> 16);
518 return 2;
519 case 4:
520 if (port & 3)
521 return -EINVAL;
522 out_le32(addr, val);
523 return 4;
524 }
525 return -EINVAL;
526}
527
528
529int pci_mmap_legacy_page_range(struct pci_bus *bus,
530 struct vm_area_struct *vma,
531 enum pci_mmap_state mmap_state)
532{
533 struct pci_controller *hose = pci_bus_to_host(bus);
534 resource_size_t offset =
535 ((resource_size_t)vma->vm_pgoff) << PAGE_SHIFT;
536 resource_size_t size = vma->vm_end - vma->vm_start;
537 struct resource *rp;
538
539 pr_debug("pci_mmap_legacy_page_range(%04x:%02x, %s @%llx..%llx)\n",
540 pci_domain_nr(bus), bus->number,
541 mmap_state == pci_mmap_mem ? "MEM" : "IO",
542 (unsigned long long)offset,
543 (unsigned long long)(offset + size - 1));
544
545 if (mmap_state == pci_mmap_mem) {
546
547
548
549
550
551
552
553 if ((offset + size) > hose->isa_mem_size) {
554#ifdef CONFIG_MMU
555 printk(KERN_DEBUG
556 "Process %s (pid:%d) mapped non-existing PCI"
557 "legacy memory for 0%04x:%02x\n",
558 current->comm, current->pid, pci_domain_nr(bus),
559 bus->number);
560#endif
561 if (vma->vm_flags & VM_SHARED)
562 return shmem_zero_setup(vma);
563 return 0;
564 }
565 offset += hose->isa_mem_phys;
566 } else {
567 unsigned long io_offset = (unsigned long)hose->io_base_virt - \
568 _IO_BASE;
569 unsigned long roffset = offset + io_offset;
570 rp = &hose->io_resource;
571 if (!(rp->flags & IORESOURCE_IO))
572 return -ENXIO;
573 if (roffset < rp->start || (roffset + size) > rp->end)
574 return -ENXIO;
575 offset += hose->io_base_phys;
576 }
577 pr_debug(" -> mapping phys %llx\n", (unsigned long long)offset);
578
579 vma->vm_pgoff = offset >> PAGE_SHIFT;
580 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
581 return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
582 vma->vm_end - vma->vm_start,
583 vma->vm_page_prot);
584}
585
586void pci_resource_to_user(const struct pci_dev *dev, int bar,
587 const struct resource *rsrc,
588 resource_size_t *start, resource_size_t *end)
589{
590 struct pci_controller *hose = pci_bus_to_host(dev->bus);
591 resource_size_t offset = 0;
592
593 if (hose == NULL)
594 return;
595
596 if (rsrc->flags & IORESOURCE_IO)
597 offset = (unsigned long)hose->io_base_virt - _IO_BASE;
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616#if 0
617 else if (rsrc->flags & IORESOURCE_MEM)
618 offset = hose->pci_mem_offset;
619#endif
620
621 *start = rsrc->start - offset;
622 *end = rsrc->end - offset;
623}
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658void __devinit pci_process_bridge_OF_ranges(struct pci_controller *hose,
659 struct device_node *dev,
660 int primary)
661{
662 const u32 *ranges;
663 int rlen;
664 int pna = of_n_addr_cells(dev);
665 int np = pna + 5;
666 int memno = 0, isa_hole = -1;
667 u32 pci_space;
668 unsigned long long pci_addr, cpu_addr, pci_next, cpu_next, size;
669 unsigned long long isa_mb = 0;
670 struct resource *res;
671
672 printk(KERN_INFO "PCI host bridge %s %s ranges:\n",
673 dev->full_name, primary ? "(primary)" : "");
674
675
676 ranges = of_get_property(dev, "ranges", &rlen);
677 if (ranges == NULL)
678 return;
679
680
681 pr_debug("Parsing ranges property...\n");
682 while ((rlen -= np * 4) >= 0) {
683
684 pci_space = ranges[0];
685 pci_addr = of_read_number(ranges + 1, 2);
686 cpu_addr = of_translate_address(dev, ranges + 3);
687 size = of_read_number(ranges + pna + 3, 2);
688
689 pr_debug("pci_space: 0x%08x pci_addr:0x%016llx "
690 "cpu_addr:0x%016llx size:0x%016llx\n",
691 pci_space, pci_addr, cpu_addr, size);
692
693 ranges += np;
694
695
696
697
698
699
700 if (cpu_addr == OF_BAD_ADDR || size == 0)
701 continue;
702
703
704 for (; rlen >= np * sizeof(u32);
705 ranges += np, rlen -= np * 4) {
706 if (ranges[0] != pci_space)
707 break;
708 pci_next = of_read_number(ranges + 1, 2);
709 cpu_next = of_translate_address(dev, ranges + 3);
710 if (pci_next != pci_addr + size ||
711 cpu_next != cpu_addr + size)
712 break;
713 size += of_read_number(ranges + pna + 3, 2);
714 }
715
716
717 res = NULL;
718 switch ((pci_space >> 24) & 0x3) {
719 case 1:
720 printk(KERN_INFO
721 " IO 0x%016llx..0x%016llx -> 0x%016llx\n",
722 cpu_addr, cpu_addr + size - 1, pci_addr);
723
724
725 if (hose->pci_io_size) {
726 printk(KERN_INFO
727 " \\--> Skipped (too many) !\n");
728 continue;
729 }
730
731 if (size > 0x01000000)
732 size = 0x01000000;
733
734
735 hose->io_base_virt = ioremap(cpu_addr, size);
736
737
738 if (primary)
739 isa_io_base =
740 (unsigned long)hose->io_base_virt;
741
742
743
744 hose->pci_io_size = pci_addr + size;
745 hose->io_base_phys = cpu_addr - pci_addr;
746
747
748 res = &hose->io_resource;
749 res->flags = IORESOURCE_IO;
750 res->start = pci_addr;
751 break;
752 case 2:
753 case 3:
754 printk(KERN_INFO
755 " MEM 0x%016llx..0x%016llx -> 0x%016llx %s\n",
756 cpu_addr, cpu_addr + size - 1, pci_addr,
757 (pci_space & 0x40000000) ? "Prefetch" : "");
758
759
760 if (memno >= 3) {
761 printk(KERN_INFO
762 " \\--> Skipped (too many) !\n");
763 continue;
764 }
765
766 if (pci_addr == 0) {
767 isa_mb = cpu_addr;
768 isa_hole = memno;
769 if (primary || isa_mem_base == 0)
770 isa_mem_base = cpu_addr;
771 hose->isa_mem_phys = cpu_addr;
772 hose->isa_mem_size = size;
773 }
774
775
776
777
778
779 if (memno == 0 ||
780 (isa_hole >= 0 && pci_addr != 0 &&
781 hose->pci_mem_offset == isa_mb))
782 hose->pci_mem_offset = cpu_addr - pci_addr;
783 else if (pci_addr != 0 &&
784 hose->pci_mem_offset != cpu_addr - pci_addr) {
785 printk(KERN_INFO
786 " \\--> Skipped (offset mismatch) !\n");
787 continue;
788 }
789
790
791 res = &hose->mem_resources[memno++];
792 res->flags = IORESOURCE_MEM;
793 if (pci_space & 0x40000000)
794 res->flags |= IORESOURCE_PREFETCH;
795 res->start = cpu_addr;
796 break;
797 }
798 if (res != NULL) {
799 res->name = dev->full_name;
800 res->end = res->start + size - 1;
801 res->parent = NULL;
802 res->sibling = NULL;
803 res->child = NULL;
804 }
805 }
806
807
808
809
810
811 if (isa_hole >= 0 && hose->pci_mem_offset != isa_mb) {
812 unsigned int next = isa_hole + 1;
813 printk(KERN_INFO " Removing ISA hole at 0x%016llx\n", isa_mb);
814 if (next < memno)
815 memmove(&hose->mem_resources[isa_hole],
816 &hose->mem_resources[next],
817 sizeof(struct resource) * (memno - next));
818 hose->mem_resources[--memno].flags = 0;
819 }
820}
821
822
823int pci_proc_domain(struct pci_bus *bus)
824{
825 struct pci_controller *hose = pci_bus_to_host(bus);
826
827 return 0;
828}
829
830
831
832
833static void __devinit pcibios_fixup_resources(struct pci_dev *dev)
834{
835 struct pci_controller *hose = pci_bus_to_host(dev->bus);
836 int i;
837
838 if (!hose) {
839 printk(KERN_ERR "No host bridge for PCI dev %s !\n",
840 pci_name(dev));
841 return;
842 }
843 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
844 struct resource *res = dev->resource + i;
845 if (!res->flags)
846 continue;
847 if (res->start == 0) {
848 pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]" \
849 "is unassigned\n",
850 pci_name(dev), i,
851 (unsigned long long)res->start,
852 (unsigned long long)res->end,
853 (unsigned int)res->flags);
854 res->end -= res->start;
855 res->start = 0;
856 res->flags |= IORESOURCE_UNSET;
857 continue;
858 }
859
860 pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]\n",
861 pci_name(dev), i,
862 (unsigned long long)res->start,\
863 (unsigned long long)res->end,
864 (unsigned int)res->flags);
865 }
866}
867DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources);
868
869
870
871
872
873
874static int __devinit pcibios_uninitialized_bridge_resource(struct pci_bus *bus,
875 struct resource *res)
876{
877 struct pci_controller *hose = pci_bus_to_host(bus);
878 struct pci_dev *dev = bus->self;
879 resource_size_t offset;
880 u16 command;
881 int i;
882
883
884 if (res->flags & IORESOURCE_MEM) {
885
886
887
888 if (res->start != hose->pci_mem_offset)
889 return 0;
890
891
892
893
894 pci_read_config_word(dev, PCI_COMMAND, &command);
895 if ((command & PCI_COMMAND_MEMORY) == 0)
896 return 1;
897
898
899
900
901
902 for (i = 0; i < 3; i++) {
903 if ((hose->mem_resources[i].flags & IORESOURCE_MEM) &&
904 hose->mem_resources[i].start == hose->pci_mem_offset)
905 return 0;
906 }
907
908
909
910
911 return 1;
912 } else {
913
914 offset = (unsigned long)hose->io_base_virt - _IO_BASE;
915 if (((res->start - offset) & 0xfffffffful) != 0)
916 return 0;
917
918
919
920
921
922
923
924 pci_read_config_word(dev, PCI_COMMAND, &command);
925 if (command & PCI_COMMAND_IO)
926 return 0;
927
928
929
930
931 return 1;
932 }
933}
934
935
936static void __devinit pcibios_fixup_bridge(struct pci_bus *bus)
937{
938 struct resource *res;
939 int i;
940
941 struct pci_dev *dev = bus->self;
942
943 pci_bus_for_each_resource(bus, res, i) {
944 if (!res)
945 continue;
946 if (!res->flags)
947 continue;
948 if (i >= 3 && bus->self->transparent)
949 continue;
950
951 pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x] fixup...\n",
952 pci_name(dev), i,
953 (unsigned long long)res->start,\
954 (unsigned long long)res->end,
955 (unsigned int)res->flags);
956
957
958
959
960 if (pcibios_uninitialized_bridge_resource(bus, res)) {
961 res->flags = 0;
962 pr_debug("PCI:%s (unassigned)\n",
963 pci_name(dev));
964 } else {
965 pr_debug("PCI:%s %016llx-%016llx\n",
966 pci_name(dev),
967 (unsigned long long)res->start,
968 (unsigned long long)res->end);
969 }
970 }
971}
972
973void __devinit pcibios_setup_bus_self(struct pci_bus *bus)
974{
975
976 if (bus->self != NULL)
977 pcibios_fixup_bridge(bus);
978}
979
980void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
981{
982 struct pci_dev *dev;
983
984 pr_debug("PCI: Fixup bus devices %d (%s)\n",
985 bus->number, bus->self ? pci_name(bus->self) : "PHB");
986
987 list_for_each_entry(dev, &bus->devices, bus_list) {
988
989 dev->dev.of_node = pci_device_to_OF_node(dev);
990
991
992
993
994 set_dev_node(&dev->dev, pcibus_to_node(dev->bus));
995
996
997 set_dma_ops(&dev->dev, pci_dma_ops);
998 dev->dev.archdata.dma_data = (void *)PCI_DRAM_OFFSET;
999
1000
1001 pci_read_irq_line(dev);
1002 }
1003}
1004
1005void __devinit pcibios_fixup_bus(struct pci_bus *bus)
1006{
1007
1008
1009
1010
1011 if (bus->self != NULL)
1012 pci_read_bridge_bases(bus);
1013
1014
1015 pcibios_setup_bus_self(bus);
1016
1017
1018 pcibios_setup_bus_devices(bus);
1019}
1020EXPORT_SYMBOL(pcibios_fixup_bus);
1021
1022static int skip_isa_ioresource_align(struct pci_dev *dev)
1023{
1024 return 0;
1025}
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040resource_size_t pcibios_align_resource(void *data, const struct resource *res,
1041 resource_size_t size, resource_size_t align)
1042{
1043 struct pci_dev *dev = data;
1044 resource_size_t start = res->start;
1045
1046 if (res->flags & IORESOURCE_IO) {
1047 if (skip_isa_ioresource_align(dev))
1048 return start;
1049 if (start & 0x300)
1050 start = (start + 0x3ff) & ~0x3ff;
1051 }
1052
1053 return start;
1054}
1055EXPORT_SYMBOL(pcibios_align_resource);
1056
1057
1058
1059
1060
1061static int __init reparent_resources(struct resource *parent,
1062 struct resource *res)
1063{
1064 struct resource *p, **pp;
1065 struct resource **firstpp = NULL;
1066
1067 for (pp = &parent->child; (p = *pp) != NULL; pp = &p->sibling) {
1068 if (p->end < res->start)
1069 continue;
1070 if (res->end < p->start)
1071 break;
1072 if (p->start < res->start || p->end > res->end)
1073 return -1;
1074 if (firstpp == NULL)
1075 firstpp = pp;
1076 }
1077 if (firstpp == NULL)
1078 return -1;
1079 res->parent = parent;
1080 res->child = *firstpp;
1081 res->sibling = *pp;
1082 *firstpp = res;
1083 *pp = NULL;
1084 for (p = res->child; p != NULL; p = p->sibling) {
1085 p->parent = res;
1086 pr_debug("PCI: Reparented %s [%llx..%llx] under %s\n",
1087 p->name,
1088 (unsigned long long)p->start,
1089 (unsigned long long)p->end, res->name);
1090 }
1091 return 0;
1092}
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127void pcibios_allocate_bus_resources(struct pci_bus *bus)
1128{
1129 struct pci_bus *b;
1130 int i;
1131 struct resource *res, *pr;
1132
1133 pr_debug("PCI: Allocating bus resources for %04x:%02x...\n",
1134 pci_domain_nr(bus), bus->number);
1135
1136 pci_bus_for_each_resource(bus, res, i) {
1137 if (!res || !res->flags
1138 || res->start > res->end || res->parent)
1139 continue;
1140 if (bus->parent == NULL)
1141 pr = (res->flags & IORESOURCE_IO) ?
1142 &ioport_resource : &iomem_resource;
1143 else {
1144
1145
1146
1147
1148
1149
1150 pr = pci_find_parent_resource(bus->self, res);
1151 if (pr == res) {
1152
1153
1154
1155
1156 continue;
1157 }
1158 }
1159
1160 pr_debug("PCI: %s (bus %d) bridge rsrc %d: %016llx-%016llx "
1161 "[0x%x], parent %p (%s)\n",
1162 bus->self ? pci_name(bus->self) : "PHB",
1163 bus->number, i,
1164 (unsigned long long)res->start,
1165 (unsigned long long)res->end,
1166 (unsigned int)res->flags,
1167 pr, (pr && pr->name) ? pr->name : "nil");
1168
1169 if (pr && !(pr->flags & IORESOURCE_UNSET)) {
1170 if (request_resource(pr, res) == 0)
1171 continue;
1172
1173
1174
1175
1176
1177 if (reparent_resources(pr, res) == 0)
1178 continue;
1179 }
1180 printk(KERN_WARNING "PCI: Cannot allocate resource region "
1181 "%d of PCI bridge %d, will remap\n", i, bus->number);
1182clear_resource:
1183 res->start = res->end = 0;
1184 res->flags = 0;
1185 }
1186
1187 list_for_each_entry(b, &bus->children, node)
1188 pcibios_allocate_bus_resources(b);
1189}
1190
1191static inline void __devinit alloc_resource(struct pci_dev *dev, int idx)
1192{
1193 struct resource *pr, *r = &dev->resource[idx];
1194
1195 pr_debug("PCI: Allocating %s: Resource %d: %016llx..%016llx [%x]\n",
1196 pci_name(dev), idx,
1197 (unsigned long long)r->start,
1198 (unsigned long long)r->end,
1199 (unsigned int)r->flags);
1200
1201 pr = pci_find_parent_resource(dev, r);
1202 if (!pr || (pr->flags & IORESOURCE_UNSET) ||
1203 request_resource(pr, r) < 0) {
1204 printk(KERN_WARNING "PCI: Cannot allocate resource region %d"
1205 " of device %s, will remap\n", idx, pci_name(dev));
1206 if (pr)
1207 pr_debug("PCI: parent is %p: %016llx-%016llx [%x]\n",
1208 pr,
1209 (unsigned long long)pr->start,
1210 (unsigned long long)pr->end,
1211 (unsigned int)pr->flags);
1212
1213 r->flags |= IORESOURCE_UNSET;
1214 r->end -= r->start;
1215 r->start = 0;
1216 }
1217}
1218
1219static void __init pcibios_allocate_resources(int pass)
1220{
1221 struct pci_dev *dev = NULL;
1222 int idx, disabled;
1223 u16 command;
1224 struct resource *r;
1225
1226 for_each_pci_dev(dev) {
1227 pci_read_config_word(dev, PCI_COMMAND, &command);
1228 for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) {
1229 r = &dev->resource[idx];
1230 if (r->parent)
1231 continue;
1232 if (!r->flags || (r->flags & IORESOURCE_UNSET))
1233 continue;
1234
1235
1236
1237 if (idx == PCI_ROM_RESOURCE)
1238 disabled = 1;
1239 if (r->flags & IORESOURCE_IO)
1240 disabled = !(command & PCI_COMMAND_IO);
1241 else
1242 disabled = !(command & PCI_COMMAND_MEMORY);
1243 if (pass == disabled)
1244 alloc_resource(dev, idx);
1245 }
1246 if (pass)
1247 continue;
1248 r = &dev->resource[PCI_ROM_RESOURCE];
1249 if (r->flags) {
1250
1251
1252
1253 u32 reg;
1254 pci_read_config_dword(dev, dev->rom_base_reg, ®);
1255 if (reg & PCI_ROM_ADDRESS_ENABLE) {
1256 pr_debug("PCI: Switching off ROM of %s\n",
1257 pci_name(dev));
1258 r->flags &= ~IORESOURCE_ROM_ENABLE;
1259 pci_write_config_dword(dev, dev->rom_base_reg,
1260 reg & ~PCI_ROM_ADDRESS_ENABLE);
1261 }
1262 }
1263 }
1264}
1265
1266static void __init pcibios_reserve_legacy_regions(struct pci_bus *bus)
1267{
1268 struct pci_controller *hose = pci_bus_to_host(bus);
1269 resource_size_t offset;
1270 struct resource *res, *pres;
1271 int i;
1272
1273 pr_debug("Reserving legacy ranges for domain %04x\n",
1274 pci_domain_nr(bus));
1275
1276
1277 if (!(hose->io_resource.flags & IORESOURCE_IO))
1278 goto no_io;
1279 offset = (unsigned long)hose->io_base_virt - _IO_BASE;
1280 res = kzalloc(sizeof(struct resource), GFP_KERNEL);
1281 BUG_ON(res == NULL);
1282 res->name = "Legacy IO";
1283 res->flags = IORESOURCE_IO;
1284 res->start = offset;
1285 res->end = (offset + 0xfff) & 0xfffffffful;
1286 pr_debug("Candidate legacy IO: %pR\n", res);
1287 if (request_resource(&hose->io_resource, res)) {
1288 printk(KERN_DEBUG
1289 "PCI %04x:%02x Cannot reserve Legacy IO %pR\n",
1290 pci_domain_nr(bus), bus->number, res);
1291 kfree(res);
1292 }
1293
1294 no_io:
1295
1296 offset = hose->pci_mem_offset;
1297 pr_debug("hose mem offset: %016llx\n", (unsigned long long)offset);
1298 for (i = 0; i < 3; i++) {
1299 pres = &hose->mem_resources[i];
1300 if (!(pres->flags & IORESOURCE_MEM))
1301 continue;
1302 pr_debug("hose mem res: %pR\n", pres);
1303 if ((pres->start - offset) <= 0xa0000 &&
1304 (pres->end - offset) >= 0xbffff)
1305 break;
1306 }
1307 if (i >= 3)
1308 return;
1309 res = kzalloc(sizeof(struct resource), GFP_KERNEL);
1310 BUG_ON(res == NULL);
1311 res->name = "Legacy VGA memory";
1312 res->flags = IORESOURCE_MEM;
1313 res->start = 0xa0000 + offset;
1314 res->end = 0xbffff + offset;
1315 pr_debug("Candidate VGA memory: %pR\n", res);
1316 if (request_resource(pres, res)) {
1317 printk(KERN_DEBUG
1318 "PCI %04x:%02x Cannot reserve VGA memory %pR\n",
1319 pci_domain_nr(bus), bus->number, res);
1320 kfree(res);
1321 }
1322}
1323
1324void __init pcibios_resource_survey(void)
1325{
1326 struct pci_bus *b;
1327
1328
1329
1330
1331 list_for_each_entry(b, &pci_root_buses, node)
1332 pcibios_allocate_bus_resources(b);
1333
1334 pcibios_allocate_resources(0);
1335 pcibios_allocate_resources(1);
1336
1337
1338
1339
1340
1341 list_for_each_entry(b, &pci_root_buses, node)
1342 pcibios_reserve_legacy_regions(b);
1343
1344
1345 pr_debug("PCI: Assigning unassigned resources...\n");
1346 pci_assign_unassigned_resources();
1347}
1348
1349#ifdef CONFIG_HOTPLUG
1350
1351
1352
1353
1354
1355
1356void __devinit pcibios_claim_one_bus(struct pci_bus *bus)
1357{
1358 struct pci_dev *dev;
1359 struct pci_bus *child_bus;
1360
1361 list_for_each_entry(dev, &bus->devices, bus_list) {
1362 int i;
1363
1364 for (i = 0; i < PCI_NUM_RESOURCES; i++) {
1365 struct resource *r = &dev->resource[i];
1366
1367 if (r->parent || !r->start || !r->flags)
1368 continue;
1369
1370 pr_debug("PCI: Claiming %s: "
1371 "Resource %d: %016llx..%016llx [%x]\n",
1372 pci_name(dev), i,
1373 (unsigned long long)r->start,
1374 (unsigned long long)r->end,
1375 (unsigned int)r->flags);
1376
1377 pci_claim_resource(dev, i);
1378 }
1379 }
1380
1381 list_for_each_entry(child_bus, &bus->children, node)
1382 pcibios_claim_one_bus(child_bus);
1383}
1384EXPORT_SYMBOL_GPL(pcibios_claim_one_bus);
1385
1386
1387
1388
1389
1390
1391
1392
1393void pcibios_finish_adding_to_bus(struct pci_bus *bus)
1394{
1395 pr_debug("PCI: Finishing adding to hotplug bus %04x:%02x\n",
1396 pci_domain_nr(bus), bus->number);
1397
1398
1399 pcibios_allocate_bus_resources(bus);
1400 pcibios_claim_one_bus(bus);
1401
1402
1403 pci_bus_add_devices(bus);
1404
1405
1406
1407}
1408EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);
1409
1410#endif
1411
1412int pcibios_enable_device(struct pci_dev *dev, int mask)
1413{
1414 return pci_enable_resources(dev, mask);
1415}
1416
1417static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources)
1418{
1419 unsigned long io_offset;
1420 struct resource *res;
1421 int i;
1422
1423
1424 res = &hose->io_resource;
1425
1426
1427 io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
1428 res->start = (res->start + io_offset) & 0xffffffffu;
1429 res->end = (res->end + io_offset) & 0xffffffffu;
1430
1431 if (!res->flags) {
1432 printk(KERN_WARNING "PCI: I/O resource not set for host"
1433 " bridge %s (domain %d)\n",
1434 hose->dn->full_name, hose->global_number);
1435
1436 res->start = (unsigned long)hose->io_base_virt - isa_io_base;
1437 res->end = res->start + IO_SPACE_LIMIT;
1438 res->flags = IORESOURCE_IO;
1439 }
1440 pci_add_resource_offset(resources, res, hose->io_base_virt - _IO_BASE);
1441
1442 pr_debug("PCI: PHB IO resource = %016llx-%016llx [%lx]\n",
1443 (unsigned long long)res->start,
1444 (unsigned long long)res->end,
1445 (unsigned long)res->flags);
1446
1447
1448 for (i = 0; i < 3; ++i) {
1449 res = &hose->mem_resources[i];
1450 if (!res->flags) {
1451 if (i > 0)
1452 continue;
1453 printk(KERN_ERR "PCI: Memory resource 0 not set for "
1454 "host bridge %s (domain %d)\n",
1455 hose->dn->full_name, hose->global_number);
1456
1457
1458 res->start = hose->pci_mem_offset;
1459 res->end = (resource_size_t)-1LL;
1460 res->flags = IORESOURCE_MEM;
1461
1462 }
1463 pci_add_resource_offset(resources, res, hose->pci_mem_offset);
1464
1465 pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n",
1466 i, (unsigned long long)res->start,
1467 (unsigned long long)res->end,
1468 (unsigned long)res->flags);
1469 }
1470
1471 pr_debug("PCI: PHB MEM offset = %016llx\n",
1472 (unsigned long long)hose->pci_mem_offset);
1473 pr_debug("PCI: PHB IO offset = %08lx\n",
1474 (unsigned long)hose->io_base_virt - _IO_BASE);
1475}
1476
1477struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus)
1478{
1479 struct pci_controller *hose = bus->sysdata;
1480
1481 return of_node_get(hose->dn);
1482}
1483
1484static void __devinit pcibios_scan_phb(struct pci_controller *hose)
1485{
1486 LIST_HEAD(resources);
1487 struct pci_bus *bus;
1488 struct device_node *node = hose->dn;
1489
1490 pr_debug("PCI: Scanning PHB %s\n", of_node_full_name(node));
1491
1492 pcibios_setup_phb_resources(hose, &resources);
1493
1494 bus = pci_scan_root_bus(hose->parent, hose->first_busno,
1495 hose->ops, hose, &resources);
1496 if (bus == NULL) {
1497 printk(KERN_ERR "Failed to create bus for PCI domain %04x\n",
1498 hose->global_number);
1499 pci_free_resource_list(&resources);
1500 return;
1501 }
1502 bus->busn_res.start = hose->first_busno;
1503 hose->bus = bus;
1504
1505 hose->last_busno = bus->busn_res.end;
1506}
1507
1508static int __init pcibios_init(void)
1509{
1510 struct pci_controller *hose, *tmp;
1511 int next_busno = 0;
1512
1513 printk(KERN_INFO "PCI: Probing PCI hardware\n");
1514
1515
1516 list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
1517 hose->last_busno = 0xff;
1518 pcibios_scan_phb(hose);
1519 if (next_busno <= hose->last_busno)
1520 next_busno = hose->last_busno + 1;
1521 }
1522 pci_bus_count = next_busno;
1523
1524
1525 pcibios_resource_survey();
1526
1527 return 0;
1528}
1529
1530subsys_initcall(pcibios_init);
1531
1532static struct pci_controller *pci_bus_to_hose(int bus)
1533{
1534 struct pci_controller *hose, *tmp;
1535
1536 list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
1537 if (bus >= hose->first_busno && bus <= hose->last_busno)
1538 return hose;
1539 return NULL;
1540}
1541
1542
1543
1544
1545
1546
1547
1548long sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn)
1549{
1550 struct pci_controller *hose;
1551 long result = -EOPNOTSUPP;
1552
1553 hose = pci_bus_to_hose(bus);
1554 if (!hose)
1555 return -ENODEV;
1556
1557 switch (which) {
1558 case IOBASE_BRIDGE_NUMBER:
1559 return (long)hose->first_busno;
1560 case IOBASE_MEMORY:
1561 return (long)hose->pci_mem_offset;
1562 case IOBASE_IO:
1563 return (long)hose->io_base_phys;
1564 case IOBASE_ISA_IO:
1565 return (long)isa_io_base;
1566 case IOBASE_ISA_MEM:
1567 return (long)isa_mem_base;
1568 }
1569
1570 return result;
1571}
1572
1573
1574
1575
1576
1577#define NULL_PCI_OP(rw, size, type) \
1578static int \
1579null_##rw##_config_##size(struct pci_dev *dev, int offset, type val) \
1580{ \
1581 return PCIBIOS_DEVICE_NOT_FOUND; \
1582}
1583
1584static int
1585null_read_config(struct pci_bus *bus, unsigned int devfn, int offset,
1586 int len, u32 *val)
1587{
1588 return PCIBIOS_DEVICE_NOT_FOUND;
1589}
1590
1591static int
1592null_write_config(struct pci_bus *bus, unsigned int devfn, int offset,
1593 int len, u32 val)
1594{
1595 return PCIBIOS_DEVICE_NOT_FOUND;
1596}
1597
1598static struct pci_ops null_pci_ops = {
1599 .read = null_read_config,
1600 .write = null_write_config,
1601};
1602
1603
1604
1605
1606
1607static struct pci_bus *
1608fake_pci_bus(struct pci_controller *hose, int busnr)
1609{
1610 static struct pci_bus bus;
1611
1612 if (!hose)
1613 printk(KERN_ERR "Can't find hose for PCI bus %d!\n", busnr);
1614
1615 bus.number = busnr;
1616 bus.sysdata = hose;
1617 bus.ops = hose ? hose->ops : &null_pci_ops;
1618 return &bus;
1619}
1620
1621#define EARLY_PCI_OP(rw, size, type) \
1622int early_##rw##_config_##size(struct pci_controller *hose, int bus, \
1623 int devfn, int offset, type value) \
1624{ \
1625 return pci_bus_##rw##_config_##size(fake_pci_bus(hose, bus), \
1626 devfn, offset, value); \
1627}
1628
1629EARLY_PCI_OP(read, byte, u8 *)
1630EARLY_PCI_OP(read, word, u16 *)
1631EARLY_PCI_OP(read, dword, u32 *)
1632EARLY_PCI_OP(write, byte, u8)
1633EARLY_PCI_OP(write, word, u16)
1634EARLY_PCI_OP(write, dword, u32)
1635
1636int early_find_capability(struct pci_controller *hose, int bus, int devfn,
1637 int cap)
1638{
1639 return pci_bus_find_capability(fake_pci_bus(hose, bus), devfn, cap);
1640}
1641
1642