Scott Wood wrote: > A few of those things don't belong there -- I think first_free_busno > should be a static variable inside the pci setup function, for example > (does Linux still even need separate bus number spaces on different > hoses?). pcie_ep should just be a local variable. The hose could maybe > just be an uninitialized member of the struct instead of a pointer to an > arbitrary other symbol.
I'm not sure what you mean about the 'hose'. How about this: static void configure_pcie(enum srds_prtcl pci, u32 devdisr_mask, const char *target, enum law_trgt_if law, phys_addr_t mem_addr, enum law_size mem_size, phys_addr_t io_addr, enum law_size io_size, struct pci_controller *hose) { volatile ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; struct fsl_pci_info pci_info; u32 devdisr; static int first_free_busno = 0; int is_endpoint; int num; devdisr = in_be32(&gur->devdisr); if (is_serdes_configured(pci) && !(devdisr & devdisr_mask)) { set_next_law(mem_addr, mem_size, law); set_next_law(io_addr, io_size, law); switch (pci) { #ifdef CONFIG_PCIE1 case PCIE1: num = 1; SET_STD_PCIE_INFO(pci_info, 1); break; #endif #ifdef CONFIG_PCIE2 case PCIE2: num = 2; SET_STD_PCIE_INFO(pci_info, 2); break; #endif #ifdef CONFIG_PCIE3 case PCIE3: num = 3; SET_STD_PCIE_INFO(pci_info, 3); break; #endif #ifdef CONFIG_PCIE4 case PCIE4: num = 4; SET_STD_PCIE_INFO(pci_info, 4); break; #endif default: break; } is_endpoint = fsl_setup_hose(hose, pci_info.regs); printf(" PCIE%u: connected to %s as %s (base addr %lx)\n", num, target, is_endpoint ? "Endpoint" : "Root Complex", pci_info.regs); first_free_busno = fsl_pci_init_port(&pci_info, hose, first_free_busno); } else { printf(" PCIE%u: disabled\n", num); } } -- Timur Tabi Linux kernel developer at Freescale _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot