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