diff options
Diffstat (limited to 'arch/powerpc/kernel/pci-common.c')
| -rw-r--r-- | arch/powerpc/kernel/pci-common.c | 101 | 
1 files changed, 9 insertions, 92 deletions
| diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index cce98d76e905..8e78e93c8185 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -38,7 +38,6 @@  #include <asm/byteorder.h>  #include <asm/machdep.h>  #include <asm/ppc-pci.h> -#include <asm/firmware.h>  #include <asm/eeh.h>  static DEFINE_SPINLOCK(hose_spinlock); @@ -50,9 +49,6 @@ static int global_phb_number;		/* Global phb counter */  /* ISA Memory physical address */  resource_size_t isa_mem_base; -/* Default PCI flags is 0 on ppc32, modified at boot on ppc64 */ -unsigned int pci_flags = 0; -  static struct dma_map_ops *pci_dma_ops = &dma_direct_ops; @@ -219,20 +215,6 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)  	struct of_irq oirq;  	unsigned int virq; -	/* The current device-tree that iSeries generates from the HV -	 * PCI informations doesn't contain proper interrupt routing, -	 * and all the fallback would do is print out crap, so we -	 * don't attempt to resolve the interrupts here at all, some -	 * iSeries specific fixup does it. -	 * -	 * In the long run, we will hopefully fix the generated device-tree -	 * instead. -	 */ -#ifdef CONFIG_PPC_ISERIES -	if (firmware_has_feature(FW_FEATURE_ISERIES)) -		return -1; -#endif -  	pr_debug("PCI: Try to map irq for %s...\n", pci_name(pci_dev));  #ifdef DEBUG @@ -849,60 +831,6 @@ int pci_proc_domain(struct pci_bus *bus)  	return 1;  } -void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, -			     struct resource *res) -{ -	resource_size_t offset = 0, mask = (resource_size_t)-1; -	struct pci_controller *hose = pci_bus_to_host(dev->bus); - -	if (!hose) -		return; -	if (res->flags & IORESOURCE_IO) { -		offset = (unsigned long)hose->io_base_virt - _IO_BASE; -		mask = 0xffffffffu; -	} else if (res->flags & IORESOURCE_MEM) -		offset = hose->pci_mem_offset; - -	region->start = (res->start - offset) & mask; -	region->end = (res->end - offset) & mask; -} -EXPORT_SYMBOL(pcibios_resource_to_bus); - -void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, -			     struct pci_bus_region *region) -{ -	resource_size_t offset = 0, mask = (resource_size_t)-1; -	struct pci_controller *hose = pci_bus_to_host(dev->bus); - -	if (!hose) -		return; -	if (res->flags & IORESOURCE_IO) { -		offset = (unsigned long)hose->io_base_virt - _IO_BASE; -		mask = 0xffffffffu; -	} else if (res->flags & IORESOURCE_MEM) -		offset = hose->pci_mem_offset; -	res->start = (region->start + offset) & mask; -	res->end = (region->end + offset) & mask; -} -EXPORT_SYMBOL(pcibios_bus_to_resource); - -/* Fixup a bus resource into a linux resource */ -static void __devinit fixup_resource(struct resource *res, struct pci_dev *dev) -{ -	struct pci_controller *hose = pci_bus_to_host(dev->bus); -	resource_size_t offset = 0, mask = (resource_size_t)-1; - -	if (res->flags & IORESOURCE_IO) { -		offset = (unsigned long)hose->io_base_virt - _IO_BASE; -		mask = 0xffffffffu; -	} else if (res->flags & IORESOURCE_MEM) -		offset = hose->pci_mem_offset; - -	res->start = (res->start + offset) & mask; -	res->end = (res->end + offset) & mask; -} - -  /* This header fixup will do the resource fixup for all devices as they are   * probed, but not for bridge ranges   */ @@ -942,18 +870,11 @@ static void __devinit pcibios_fixup_resources(struct pci_dev *dev)  			continue;  		} -		pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] fixup...\n", +		pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]\n",  			 pci_name(dev), i,  			 (unsigned long long)res->start,\  			 (unsigned long long)res->end,  			 (unsigned int)res->flags); - -		fixup_resource(res, dev); - -		pr_debug("PCI:%s            %016llx-%016llx\n", -			 pci_name(dev), -			 (unsigned long long)res->start, -			 (unsigned long long)res->end);  	}  	/* Call machine specific resource fixup */ @@ -1055,27 +976,18 @@ static void __devinit pcibios_fixup_bridge(struct pci_bus *bus)  			continue;  		} -		pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x] fixup...\n", +		pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x]\n",  			 pci_name(dev), i,  			 (unsigned long long)res->start,\  			 (unsigned long long)res->end,  			 (unsigned int)res->flags); -		/* Perform fixup */ -		fixup_resource(res, dev); -  		/* Try to detect uninitialized P2P bridge resources,  		 * and clear them out so they get re-assigned later  		 */  		if (pcibios_uninitialized_bridge_resource(bus, res)) {  			res->flags = 0;  			pr_debug("PCI:%s            (unassigned)\n", pci_name(dev)); -		} else { - -			pr_debug("PCI:%s            %016llx-%016llx\n", -				 pci_name(dev), -				 (unsigned long long)res->start, -				 (unsigned long long)res->end);  		}  	}  } @@ -1565,6 +1477,11 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)  	return pci_enable_resources(dev, mask);  } +resource_size_t pcibios_io_space_offset(struct pci_controller *hose) +{ +	return (unsigned long) hose->io_base_virt - _IO_BASE; +} +  static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources)  {  	struct resource *res; @@ -1589,7 +1506,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, s  		 (unsigned long long)res->start,  		 (unsigned long long)res->end,  		 (unsigned long)res->flags); -	pci_add_resource(resources, res); +	pci_add_resource_offset(resources, res, pcibios_io_space_offset(hose));  	/* Hookup PHB Memory resources */  	for (i = 0; i < 3; ++i) { @@ -1612,7 +1529,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, s  			 (unsigned long long)res->start,  			 (unsigned long long)res->end,  			 (unsigned long)res->flags); -		pci_add_resource(resources, res); +		pci_add_resource_offset(resources, res, hose->pci_mem_offset);  	}  	pr_debug("PCI: PHB MEM offset     = %016llx\n", | 
