forked from mirrors/linux
		
	parisc/PCI: register busn_res for root buses
Add the host bridge bus number aperture to the resource list. Like the MMIO and I/O port apertures, this is used when assigning resources to hot-added devices or in the case of conflicts. [bhelgaas: changelog, set flags directly, at LBA bus_num init] CC: Kyle McMartin <kyle@mcmartin.ca> CC: Helge Deller <deller@gmx.de> CC: linux-parisc@vger.kernel.org Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									be8e60d8be
								
							
						
					
					
						commit
						30aa80da43
					
				
					 2 changed files with 14 additions and 4 deletions
				
			
		|  | @ -898,6 +898,7 @@ static int __init dino_probe(struct parisc_device *dev) | |||
| 	LIST_HEAD(resources); | ||||
| 	struct pci_bus *bus; | ||||
| 	unsigned long hpa = dev->hpa.start; | ||||
| 	int max; | ||||
| 
 | ||||
| 	name = "Dino"; | ||||
| 	if (is_card_dino(&dev->id)) { | ||||
|  | @ -983,6 +984,10 @@ static int __init dino_probe(struct parisc_device *dev) | |||
| 	if (dino_dev->hba.gmmio_space.flags) | ||||
| 		pci_add_resource(&resources, &dino_dev->hba.gmmio_space); | ||||
| 
 | ||||
| 	dino_dev->hba.bus_num.start = dino_current_bus; | ||||
| 	dino_dev->hba.bus_num.end = 255; | ||||
| 	dino_dev->hba.bus_num.flags = IORESOURCE_BUS; | ||||
| 	pci_add_resource(&resources, &dino_dev->hba.bus_num); | ||||
| 	/*
 | ||||
| 	** It's not used to avoid chicken/egg problems | ||||
| 	** with configuration accessor functions. | ||||
|  | @ -998,12 +1003,13 @@ static int __init dino_probe(struct parisc_device *dev) | |||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	bus->busn_res.end = pci_scan_child_bus(bus); | ||||
| 	max = pci_scan_child_bus(bus); | ||||
| 	pci_bus_update_busn_res_end(bus, max); | ||||
| 
 | ||||
| 	/* This code *depends* on scanning being single threaded
 | ||||
| 	 * if it isn't, this global bus number count will fail | ||||
| 	 */ | ||||
| 	dino_current_bus = bus->busn_res.end + 1; | ||||
| 	dino_current_bus = max + 1; | ||||
| 	pci_bus_assign_resources(bus); | ||||
| 	pci_bus_add_devices(bus); | ||||
| 	return 0; | ||||
|  |  | |||
|  | @ -989,6 +989,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) | |||
| 		case PAT_PBNUM: | ||||
| 			lba_dev->hba.bus_num.start = p->start; | ||||
| 			lba_dev->hba.bus_num.end   = p->end; | ||||
| 			lba_dev->hba.bus_num.flags = IORESOURCE_BUS; | ||||
| 			break; | ||||
| 
 | ||||
| 		case PAT_LMMIO: | ||||
|  | @ -1366,6 +1367,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
| 	void *tmp_obj; | ||||
| 	char *version; | ||||
| 	void __iomem *addr = ioremap_nocache(dev->hpa.start, 4096); | ||||
| 	int max; | ||||
| 
 | ||||
| 	/* Read HW Rev First */ | ||||
| 	func_class = READ_REG32(addr + LBA_FCLASS); | ||||
|  | @ -1502,6 +1504,8 @@ lba_driver_probe(struct parisc_device *dev) | |||
| 	if (lba_dev->hba.gmmio_space.flags) | ||||
| 		pci_add_resource(&resources, &lba_dev->hba.gmmio_space); | ||||
| 
 | ||||
| 	pci_add_resource(&resources, &lba_dev->hba.bus_num); | ||||
| 
 | ||||
| 	dev->dev.platform_data = lba_dev; | ||||
| 	lba_bus = lba_dev->hba.hba_bus = | ||||
| 		pci_create_root_bus(&dev->dev, lba_dev->hba.bus_num.start, | ||||
|  | @ -1511,7 +1515,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	lba_bus->busn_res.end = pci_scan_child_bus(lba_bus); | ||||
| 	max = pci_scan_child_bus(lba_bus); | ||||
| 
 | ||||
| 	/* This is in lieu of calling pci_assign_unassigned_resources() */ | ||||
| 	if (is_pdc_pat()) { | ||||
|  | @ -1541,7 +1545,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
| 		lba_dev->flags |= LBA_FLAG_SKIP_PROBE; | ||||
| 	} | ||||
| 
 | ||||
| 	lba_next_bus = lba_res->busn_res.end + 1; | ||||
| 	lba_next_bus = max + 1; | ||||
| 	pci_bus_add_devices(lba_bus); | ||||
| 
 | ||||
| 	/* Whew! Finally done! Tell services we got this one covered. */ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Yinghai Lu
						Yinghai Lu