]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-mv78xx0/pcie.c
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[~andy/linux] / arch / arm / mach-mv78xx0 / pcie.c
index df3e38055a246380a6e631de74e5aff3d3d887d8..2e56e86b6d68fffba920f3c5c8118df599f7384b 100644 (file)
@@ -147,6 +147,7 @@ static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys)
                return 0;
 
        pp = &pcie_port[nr];
+       sys->private_data = pp;
        pp->root_bus_nr = sys->busnr;
 
        /*
@@ -161,19 +162,6 @@ static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys)
        return 1;
 }
 
-static struct pcie_port *bus_to_port(int bus)
-{
-       int i;
-
-       for (i = num_pcie_ports - 1; i >= 0; i--) {
-               int rbus = pcie_port[i].root_bus_nr;
-               if (rbus != -1 && rbus <= bus)
-                       break;
-       }
-
-       return i >= 0 ? pcie_port + i : NULL;
-}
-
 static int pcie_valid_config(struct pcie_port *pp, int bus, int dev)
 {
        /*
@@ -189,7 +177,8 @@ static int pcie_valid_config(struct pcie_port *pp, int bus, int dev)
 static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
                        int size, u32 *val)
 {
-       struct pcie_port *pp = bus_to_port(bus->number);
+       struct pci_sys_data *sys = bus->sysdata;
+       struct pcie_port *pp = sys->private_data;
        unsigned long flags;
        int ret;
 
@@ -208,7 +197,8 @@ static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
 static int pcie_wr_conf(struct pci_bus *bus, u32 devfn,
                        int where, int size, u32 val)
 {
-       struct pcie_port *pp = bus_to_port(bus->number);
+       struct pci_sys_data *sys = bus->sysdata;
+       struct pcie_port *pp = sys->private_data;
        unsigned long flags;
        int ret;
 
@@ -263,7 +253,8 @@ mv78xx0_pcie_scan_bus(int nr, struct pci_sys_data *sys)
 static int __init mv78xx0_pcie_map_irq(const struct pci_dev *dev, u8 slot,
        u8 pin)
 {
-       struct pcie_port *pp = bus_to_port(dev->bus->number);
+       struct pci_sys_data *sys = dev->bus->sysdata;
+       struct pcie_port *pp = sys->private_data;
 
        return IRQ_MV78XX0_PCIE_00 + (pp->maj << 2) + pp->min;
 }
@@ -271,7 +262,6 @@ static int __init mv78xx0_pcie_map_irq(const struct pci_dev *dev, u8 slot,
 static struct hw_pci mv78xx0_pci __initdata = {
        .nr_controllers = 8,
        .preinit        = mv78xx0_pcie_preinit,
-       .swizzle        = pci_std_swizzle,
        .setup          = mv78xx0_pcie_setup,
        .scan           = mv78xx0_pcie_scan_bus,
        .map_irq        = mv78xx0_pcie_map_irq,