static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) { extern unsigned int kirkwood_clk_ctrl; struct pcie_port *pp; int index; if (nr >= num_pcie_ports) return 0; index = pcie_port_map[nr]; printk(KERN_INFO "PCI: bus%d uses PCIe port %d\n", sys->busnr, index); pp = kzalloc(sizeof(*pp), GFP_KERNEL); if (!pp) panic("PCIe: failed to allocate pcie_port data"); sys->private_data = pp; pp->root_bus_nr = sys->busnr; spin_lock_init(&pp->conf_lock); switch (index) { case 0: kirkwood_clk_ctrl |= CGC_PEX0; pcie0_ioresources_init(pp); break; case 1: kirkwood_clk_ctrl |= CGC_PEX1; pcie1_ioresources_init(pp); break; default: panic("PCIe setup: invalid controller %d", index); } if (request_resource(&ioport_resource, &pp->res[0])) panic("Request PCIe%d IO resource failed\n", index); if (request_resource(&iomem_resource, &pp->res[1])) panic("Request PCIe%d Memory resource failed\n", index); sys->resource[0] = &pp->res[0]; sys->resource[1] = &pp->res[1]; sys->resource[2] = NULL; sys->io_offset = 0; /* * Generic PCIe unit setup. */ orion_pcie_set_local_bus_nr(pp->base, sys->busnr); orion_pcie_setup(pp->base, &kirkwood_mbus_dram_info); return 1; }
static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) { struct pcie_port *pp; int index; if (nr >= num_pcie_ports) return 0; index = pcie_port_map[nr]; printk(KERN_INFO "PCI: bus%d uses PCIe port %d\n", sys->busnr, index); pp = kzalloc(sizeof(*pp), GFP_KERNEL); if (!pp) panic("PCIe: failed to allocate pcie_port data"); sys->private_data = pp; pp->root_bus_nr = sys->busnr; spin_lock_init(&pp->conf_lock); switch (index) { case 0: kirkwood_enable_pcie_clk("0"); pcie0_ioresources_init(pp); pci_ioremap_io(SZ_64K * sys->busnr, KIRKWOOD_PCIE_IO_PHYS_BASE); break; case 1: kirkwood_enable_pcie_clk("1"); pcie1_ioresources_init(pp); pci_ioremap_io(SZ_64K * sys->busnr, KIRKWOOD_PCIE1_IO_PHYS_BASE); break; default: panic("PCIe setup: invalid controller %d", index); } if (request_resource(&iomem_resource, &pp->res)) panic("Request PCIe%d Memory resource failed\n", index); pci_add_resource_offset(&sys->resources, &pp->res, sys->mem_offset); /* * Generic PCIe unit setup. */ orion_pcie_set_local_bus_nr(pp->base, sys->busnr); orion_pcie_setup(pp->base); return 1; }