diff options
Diffstat (limited to 'arch/sh/drivers/pci/pci.c')
| -rw-r--r-- | arch/sh/drivers/pci/pci.c | 64 | 
1 files changed, 10 insertions, 54 deletions
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index c2691afe8f7..8f18dd090a6 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c @@ -36,9 +36,15 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)  {  	static int next_busno;  	static int need_domain_info; +	LIST_HEAD(resources); +	int i;  	struct pci_bus *bus; -	bus = pci_scan_bus(next_busno, hose->pci_ops, hose); +	for (i = 0; i < hose->nr_resources; i++) +		pci_add_resource(&resources, hose->resources + i); + +	bus = pci_scan_root_bus(NULL, next_busno, hose->pci_ops, hose, +				&resources);  	hose->bus = bus;  	need_domain_info = need_domain_info || hose->index; @@ -55,6 +61,8 @@ static void __devinit pcibios_scanbus(struct pci_channel *hose)  		pci_bus_size_bridges(bus);  		pci_bus_assign_resources(bus);  		pci_enable_bridges(bus); +	} else { +		pci_free_resource_list(&resources);  	}  } @@ -162,16 +170,8 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev,   */  void __devinit pcibios_fixup_bus(struct pci_bus *bus)  { -	struct pci_dev *dev = bus->self; +	struct pci_dev *dev;  	struct list_head *ln; -	struct pci_channel *hose = bus->sysdata; - -	if (!dev) { -		int i; - -		for (i = 0; i < hose->nr_resources; i++) -			bus->resource[i] = hose->resources + i; -	}  	for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) {  		dev = pci_dev_b(ln); @@ -243,27 +243,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)  	return pci_enable_resources(dev, mask);  } -/* - *  If we set up a device for bus mastering, we need to check and set - *  the latency timer as it may not be properly set. - */ -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_INFO "PCI: Setting latency timer of device %s to %d\n", -	       pci_name(dev), lat); -	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); -} -  void __init pcibios_update_irq(struct pci_dev *dev, int irq)  {  	pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); @@ -393,29 +372,6 @@ static void __iomem *ioport_map_pci(struct pci_dev *dev,  	return (void __iomem *)(chan->io_map_base + port);  } -void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) -{ -	resource_size_t start = pci_resource_start(dev, bar); -	resource_size_t len = pci_resource_len(dev, bar); -	unsigned long flags = pci_resource_flags(dev, bar); - -	if (unlikely(!len || !start)) -		return NULL; -	if (maxlen && len > maxlen) -		len = maxlen; - -	if (flags & IORESOURCE_IO) -		return ioport_map_pci(dev, start, len); -	if (flags & IORESOURCE_MEM) { -		if (flags & IORESOURCE_CACHEABLE) -			return ioremap(start, len); -		return ioremap_nocache(start, len); -	} - -	return NULL; -} -EXPORT_SYMBOL(pci_iomap); -  void pci_iounmap(struct pci_dev *dev, void __iomem *addr)  {  	iounmap(addr);  |