diff options
Diffstat (limited to 'arch/microblaze/pci/pci-common.c')
| -rw-r--r-- | arch/microblaze/pci/pci-common.c | 47 | 
1 files changed, 23 insertions, 24 deletions
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index db841c7b9d5..85f2ac1230a 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c @@ -190,6 +190,11 @@ int pcibios_add_platform_entries(struct pci_dev *pdev)  	return device_create_file(&pdev->dev, &dev_attr_devspec);  } +void pcibios_set_master(struct pci_dev *dev) +{ +	/* No special bus mastering setup handling */ +} +  char __devinit *pcibios_setup(char *str)  {  	return str; @@ -242,7 +247,7 @@ int pci_read_irq_line(struct pci_dev *pci_dev)  			 line, pin);  		virq = irq_create_mapping(NULL, line); -		if (virq != NO_IRQ) +		if (virq)  			irq_set_irq_type(virq, IRQ_TYPE_LEVEL_LOW);  	} else {  		pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n", @@ -253,7 +258,7 @@ int pci_read_irq_line(struct pci_dev *pci_dev)  		virq = irq_create_of_mapping(oirq.controller, oirq.specifier,  					     oirq.size);  	} -	if (virq == NO_IRQ) { +	if (!virq) {  		pr_debug(" Failed to map !\n");  		return -1;  	} @@ -1019,7 +1024,6 @@ static void __devinit pcibios_fixup_bridge(struct pci_bus *bus)  	struct pci_dev *dev = bus->self;  	pci_bus_for_each_resource(bus, res, i) { -		res = bus->resource[i];  		if (!res)  			continue;  		if (!res->flags) @@ -1219,7 +1223,6 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)  		 pci_domain_nr(bus), bus->number);  	pci_bus_for_each_resource(bus, res, i) { -		res = bus->resource[i];  		if (!res || !res->flags  		    || res->start > res->end || res->parent)  			continue; @@ -1510,14 +1513,18 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)  	return pci_enable_resources(dev, mask);  } -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;  	int i;  	/* 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) {  		printk(KERN_WARNING "PCI: I/O resource not set for host" @@ -1528,6 +1535,7 @@ void __devinit pcibios_setup_phb_resources(struct pci_controller *hose)  		res->end = res->start + IO_SPACE_LIMIT;  		res->flags = IORESOURCE_IO;  	} +	pci_add_resource(resources, res);  	pr_debug("PCI: PHB IO resource    = %016llx-%016llx [%lx]\n",  		 (unsigned long long)res->start, @@ -1550,7 +1558,7 @@ void __devinit pcibios_setup_phb_resources(struct pci_controller *hose)  			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",  			i, (unsigned long long)res->start, @@ -1573,34 +1581,27 @@ struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus)  static void __devinit pcibios_scan_phb(struct pci_controller *hose)  { +	LIST_HEAD(resources);  	struct pci_bus *bus;  	struct device_node *node = hose->dn; -	unsigned long io_offset; -	struct resource *res = &hose->io_resource;  	pr_debug("PCI: Scanning PHB %s\n",  		 node ? node->full_name : "<NO NAME>"); -	/* Create an empty bus for the toplevel */ -	bus = pci_create_bus(hose->parent, hose->first_busno, hose->ops, hose); +	pcibios_setup_phb_resources(hose, &resources); + +	bus = pci_scan_root_bus(hose->parent, hose->first_busno, +				hose->ops, hose, &resources);  	if (bus == NULL) {  		printk(KERN_ERR "Failed to create bus for PCI domain %04x\n",  		       hose->global_number); +		pci_free_resource_list(&resources);  		return;  	}  	bus->secondary = hose->first_busno;  	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 */ -	hose->last_busno = bus->subordinate = pci_scan_child_bus(bus); +	hose->last_busno = bus->subordinate;  }  static int __init pcibios_init(void) @@ -1614,8 +1615,6 @@ static int __init pcibios_init(void)  	list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {  		hose->last_busno = 0xff;  		pcibios_scan_phb(hose); -		printk(KERN_INFO "calling pci_bus_add_devices()\n"); -		pci_bus_add_devices(hose->bus);  		if (next_busno <= hose->last_busno)  			next_busno = hose->last_busno + 1;  	}  |