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