|
@@ -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;
|
|
|
}
|