2 * Port for PPC64 David Engebretsen, IBM Corp.
3 * Contains common pci routines for ppc64 platform, pSeries and iSeries brands.
5 * Copyright (C) 2003 Anton Blanchard <anton@au.ibm.com>, IBM
6 * Rework, based on alpha PCI code.
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version.
16 #include <linux/config.h>
17 #include <linux/kernel.h>
18 #include <linux/pci.h>
19 #include <linux/string.h>
20 #include <linux/init.h>
21 #include <linux/bootmem.h>
23 #include <linux/list.h>
25 #include <asm/processor.h>
28 #include <asm/pci-bridge.h>
29 #include <asm/byteorder.h>
31 #include <asm/machdep.h>
37 #define DBG(fmt...) udbg_printf(fmt)
42 unsigned long pci_probe_only
= 1;
43 unsigned long pci_assign_all_buses
= 0;
46 * legal IO pages under MAX_ISA_PORT. This is to ensure we don't touch
47 * devices we don't have access to.
49 unsigned long io_page_mask
;
51 EXPORT_SYMBOL(io_page_mask
);
54 unsigned int pcibios_assign_all_busses(void)
56 return pci_assign_all_buses
;
59 /* pci_io_base -- the base address from which io bars are offsets.
60 * This is the lowest I/O base address (so bar values are always positive),
61 * and it *must* be the start of ISA space if an ISA bus exists because
62 * ISA drivers use hard coded offsets. If no ISA bus exists a dummy
63 * page is mapped and isa_io_limit prevents access to it.
65 unsigned long isa_io_base
; /* NULL if no ISA bus */
66 EXPORT_SYMBOL(isa_io_base
);
67 unsigned long pci_io_base
;
68 EXPORT_SYMBOL(pci_io_base
);
70 void iSeries_pcibios_init(void);
74 struct dma_mapping_ops pci_dma_ops
;
75 EXPORT_SYMBOL(pci_dma_ops
);
77 int global_phb_number
; /* Global phb counter */
79 /* Cached ISA bridge dev. */
80 struct pci_dev
*ppc64_isabridge_dev
= NULL
;
82 static void fixup_broken_pcnet32(struct pci_dev
* dev
)
84 if ((dev
->class>>8 == PCI_CLASS_NETWORK_ETHERNET
)) {
85 dev
->vendor
= PCI_VENDOR_ID_AMD
;
86 pci_write_config_word(dev
, PCI_VENDOR_ID
, PCI_VENDOR_ID_AMD
);
90 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TRIDENT
, PCI_ANY_ID
, fixup_broken_pcnet32
);
92 void pcibios_resource_to_bus(struct pci_dev
*dev
, struct pci_bus_region
*region
,
95 unsigned long offset
= 0;
96 struct pci_controller
*hose
= pci_bus_to_host(dev
->bus
);
101 if (res
->flags
& IORESOURCE_IO
)
102 offset
= (unsigned long)hose
->io_base_virt
- pci_io_base
;
104 if (res
->flags
& IORESOURCE_MEM
)
105 offset
= hose
->pci_mem_offset
;
107 region
->start
= res
->start
- offset
;
108 region
->end
= res
->end
- offset
;
111 void pcibios_bus_to_resource(struct pci_dev
*dev
, struct resource
*res
,
112 struct pci_bus_region
*region
)
114 unsigned long offset
= 0;
115 struct pci_controller
*hose
= pci_bus_to_host(dev
->bus
);
120 if (res
->flags
& IORESOURCE_IO
)
121 offset
= (unsigned long)hose
->io_base_virt
- pci_io_base
;
123 if (res
->flags
& IORESOURCE_MEM
)
124 offset
= hose
->pci_mem_offset
;
126 res
->start
= region
->start
+ offset
;
127 res
->end
= region
->end
+ offset
;
130 #ifdef CONFIG_HOTPLUG
131 EXPORT_SYMBOL(pcibios_resource_to_bus
);
132 EXPORT_SYMBOL(pcibios_bus_to_resource
);
136 * We need to avoid collisions with `mirrored' VGA ports
137 * and other strange ISA hardware, so we always want the
138 * addresses to be allocated in the 0x000-0x0ff region
141 * Why? Because some silly external IO cards only decode
142 * the low 10 bits of the IO address. The 0x00-0xff region
143 * is reserved for motherboard devices that decode all 16
144 * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
145 * but we want to try to avoid allocating at 0x2900-0x2bff
146 * which might have be mirrored at 0x0100-0x03ff..
148 void pcibios_align_resource(void *data
, struct resource
*res
,
149 unsigned long size
, unsigned long align
)
151 struct pci_dev
*dev
= data
;
152 struct pci_controller
*hose
= pci_bus_to_host(dev
->bus
);
153 unsigned long start
= res
->start
;
154 unsigned long alignto
;
156 if (res
->flags
& IORESOURCE_IO
) {
157 unsigned long offset
= (unsigned long)hose
->io_base_virt
-
159 /* Make sure we start at our min on all hoses */
160 if (start
- offset
< PCIBIOS_MIN_IO
)
161 start
= PCIBIOS_MIN_IO
+ offset
;
164 * Put everything into 0x00-0xff region modulo 0x400
167 start
= (start
+ 0x3ff) & ~0x3ff;
169 } else if (res
->flags
& IORESOURCE_MEM
) {
170 /* Make sure we start at our min on all hoses */
171 if (start
- hose
->pci_mem_offset
< PCIBIOS_MIN_MEM
)
172 start
= PCIBIOS_MIN_MEM
+ hose
->pci_mem_offset
;
174 /* Align to multiple of size of minimum base. */
175 alignto
= max(0x1000UL
, align
);
176 start
= ALIGN(start
, alignto
);
182 static DEFINE_SPINLOCK(hose_spinlock
);
185 * pci_controller(phb) initialized common variables.
187 void __devinit
pci_setup_pci_controller(struct pci_controller
*hose
)
189 memset(hose
, 0, sizeof(struct pci_controller
));
191 spin_lock(&hose_spinlock
);
192 hose
->global_number
= global_phb_number
++;
193 list_add_tail(&hose
->list_node
, &hose_list
);
194 spin_unlock(&hose_spinlock
);
197 static void __init
pcibios_claim_one_bus(struct pci_bus
*b
)
200 struct pci_bus
*child_bus
;
202 list_for_each_entry(dev
, &b
->devices
, bus_list
) {
205 for (i
= 0; i
< PCI_NUM_RESOURCES
; i
++) {
206 struct resource
*r
= &dev
->resource
[i
];
208 if (r
->parent
|| !r
->start
|| !r
->flags
)
210 pci_claim_resource(dev
, i
);
214 list_for_each_entry(child_bus
, &b
->children
, node
)
215 pcibios_claim_one_bus(child_bus
);
218 #ifndef CONFIG_PPC_ISERIES
219 static void __init
pcibios_claim_of_setup(void)
223 list_for_each_entry(b
, &pci_root_buses
, node
)
224 pcibios_claim_one_bus(b
);
228 static int __init
pcibios_init(void)
230 struct pci_controller
*hose
, *tmp
;
233 /* For now, override phys_mem_access_prot. If we need it,
234 * later, we may move that initialization to each ppc_md
236 ppc_md
.phys_mem_access_prot
= pci_phys_mem_access_prot
;
238 #ifdef CONFIG_PPC_ISERIES
239 iSeries_pcibios_init();
242 printk("PCI: Probing PCI hardware\n");
244 /* Scan all of the recorded PCI controllers. */
245 list_for_each_entry_safe(hose
, tmp
, &hose_list
, list_node
) {
246 hose
->last_busno
= 0xff;
247 bus
= pci_scan_bus(hose
->first_busno
, hose
->ops
,
250 hose
->last_busno
= bus
->subordinate
;
253 #ifndef CONFIG_PPC_ISERIES
255 pcibios_claim_of_setup();
257 /* FIXME: `else' will be removed when
258 pci_assign_unassigned_resources() is able to work
259 correctly with [partially] allocated PCI tree. */
260 pci_assign_unassigned_resources();
261 #endif /* !CONFIG_PPC_ISERIES */
263 /* Call machine dependent final fixup */
264 if (ppc_md
.pcibios_fixup
)
265 ppc_md
.pcibios_fixup();
267 /* Cache the location of the ISA bridge (if we have one) */
268 ppc64_isabridge_dev
= pci_get_class(PCI_CLASS_BRIDGE_ISA
<< 8, NULL
);
269 if (ppc64_isabridge_dev
!= NULL
)
270 printk("ISA bridge at %s\n", pci_name(ppc64_isabridge_dev
));
272 printk("PCI: Probing PCI hardware done\n");
277 subsys_initcall(pcibios_init
);
279 char __init
*pcibios_setup(char *str
)
284 int pcibios_enable_device(struct pci_dev
*dev
, int mask
)
289 pci_read_config_word(dev
, PCI_COMMAND
, &cmd
);
292 for (i
= 0; i
< PCI_NUM_RESOURCES
; i
++) {
293 struct resource
*res
= &dev
->resource
[i
];
295 /* Only set up the requested stuff */
296 if (!(mask
& (1<<i
)))
299 if (res
->flags
& IORESOURCE_IO
)
300 cmd
|= PCI_COMMAND_IO
;
301 if (res
->flags
& IORESOURCE_MEM
)
302 cmd
|= PCI_COMMAND_MEMORY
;
306 printk(KERN_DEBUG
"PCI: Enabling device: (%s), cmd %x\n",
308 /* Enable the appropriate bits in the PCI command register. */
309 pci_write_config_word(dev
, PCI_COMMAND
, cmd
);
315 * Return the domain number for this bus.
317 int pci_domain_nr(struct pci_bus
*bus
)
319 #ifdef CONFIG_PPC_ISERIES
322 struct pci_controller
*hose
= pci_bus_to_host(bus
);
324 return hose
->global_number
;
328 EXPORT_SYMBOL(pci_domain_nr
);
330 /* Decide whether to display the domain number in /proc */
331 int pci_proc_domain(struct pci_bus
*bus
)
333 #ifdef CONFIG_PPC_ISERIES
336 struct pci_controller
*hose
= pci_bus_to_host(bus
);
342 * Platform support for /proc/bus/pci/X/Y mmap()s,
343 * modelled on the sparc64 implementation by Dave Miller.
348 * Adjust vm_pgoff of VMA such that it is the physical page offset
349 * corresponding to the 32-bit pci bus offset for DEV requested by the user.
351 * Basically, the user finds the base address for his device which he wishes
352 * to mmap. They read the 32-bit value from the config space base register,
353 * add whatever PAGE_SIZE multiple offset they wish, and feed this into the
354 * offset parameter of mmap on /proc/bus/pci/XXX for that device.
356 * Returns negative error code on failure, zero on success.
358 static struct resource
*__pci_mmap_make_offset(struct pci_dev
*dev
,
359 unsigned long *offset
,
360 enum pci_mmap_state mmap_state
)
362 struct pci_controller
*hose
= pci_bus_to_host(dev
->bus
);
363 unsigned long io_offset
= 0;
367 return NULL
; /* should never happen */
369 /* If memory, add on the PCI bridge address offset */
370 if (mmap_state
== pci_mmap_mem
) {
371 *offset
+= hose
->pci_mem_offset
;
372 res_bit
= IORESOURCE_MEM
;
374 io_offset
= (unsigned long)hose
->io_base_virt
- pci_io_base
;
375 *offset
+= io_offset
;
376 res_bit
= IORESOURCE_IO
;
380 * Check that the offset requested corresponds to one of the
381 * resources of the device.
383 for (i
= 0; i
<= PCI_ROM_RESOURCE
; i
++) {
384 struct resource
*rp
= &dev
->resource
[i
];
385 int flags
= rp
->flags
;
387 /* treat ROM as memory (should be already) */
388 if (i
== PCI_ROM_RESOURCE
)
389 flags
|= IORESOURCE_MEM
;
391 /* Active and same type? */
392 if ((flags
& res_bit
) == 0)
395 /* In the range of this resource? */
396 if (*offset
< (rp
->start
& PAGE_MASK
) || *offset
> rp
->end
)
399 /* found it! construct the final physical address */
400 if (mmap_state
== pci_mmap_io
)
401 *offset
+= hose
->io_base_phys
- io_offset
;
409 * Set vm_page_prot of VMA, as appropriate for this architecture, for a pci
412 static pgprot_t
__pci_mmap_set_pgprot(struct pci_dev
*dev
, struct resource
*rp
,
414 enum pci_mmap_state mmap_state
,
417 unsigned long prot
= pgprot_val(protection
);
419 /* Write combine is always 0 on non-memory space mappings. On
420 * memory space, if the user didn't pass 1, we check for a
421 * "prefetchable" resource. This is a bit hackish, but we use
422 * this to workaround the inability of /sysfs to provide a write
425 if (mmap_state
!= pci_mmap_mem
)
427 else if (write_combine
== 0) {
428 if (rp
->flags
& IORESOURCE_PREFETCH
)
432 /* XXX would be nice to have a way to ask for write-through */
433 prot
|= _PAGE_NO_CACHE
;
435 prot
&= ~_PAGE_GUARDED
;
437 prot
|= _PAGE_GUARDED
;
439 printk("PCI map for %s:%lx, prot: %lx\n", pci_name(dev
), rp
->start
,
442 return __pgprot(prot
);
446 * This one is used by /dev/mem and fbdev who have no clue about the
447 * PCI device, it tries to find the PCI device first and calls the
450 pgprot_t
pci_phys_mem_access_prot(struct file
*file
,
451 unsigned long offset
,
455 struct pci_dev
*pdev
= NULL
;
456 struct resource
*found
= NULL
;
457 unsigned long prot
= pgprot_val(protection
);
460 if (page_is_ram(offset
>> PAGE_SHIFT
))
461 return __pgprot(prot
);
463 prot
|= _PAGE_NO_CACHE
| _PAGE_GUARDED
;
465 for_each_pci_dev(pdev
) {
466 for (i
= 0; i
<= PCI_ROM_RESOURCE
; i
++) {
467 struct resource
*rp
= &pdev
->resource
[i
];
468 int flags
= rp
->flags
;
470 /* Active and same type? */
471 if ((flags
& IORESOURCE_MEM
) == 0)
473 /* In the range of this resource? */
474 if (offset
< (rp
->start
& PAGE_MASK
) ||
484 if (found
->flags
& IORESOURCE_PREFETCH
)
485 prot
&= ~_PAGE_GUARDED
;
489 DBG("non-PCI map for %lx, prot: %lx\n", offset
, prot
);
491 return __pgprot(prot
);
496 * Perform the actual remap of the pages for a PCI device mapping, as
497 * appropriate for this architecture. The region in the process to map
498 * is described by vm_start and vm_end members of VMA, the base physical
499 * address is found in vm_pgoff.
500 * The pci device structure is provided so that architectures may make mapping
501 * decisions on a per-device or per-bus basis.
503 * Returns a negative error code on failure, zero on success.
505 int pci_mmap_page_range(struct pci_dev
*dev
, struct vm_area_struct
*vma
,
506 enum pci_mmap_state mmap_state
,
509 unsigned long offset
= vma
->vm_pgoff
<< PAGE_SHIFT
;
513 rp
= __pci_mmap_make_offset(dev
, &offset
, mmap_state
);
517 vma
->vm_pgoff
= offset
>> PAGE_SHIFT
;
518 vma
->vm_flags
|= VM_SHM
| VM_LOCKED
| VM_IO
;
519 vma
->vm_page_prot
= __pci_mmap_set_pgprot(dev
, rp
,
521 mmap_state
, write_combine
);
523 ret
= remap_pfn_range(vma
, vma
->vm_start
, vma
->vm_pgoff
,
524 vma
->vm_end
- vma
->vm_start
, vma
->vm_page_prot
);
529 #ifdef CONFIG_PPC_MULTIPLATFORM
530 static ssize_t
pci_show_devspec(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
532 struct pci_dev
*pdev
;
533 struct device_node
*np
;
535 pdev
= to_pci_dev (dev
);
536 np
= pci_device_to_OF_node(pdev
);
537 if (np
== NULL
|| np
->full_name
== NULL
)
539 return sprintf(buf
, "%s", np
->full_name
);
541 static DEVICE_ATTR(devspec
, S_IRUGO
, pci_show_devspec
, NULL
);
542 #endif /* CONFIG_PPC_MULTIPLATFORM */
544 void pcibios_add_platform_entries(struct pci_dev
*pdev
)
546 #ifdef CONFIG_PPC_MULTIPLATFORM
547 device_create_file(&pdev
->dev
, &dev_attr_devspec
);
548 #endif /* CONFIG_PPC_MULTIPLATFORM */
551 #ifdef CONFIG_PPC_MULTIPLATFORM
553 #define ISA_SPACE_MASK 0x1
554 #define ISA_SPACE_IO 0x1
556 static void __devinit
pci_process_ISA_OF_ranges(struct device_node
*isa_node
,
557 unsigned long phb_io_base_phys
,
558 void __iomem
* phb_io_base_virt
)
560 struct isa_range
*range
;
561 unsigned long pci_addr
;
562 unsigned int isa_addr
;
566 range
= (struct isa_range
*) get_property(isa_node
, "ranges", &rlen
);
567 if (range
== NULL
|| (rlen
< sizeof(struct isa_range
))) {
568 printk(KERN_ERR
"no ISA ranges or unexpected isa range size,"
570 __ioremap_explicit(phb_io_base_phys
,
571 (unsigned long)phb_io_base_virt
,
572 0x10000, _PAGE_NO_CACHE
| _PAGE_GUARDED
);
576 /* From "ISA Binding to 1275"
577 * The ranges property is laid out as an array of elements,
578 * each of which comprises:
579 * cells 0 - 1: an ISA address
580 * cells 2 - 4: a PCI address
581 * (size depending on dev->n_addr_cells)
582 * cell 5: the size of the range
584 if ((range
->isa_addr
.a_hi
&& ISA_SPACE_MASK
) == ISA_SPACE_IO
) {
585 isa_addr
= range
->isa_addr
.a_lo
;
586 pci_addr
= (unsigned long) range
->pci_addr
.a_mid
<< 32 |
587 range
->pci_addr
.a_lo
;
589 /* Assume these are both zero */
590 if ((pci_addr
!= 0) || (isa_addr
!= 0)) {
591 printk(KERN_ERR
"unexpected isa to pci mapping: %s\n",
596 size
= PAGE_ALIGN(range
->size
);
598 __ioremap_explicit(phb_io_base_phys
,
599 (unsigned long) phb_io_base_virt
,
600 size
, _PAGE_NO_CACHE
| _PAGE_GUARDED
);
604 void __devinit
pci_process_bridge_OF_ranges(struct pci_controller
*hose
,
605 struct device_node
*dev
)
607 unsigned int *ranges
;
611 struct resource
*res
;
612 int np
, na
= prom_n_addr_cells(dev
);
613 unsigned long pci_addr
, cpu_phys_addr
;
617 /* From "PCI Binding to 1275"
618 * The ranges property is laid out as an array of elements,
619 * each of which comprises:
620 * cells 0 - 2: a PCI address
621 * cells 3 or 3+4: a CPU physical address
622 * (size depending on dev->n_addr_cells)
623 * cells 4+5 or 5+6: the size of the range
626 hose
->io_base_phys
= 0;
627 ranges
= (unsigned int *) get_property(dev
, "ranges", &rlen
);
628 while ((rlen
-= np
* sizeof(unsigned int)) >= 0) {
630 pci_addr
= (unsigned long)ranges
[1] << 32 | ranges
[2];
632 cpu_phys_addr
= ranges
[3];
634 cpu_phys_addr
= cpu_phys_addr
<< 32 | ranges
[4];
636 size
= (unsigned long)ranges
[na
+3] << 32 | ranges
[na
+4];
639 switch ((ranges
[0] >> 24) & 0x3) {
640 case 1: /* I/O space */
641 hose
->io_base_phys
= cpu_phys_addr
;
642 hose
->pci_io_size
= size
;
644 res
= &hose
->io_resource
;
645 res
->flags
= IORESOURCE_IO
;
646 res
->start
= pci_addr
;
647 DBG("phb%d: IO 0x%lx -> 0x%lx\n", hose
->global_number
,
648 res
->start
, res
->start
+ size
- 1);
650 case 2: /* memory space */
652 while (memno
< 3 && hose
->mem_resources
[memno
].flags
)
656 hose
->pci_mem_offset
= cpu_phys_addr
- pci_addr
;
658 res
= &hose
->mem_resources
[memno
];
659 res
->flags
= IORESOURCE_MEM
;
660 res
->start
= cpu_phys_addr
;
661 DBG("phb%d: MEM 0x%lx -> 0x%lx\n", hose
->global_number
,
662 res
->start
, res
->start
+ size
- 1);
667 res
->name
= dev
->full_name
;
668 res
->end
= res
->start
+ size
- 1;
677 void __init
pci_setup_phb_io(struct pci_controller
*hose
, int primary
)
679 unsigned long size
= hose
->pci_io_size
;
680 unsigned long io_virt_offset
;
681 struct resource
*res
;
682 struct device_node
*isa_dn
;
684 hose
->io_base_virt
= reserve_phb_iospace(size
);
685 DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n",
686 hose
->global_number
, hose
->io_base_phys
,
687 (unsigned long) hose
->io_base_virt
);
690 pci_io_base
= (unsigned long)hose
->io_base_virt
;
691 isa_dn
= of_find_node_by_type(NULL
, "isa");
693 isa_io_base
= pci_io_base
;
694 pci_process_ISA_OF_ranges(isa_dn
, hose
->io_base_phys
,
702 io_virt_offset
= (unsigned long)hose
->io_base_virt
- pci_io_base
;
703 res
= &hose
->io_resource
;
704 res
->start
+= io_virt_offset
;
705 res
->end
+= io_virt_offset
;
708 void __devinit
pci_setup_phb_io_dynamic(struct pci_controller
*hose
,
711 unsigned long size
= hose
->pci_io_size
;
712 unsigned long io_virt_offset
;
713 struct resource
*res
;
715 hose
->io_base_virt
= __ioremap(hose
->io_base_phys
, size
,
716 _PAGE_NO_CACHE
| _PAGE_GUARDED
);
717 DBG("phb%d io_base_phys 0x%lx io_base_virt 0x%lx\n",
718 hose
->global_number
, hose
->io_base_phys
,
719 (unsigned long) hose
->io_base_virt
);
722 pci_io_base
= (unsigned long)hose
->io_base_virt
;
724 io_virt_offset
= (unsigned long)hose
->io_base_virt
- pci_io_base
;
725 res
= &hose
->io_resource
;
726 res
->start
+= io_virt_offset
;
727 res
->end
+= io_virt_offset
;
731 static int get_bus_io_range(struct pci_bus
*bus
, unsigned long *start_phys
,
732 unsigned long *start_virt
, unsigned long *size
)
734 struct pci_controller
*hose
= pci_bus_to_host(bus
);
735 struct pci_bus_region region
;
736 struct resource
*res
;
739 res
= bus
->resource
[0];
740 pcibios_resource_to_bus(bus
->self
, ®ion
, res
);
741 *start_phys
= hose
->io_base_phys
+ region
.start
;
742 *start_virt
= (unsigned long) hose
->io_base_virt
+
744 if (region
.end
> region
.start
)
745 *size
= region
.end
- region
.start
+ 1;
747 printk("%s(): unexpected region 0x%lx->0x%lx\n",
748 __FUNCTION__
, region
.start
, region
.end
);
754 res
= &hose
->io_resource
;
755 *start_phys
= hose
->io_base_phys
;
756 *start_virt
= (unsigned long) hose
->io_base_virt
;
757 if (res
->end
> res
->start
)
758 *size
= res
->end
- res
->start
+ 1;
760 printk("%s(): unexpected region 0x%lx->0x%lx\n",
761 __FUNCTION__
, res
->start
, res
->end
);
769 int unmap_bus_range(struct pci_bus
*bus
)
771 unsigned long start_phys
;
772 unsigned long start_virt
;
776 printk(KERN_ERR
"%s() expected bus\n", __FUNCTION__
);
780 if (get_bus_io_range(bus
, &start_phys
, &start_virt
, &size
))
782 if (iounmap_explicit((void __iomem
*) start_virt
, size
))
787 EXPORT_SYMBOL(unmap_bus_range
);
789 int remap_bus_range(struct pci_bus
*bus
)
791 unsigned long start_phys
;
792 unsigned long start_virt
;
796 printk(KERN_ERR
"%s() expected bus\n", __FUNCTION__
);
801 if (get_bus_io_range(bus
, &start_phys
, &start_virt
, &size
))
803 printk("mapping IO %lx -> %lx, size: %lx\n", start_phys
, start_virt
, size
);
804 if (__ioremap_explicit(start_phys
, start_virt
, size
,
805 _PAGE_NO_CACHE
| _PAGE_GUARDED
))
810 EXPORT_SYMBOL(remap_bus_range
);
812 void phbs_remap_io(void)
814 struct pci_controller
*hose
, *tmp
;
816 list_for_each_entry_safe(hose
, tmp
, &hose_list
, list_node
)
817 remap_bus_range(hose
->bus
);
821 * ppc64 can have multifunction devices that do not respond to function 0.
822 * In this case we must scan all functions.
824 int pcibios_scan_all_fns(struct pci_bus
*bus
, int devfn
)
826 struct device_node
*busdn
, *dn
;
829 busdn
= pci_device_to_OF_node(bus
->self
);
831 busdn
= bus
->sysdata
; /* must be a phb */
837 * Check to see if there is any of the 8 functions are in the
838 * device tree. If they are then we need to scan all the
839 * functions of this slot.
841 for (dn
= busdn
->child
; dn
; dn
= dn
->sibling
)
842 if ((dn
->devfn
>> 3) == (devfn
>> 3))
849 void __devinit
pcibios_fixup_device_resources(struct pci_dev
*dev
,
852 /* Update device resources. */
853 struct pci_controller
*hose
= pci_bus_to_host(bus
);
856 for (i
= 0; i
< PCI_NUM_RESOURCES
; i
++) {
857 if (dev
->resource
[i
].flags
& IORESOURCE_IO
) {
858 unsigned long offset
= (unsigned long)hose
->io_base_virt
860 unsigned long start
, end
, mask
;
862 start
= dev
->resource
[i
].start
+= offset
;
863 end
= dev
->resource
[i
].end
+= offset
;
865 /* Need to allow IO access to pages that are in the
867 if (start
< MAX_ISA_PORT
) {
868 if (end
> MAX_ISA_PORT
)
871 start
>>= PAGE_SHIFT
;
874 /* get the range of pages for the map */
875 mask
= ((1 << (end
+1))-1) ^ ((1 << start
)-1);
876 io_page_mask
|= mask
;
879 else if (dev
->resource
[i
].flags
& IORESOURCE_MEM
) {
880 dev
->resource
[i
].start
+= hose
->pci_mem_offset
;
881 dev
->resource
[i
].end
+= hose
->pci_mem_offset
;
885 EXPORT_SYMBOL(pcibios_fixup_device_resources
);
887 void __devinit
pcibios_fixup_bus(struct pci_bus
*bus
)
889 struct pci_controller
*hose
= pci_bus_to_host(bus
);
890 struct pci_dev
*dev
= bus
->self
;
891 struct resource
*res
;
898 bus
->resource
[0] = res
= &hose
->io_resource
;
900 if (res
->flags
&& request_resource(&ioport_resource
, res
))
901 printk(KERN_ERR
"Failed to request IO on "
902 "PCI domain %d\n", pci_domain_nr(bus
));
904 for (i
= 0; i
< 3; ++i
) {
905 res
= &hose
->mem_resources
[i
];
906 bus
->resource
[i
+1] = res
;
907 if (res
->flags
&& request_resource(&iomem_resource
, res
))
908 printk(KERN_ERR
"Failed to request MEM on "
912 } else if (pci_probe_only
&&
913 (dev
->class >> 8) == PCI_CLASS_BRIDGE_PCI
) {
914 /* This is a subordinate bridge */
916 pci_read_bridge_bases(bus
);
917 pcibios_fixup_device_resources(dev
, bus
);
920 ppc_md
.iommu_bus_setup(bus
);
922 list_for_each_entry(dev
, &bus
->devices
, bus_list
)
923 ppc_md
.iommu_dev_setup(dev
);
925 if (ppc_md
.irq_bus_setup
)
926 ppc_md
.irq_bus_setup(bus
);
931 list_for_each_entry(dev
, &bus
->devices
, bus_list
) {
932 if ((dev
->class >> 8) != PCI_CLASS_BRIDGE_PCI
)
933 pcibios_fixup_device_resources(dev
, bus
);
936 EXPORT_SYMBOL(pcibios_fixup_bus
);
939 * Reads the interrupt pin to determine if interrupt is use by card.
940 * If the interrupt is used, then gets the interrupt line from the
941 * openfirmware and sets it in the pci_dev and pci_config line.
943 int pci_read_irq_line(struct pci_dev
*pci_dev
)
946 struct device_node
*node
;
948 pci_read_config_byte(pci_dev
, PCI_INTERRUPT_PIN
, &intpin
);
952 node
= pci_device_to_OF_node(pci_dev
);
956 if (node
->n_intrs
== 0)
959 pci_dev
->irq
= node
->intrs
[0].line
;
961 pci_write_config_byte(pci_dev
, PCI_INTERRUPT_LINE
, pci_dev
->irq
);
965 EXPORT_SYMBOL(pci_read_irq_line
);
967 void pci_resource_to_user(const struct pci_dev
*dev
, int bar
,
968 const struct resource
*rsrc
,
969 u64
*start
, u64
*end
)
971 struct pci_controller
*hose
= pci_bus_to_host(dev
->bus
);
972 unsigned long offset
= 0;
977 if (rsrc
->flags
& IORESOURCE_IO
)
978 offset
= pci_io_base
- (unsigned long)hose
->io_base_virt
+
981 *start
= rsrc
->start
+ offset
;
982 *end
= rsrc
->end
+ offset
;
985 #endif /* CONFIG_PPC_MULTIPLATFORM */