microblaze/PCI: convert to pci_create_root_bus() for correct root bus resources
Convert from pci_create_bus() to pci_create_root_bus(). This way the root bus resources are correct immediately. This patch doesn't fix a problem because microblaze fixed the resources before scanning the bus, but it makes microblaze more consistent with other architectures. It also allows us to use the pci_scan_root_bus() path safely. CC: Michal Simek <monstr@monstr.eu> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
		
							parent
							
								
									ce78fc6b28
								
							
						
					
					
						commit
						58de74b805
					
				| @ -1513,14 +1513,18 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||||||
| 	return pci_enable_resources(dev, mask); | 	return pci_enable_resources(dev, mask); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose) | static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources) | ||||||
| { | { | ||||||
| 	struct pci_bus *bus = hose->bus; |  | ||||||
| 	struct resource *res; | 	struct resource *res; | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	/* Hookup PHB IO resource */ | 	/* Hookup PHB IO resource */ | ||||||
| 	bus->resource[0] = res = &hose->io_resource; | 	res = &hose->io_resource; | ||||||
|  | 
 | ||||||
|  | 	/* Fixup IO space offset */ | ||||||
|  | 	io_offset = (unsigned long)hose->io_base_virt - isa_io_base; | ||||||
|  | 	res->start = (res->start + io_offset) & 0xffffffffu; | ||||||
|  | 	res->end = (res->end + io_offset) & 0xffffffffu; | ||||||
| 
 | 
 | ||||||
| 	if (!res->flags) { | 	if (!res->flags) { | ||||||
| 		printk(KERN_WARNING "PCI: I/O resource not set for host" | 		printk(KERN_WARNING "PCI: I/O resource not set for host" | ||||||
| @ -1531,6 +1535,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose) | |||||||
| 		res->end = res->start + IO_SPACE_LIMIT; | 		res->end = res->start + IO_SPACE_LIMIT; | ||||||
| 		res->flags = IORESOURCE_IO; | 		res->flags = IORESOURCE_IO; | ||||||
| 	} | 	} | ||||||
|  | 	pci_add_resource(resources, res); | ||||||
| 
 | 
 | ||||||
| 	pr_debug("PCI: PHB IO resource    = %016llx-%016llx [%lx]\n", | 	pr_debug("PCI: PHB IO resource    = %016llx-%016llx [%lx]\n", | ||||||
| 		 (unsigned long long)res->start, | 		 (unsigned long long)res->start, | ||||||
| @ -1553,7 +1558,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose) | |||||||
| 			res->flags = IORESOURCE_MEM; | 			res->flags = IORESOURCE_MEM; | ||||||
| 
 | 
 | ||||||
| 		} | 		} | ||||||
| 		bus->resource[i+1] = res; | 		pci_add_resource(resources, res); | ||||||
| 
 | 
 | ||||||
| 		pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n", | 		pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n", | ||||||
| 			i, (unsigned long long)res->start, | 			i, (unsigned long long)res->start, | ||||||
| @ -1576,32 +1581,27 @@ struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus) | |||||||
| 
 | 
 | ||||||
| static void __devinit pcibios_scan_phb(struct pci_controller *hose) | static void __devinit pcibios_scan_phb(struct pci_controller *hose) | ||||||
| { | { | ||||||
|  | 	LIST_HEAD(resources); | ||||||
| 	struct pci_bus *bus; | 	struct pci_bus *bus; | ||||||
| 	struct device_node *node = hose->dn; | 	struct device_node *node = hose->dn; | ||||||
| 	unsigned long io_offset; |  | ||||||
| 	struct resource *res = &hose->io_resource; |  | ||||||
| 
 | 
 | ||||||
| 	pr_debug("PCI: Scanning PHB %s\n", | 	pr_debug("PCI: Scanning PHB %s\n", | ||||||
| 		 node ? node->full_name : "<NO NAME>"); | 		 node ? node->full_name : "<NO NAME>"); | ||||||
| 
 | 
 | ||||||
|  | 	pcibios_setup_phb_resources(hose, &resources); | ||||||
|  | 
 | ||||||
| 	/* Create an empty bus for the toplevel */ | 	/* Create an empty bus for the toplevel */ | ||||||
| 	bus = pci_create_bus(hose->parent, hose->first_busno, hose->ops, hose); | 	bus = pci_create_root_bus(hose->parent, hose->first_busno, hose->ops, | ||||||
|  | 				  hose, &resources); | ||||||
| 	if (bus == NULL) { | 	if (bus == NULL) { | ||||||
| 		printk(KERN_ERR "Failed to create bus for PCI domain %04x\n", | 		printk(KERN_ERR "Failed to create bus for PCI domain %04x\n", | ||||||
| 		       hose->global_number); | 		       hose->global_number); | ||||||
|  | 		pci_free_resource_list(&resources); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 	bus->secondary = hose->first_busno; | 	bus->secondary = hose->first_busno; | ||||||
| 	hose->bus = bus; | 	hose->bus = bus; | ||||||
| 
 | 
 | ||||||
| 	/* Fixup IO space offset */ |  | ||||||
| 	io_offset = (unsigned long)hose->io_base_virt - isa_io_base; |  | ||||||
| 	res->start = (res->start + io_offset) & 0xffffffffu; |  | ||||||
| 	res->end = (res->end + io_offset) & 0xffffffffu; |  | ||||||
| 
 |  | ||||||
| 	/* Wire up PHB bus resources */ |  | ||||||
| 	pcibios_setup_phb_resources(hose); |  | ||||||
| 
 |  | ||||||
| 	/* Scan children */ | 	/* Scan children */ | ||||||
| 	hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); | 	hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user