|
@@ -131,30 +131,13 @@ EXPORT_SYMBOL_GPL(pcibios_unmap_io_space);
|
|
|
|
|
|
#endif /* CONFIG_HOTPLUG */
|
|
#endif /* CONFIG_HOTPLUG */
|
|
|
|
|
|
-int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|
|
|
|
|
+static int __devinit pcibios_map_phb_io_space(struct pci_controller *hose)
|
|
{
|
|
{
|
|
struct vm_struct *area;
|
|
struct vm_struct *area;
|
|
unsigned long phys_page;
|
|
unsigned long phys_page;
|
|
unsigned long size_page;
|
|
unsigned long size_page;
|
|
unsigned long io_virt_offset;
|
|
unsigned long io_virt_offset;
|
|
- struct pci_controller *hose;
|
|
|
|
-
|
|
|
|
- WARN_ON(bus == NULL);
|
|
|
|
-
|
|
|
|
- /* If this not a PHB, nothing to do, page tables still exist and
|
|
|
|
- * thus HPTEs will be faulted in when needed
|
|
|
|
- */
|
|
|
|
- if (bus->self) {
|
|
|
|
- pr_debug("IO mapping for PCI-PCI bridge %s\n",
|
|
|
|
- pci_name(bus->self));
|
|
|
|
- pr_debug(" virt=0x%016llx...0x%016llx\n",
|
|
|
|
- bus->resource[0]->start + _IO_BASE,
|
|
|
|
- bus->resource[0]->end + _IO_BASE);
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- /* Get the host bridge */
|
|
|
|
- hose = pci_bus_to_host(bus);
|
|
|
|
phys_page = _ALIGN_DOWN(hose->io_base_phys, PAGE_SIZE);
|
|
phys_page = _ALIGN_DOWN(hose->io_base_phys, PAGE_SIZE);
|
|
size_page = _ALIGN_UP(hose->pci_io_size, PAGE_SIZE);
|
|
size_page = _ALIGN_UP(hose->pci_io_size, PAGE_SIZE);
|
|
|
|
|
|
@@ -198,11 +181,30 @@ int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+int __devinit pcibios_map_io_space(struct pci_bus *bus)
|
|
|
|
+{
|
|
|
|
+ WARN_ON(bus == NULL);
|
|
|
|
+
|
|
|
|
+ /* If this not a PHB, nothing to do, page tables still exist and
|
|
|
|
+ * thus HPTEs will be faulted in when needed
|
|
|
|
+ */
|
|
|
|
+ if (bus->self) {
|
|
|
|
+ pr_debug("IO mapping for PCI-PCI bridge %s\n",
|
|
|
|
+ pci_name(bus->self));
|
|
|
|
+ pr_debug(" virt=0x%016llx...0x%016llx\n",
|
|
|
|
+ bus->resource[0]->start + _IO_BASE,
|
|
|
|
+ bus->resource[0]->end + _IO_BASE);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return pcibios_map_phb_io_space(pci_bus_to_host(bus));
|
|
|
|
+}
|
|
EXPORT_SYMBOL_GPL(pcibios_map_io_space);
|
|
EXPORT_SYMBOL_GPL(pcibios_map_io_space);
|
|
|
|
|
|
void __devinit pcibios_setup_phb_io_space(struct pci_controller *hose)
|
|
void __devinit pcibios_setup_phb_io_space(struct pci_controller *hose)
|
|
{
|
|
{
|
|
- pcibios_map_io_space(hose->bus);
|
|
|
|
|
|
+ pcibios_map_phb_io_space(hose);
|
|
}
|
|
}
|
|
|
|
|
|
#define IOBASE_BRIDGE_NUMBER 0
|
|
#define IOBASE_BRIDGE_NUMBER 0
|