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