11 #include <linux/kernel.h>
12 #include <linux/pci.h>
13 #include <linux/slab.h>
19 #include <mach/bridge-regs.h>
23 static void kirkwood_enable_pcie_clk(
const char *
port)
32 clk_prepare_enable(clk);
62 static int pcie_port_map[2];
63 static int num_pcie_ports;
106 spin_unlock_irqrestore(&pp->
conf_lock, flags);
111 static int pcie_wr_conf(
struct pci_bus *bus,
u32 devfn,
112 int where,
int size,
u32 val)
124 spin_unlock_irqrestore(&pp->
conf_lock, flags);
129 static struct pci_ops pcie_ops = {
130 .read = pcie_rd_conf,
131 .write = pcie_wr_conf,
142 pp->
res.name =
"PCIe 0 MEM";
156 pp->
res.name =
"PCIe 1 MEM";
167 if (nr >= num_pcie_ports)
170 index = pcie_port_map[
nr];
175 panic(
"PCIe: failed to allocate pcie_port data");
182 kirkwood_enable_pcie_clk(
"0");
183 pcie0_ioresources_init(pp);
187 kirkwood_enable_pcie_clk(
"1");
188 pcie1_ioresources_init(pp);
192 panic(
"PCIe setup: invalid controller %d", index);
196 panic(
"Request PCIe%d Memory resource failed\n", index);
233 kirkwood_pcie_scan_bus(
int nr,
struct pci_sys_data *sys)
237 if (nr < num_pcie_ports) {
258 .setup = kirkwood_pcie_setup,
259 .scan = kirkwood_pcie_scan_bus,
260 .map_irq = kirkwood_pcie_map_irq,
263 static void __init add_pcie_port(
int index,
void __iomem *base)
269 pcie_port_map[num_pcie_ports++] =
index;
284 kirkwood_pci.nr_controllers = num_pcie_ports;