static int ltq_pci_probe(struct platform_device *pdev) { struct resource *res_cfg, *res_bridge; pci_clear_flags(PCI_PROBE_ONLY); res_cfg = platform_get_resource(pdev, IORESOURCE_MEM, 0); res_bridge = platform_get_resource(pdev, IORESOURCE_MEM, 1); if (!res_cfg || !res_bridge) { dev_err(&pdev->dev, "missing memory reources\n"); return -EINVAL; } ltq_pci_membase = devm_request_and_ioremap(&pdev->dev, res_bridge); ltq_pci_mapped_cfg = devm_request_and_ioremap(&pdev->dev, res_cfg); if (!ltq_pci_membase || !ltq_pci_mapped_cfg) { dev_err(&pdev->dev, "failed to remap resources\n"); return -ENOMEM; } ltq_pci_startup(pdev); pci_load_of_ranges(&pci_controller, pdev->dev.of_node); register_pci_controller(&pci_controller); return 0; }
void __init find_and_init_phbs(void) { struct device_node *node; struct pci_controller *phb; struct device_node *root = of_find_node_by_path("/"); for_each_child_of_node(root, node) { if (node->type == NULL || (strcmp(node->type, "pci") != 0 && strcmp(node->type, "pciex") != 0)) continue; phb = pcibios_alloc_controller(node); if (!phb) continue; rtas_setup_phb(phb); pci_process_bridge_OF_ranges(phb, node, 0); isa_bridge_find_early(phb); } of_node_put(root); pci_devs_phb_init(); /* Create EEH devices for all PHBs */ eeh_dev_phb_init(); /* * PCI_PROBE_ONLY and PCI_REASSIGN_ALL_BUS can be set via properties * in chosen. */ if (of_chosen) { const int *prop; prop = of_get_property(of_chosen, "linux,pci-probe-only", NULL); if (prop) { if (*prop) pci_add_flags(PCI_PROBE_ONLY); else pci_clear_flags(PCI_PROBE_ONLY); } #ifdef CONFIG_PPC32 /* Will be made generic soon */ prop = of_get_property(of_chosen, "linux,pci-assign-all-buses", NULL); if (prop && *prop) pci_add_flags(PCI_REASSIGN_ALL_BUS); #endif /* CONFIG_PPC32 */ } }
static int ltq_pci_probe(struct platform_device *pdev) { struct resource *res_cfg, *res_bridge; pci_clear_flags(PCI_PROBE_ONLY); res_bridge = platform_get_resource(pdev, IORESOURCE_MEM, 1); ltq_pci_membase = devm_ioremap_resource(&pdev->dev, res_bridge); if (IS_ERR(ltq_pci_membase)) return PTR_ERR(ltq_pci_membase); res_cfg = platform_get_resource(pdev, IORESOURCE_MEM, 0); ltq_pci_mapped_cfg = devm_ioremap_resource(&pdev->dev, res_cfg); if (IS_ERR(ltq_pci_mapped_cfg)) return PTR_ERR(ltq_pci_mapped_cfg); ltq_pci_startup(pdev); pci_load_of_ranges(&pci_controller, pdev->dev.of_node); register_pci_controller(&pci_controller); return 0; }