diff options
Diffstat (limited to 'arch/mips/pci/pci.c')
| -rw-r--r-- | arch/mips/pci/pci.c | 38 | 
1 files changed, 10 insertions, 28 deletions
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index 41af7fa2887..fa8e378413b 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c @@ -81,6 +81,7 @@ static void __devinit pcibios_scanbus(struct pci_controller *hose)  {  	static int next_busno;  	static int need_domain_info; +	LIST_HEAD(resources);  	struct pci_bus *bus;  	if (!hose->iommu) @@ -89,7 +90,13 @@ static void __devinit pcibios_scanbus(struct pci_controller *hose)  	if (hose->get_busno && pci_probe_only)  		next_busno = (*hose->get_busno)(); -	bus = pci_scan_bus(next_busno, hose->pci_ops, hose); +	pci_add_resource(&resources, hose->mem_resource); +	pci_add_resource(&resources, hose->io_resource); +	bus = pci_scan_root_bus(NULL, next_busno, hose->pci_ops, hose, +				&resources); +	if (!bus) +		pci_free_resource_list(&resources); +  	hose->bus = bus;  	need_domain_info = need_domain_info || hose->index; @@ -205,27 +212,6 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)  	return 0;  } -/* - *  If we set up a device for bus mastering, we need to check the latency - *  timer as certain crappy BIOSes forget to set it properly. - */ -static unsigned int pcibios_max_latency = 255; - -void pcibios_set_master(struct pci_dev *dev) -{ -	u8 lat; -	pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat); -	if (lat < 16) -		lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency; -	else if (lat > pcibios_max_latency) -		lat = pcibios_max_latency; -	else -		return; -	printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", -	       pci_name(dev), lat); -	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); -} -  unsigned int pcibios_assign_all_busses(void)  {  	return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0; @@ -266,15 +252,11 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)  {  	/* Propagate hose info into the subordinate devices.  */ -	struct pci_controller *hose = bus->sysdata;  	struct list_head *ln;  	struct pci_dev *dev = bus->self; -	if (!dev) { -		bus->resource[0] = hose->io_resource; -		bus->resource[1] = hose->mem_resource; -	} else if (pci_probe_only && -		   (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { +	if (pci_probe_only && dev && +	    (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {  		pci_read_bridge_bases(bus);  		pcibios_fixup_device_resources(dev, bus);  	}  |