]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ia64/PCI: get rid of device resource fixups
authorBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:02 +0000 (20:19 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:02 +0000 (20:19 -0700)
Tell the PCI core about host bridge address translation so it can take
care of bus-to-resource conversion for us.

CC: Tony Luck <tony.luck@intel.com>
CC: Jack Steiner <steiner@sgi.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
arch/ia64/include/asm/pci.h
arch/ia64/pci/pci.c
arch/ia64/sn/kernel/io_init.c

index 279b38ae74aab41bf0e5ed73fcdd2eb1b7a295c1..519bb5ce30754c2930c05c0fb6d702fb6d4903f1 100644 (file)
@@ -108,11 +108,7 @@ static inline int pci_proc_domain(struct pci_bus *bus)
        return (pci_domain_nr(bus) != 0);
 }
 
-extern void pcibios_resource_to_bus(struct pci_dev *dev,
-               struct pci_bus_region *region, struct resource *res);
-
-extern void pcibios_bus_to_resource(struct pci_dev *dev,
-               struct resource *res, struct pci_bus_region *region);
+#define ARCH_HAS_GENERIC_PCI_OFFSETS
 
 static inline struct resource *
 pcibios_select_root(struct pci_dev *pdev, struct resource *res)
index f82f5d4b65fdace5e6ebdbff09a85ea02857a57a..d1ce3200147c9465c2af3d69a79ba0cae20036c0 100644 (file)
@@ -320,7 +320,8 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
         * Ignore these tiny memory ranges */
        if (!((window->resource.flags & IORESOURCE_MEM) &&
              (window->resource.end - window->resource.start < 16)))
-               pci_add_resource(&info->resources, &window->resource);
+               pci_add_resource_offset(&info->resources, &window->resource,
+                                       window->offset);
 
        return AE_OK;
 }
@@ -395,54 +396,6 @@ out1:
        return NULL;
 }
 
-void pcibios_resource_to_bus(struct pci_dev *dev,
-               struct pci_bus_region *region, struct resource *res)
-{
-       struct pci_controller *controller = PCI_CONTROLLER(dev);
-       unsigned long offset = 0;
-       int i;
-
-       for (i = 0; i < controller->windows; i++) {
-               struct pci_window *window = &controller->window[i];
-               if (!(window->resource.flags & res->flags))
-                       continue;
-               if (window->resource.start > res->start)
-                       continue;
-               if (window->resource.end < res->end)
-                       continue;
-               offset = window->offset;
-               break;
-       }
-
-       region->start = res->start - offset;
-       region->end = res->end - offset;
-}
-EXPORT_SYMBOL(pcibios_resource_to_bus);
-
-void pcibios_bus_to_resource(struct pci_dev *dev,
-               struct resource *res, struct pci_bus_region *region)
-{
-       struct pci_controller *controller = PCI_CONTROLLER(dev);
-       unsigned long offset = 0;
-       int i;
-
-       for (i = 0; i < controller->windows; i++) {
-               struct pci_window *window = &controller->window[i];
-               if (!(window->resource.flags & res->flags))
-                       continue;
-               if (window->resource.start - window->offset > region->start)
-                       continue;
-               if (window->resource.end - window->offset < region->end)
-                       continue;
-               offset = window->offset;
-               break;
-       }
-
-       res->start = region->start + offset;
-       res->end = region->end + offset;
-}
-EXPORT_SYMBOL(pcibios_bus_to_resource);
-
 static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
 {
        unsigned int i, type_mask = IORESOURCE_IO | IORESOURCE_MEM;
@@ -464,15 +417,11 @@ static int __devinit is_valid_resource(struct pci_dev *dev, int idx)
 static void __devinit
 pcibios_fixup_resources(struct pci_dev *dev, int start, int limit)
 {
-       struct pci_bus_region region;
        int i;
 
        for (i = start; i < limit; i++) {
                if (!dev->resource[i].flags)
                        continue;
-               region.start = dev->resource[i].start;
-               region.end = dev->resource[i].end;
-               pcibios_bus_to_resource(dev, &dev->resource[i], &region);
                if ((is_valid_resource(dev, i)))
                        pci_claim_resource(dev, i);
        }
index c99c2ca0636b487dcd1f6425a2ba2252f6af8740..238e2c511d94e735fb823cb612d30a7333a28510 100644 (file)
@@ -320,7 +320,9 @@ sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
                                   prom_bussoft_ptr->bs_legacy_io,
                                   prom_bussoft_ptr->bs_legacy_mem);
        for (i = 0; i < controller->windows; i++)
-               pci_add_resource(&resources, &controller->window[i].resource);
+               pci_add_resource_offset(&resources,
+                                       &controller->window[i].resource,
+                                       controller->window[i].offset);
        bus = pci_scan_root_bus(NULL, busnum, &pci_root_ops, controller,
                                &resources);
        if (bus == NULL)