aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/pci_64.c11
-rw-r--r--arch/powerpc/kernel/prom_parse.c4
-rw-r--r--arch/ppc/kernel/pci.c10
-rw-r--r--include/asm-powerpc/pci-bridge.h6
-rw-r--r--include/asm-ppc/pci-bridge.h6
5 files changed, 20 insertions, 17 deletions
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index f73a16e9867..fc60a773af7 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -1365,16 +1365,17 @@ struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node)
#endif /* CONFIG_PPC_MULTIPLATFORM */
-unsigned int pci_address_to_pio(phys_addr_t address)
+unsigned long pci_address_to_pio(phys_addr_t address)
{
struct pci_controller *hose, *tmp;
list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
if (address >= hose->io_base_phys &&
- address < (hose->io_base_phys + hose->pci_io_size))
- return (unsigned int)
- ((unsigned long)hose->io_base_virt +
- (address - hose->io_base_phys));
+ address < (hose->io_base_phys + hose->pci_io_size)) {
+ unsigned long base =
+ (unsigned long)hose->io_base_virt - pci_io_base;
+ return base + (address - hose->io_base_phys);
+ }
}
return (unsigned int)-1;
}
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
index 5b764277f47..309ae1d5fa7 100644
--- a/arch/powerpc/kernel/prom_parse.c
+++ b/arch/powerpc/kernel/prom_parse.c
@@ -503,9 +503,9 @@ static int __of_address_to_resource(struct device_node *dev, u32 *addrp,
return -EINVAL;
memset(r, 0, sizeof(struct resource));
if (flags & IORESOURCE_IO) {
- unsigned int port;
+ unsigned long port;
port = pci_address_to_pio(taddr);
- if (port == (unsigned int)-1)
+ if (port == (unsigned long)-1)
return -EINVAL;
r->start = port;
r->end = port + size - 1;
diff --git a/arch/ppc/kernel/pci.c b/arch/ppc/kernel/pci.c
index 8de320308e8..c8b48f17169 100644
--- a/arch/ppc/kernel/pci.c
+++ b/arch/ppc/kernel/pci.c
@@ -1811,7 +1811,7 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
EXPORT_SYMBOL(pci_iomap);
EXPORT_SYMBOL(pci_iounmap);
-unsigned int pci_address_to_pio(phys_addr_t address)
+unsigned long pci_address_to_pio(phys_addr_t address)
{
struct pci_controller* hose = hose_head;
@@ -1819,9 +1819,11 @@ unsigned int pci_address_to_pio(phys_addr_t address)
unsigned int size = hose->io_resource.end -
hose->io_resource.start + 1;
if (address >= hose->io_base_phys &&
- address < (hose->io_base_phys + size))
- return (unsigned int)hose->io_base_virt +
- (address - hose->io_base_phys);
+ address < (hose->io_base_phys + size)) {
+ unsigned long base =
+ (unsigned long)hose->io_base_virt - _IO_BASE;
+ return base + (address - hose->io_base_phys);
+
}
return (unsigned int)-1;
}
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h
index 3d94e55f25d..443c75a1657 100644
--- a/include/asm-powerpc/pci-bridge.h
+++ b/include/asm-powerpc/pci-bridge.h
@@ -158,11 +158,11 @@ pcibios_alloc_controller(struct device_node *dev);
extern void pcibios_free_controller(struct pci_controller *phb);
#ifdef CONFIG_PCI
-extern unsigned int pci_address_to_pio(phys_addr_t address);
+extern unsigned long pci_address_to_pio(phys_addr_t address);
#else
-static inline unsigned int pci_address_to_pio(phys_addr_t address)
+static inline unsigned long pci_address_to_pio(phys_addr_t address)
{
- return (unsigned int)-1;
+ return (unsigned long)-1;
}
#endif
diff --git a/include/asm-ppc/pci-bridge.h b/include/asm-ppc/pci-bridge.h
index 95672ddfe52..9d5230689b3 100644
--- a/include/asm-ppc/pci-bridge.h
+++ b/include/asm-ppc/pci-bridge.h
@@ -138,11 +138,11 @@ static inline unsigned char bridge_swizzle(unsigned char pin,
extern int pciauto_bus_scan(struct pci_controller *, int);
#ifdef CONFIG_PCI
-extern unsigned int pci_address_to_pio(phys_addr_t address);
+extern unsigned long pci_address_to_pio(phys_addr_t address);
#else
-static inline unsigned int pci_address_to_pio(phys_addr_t address)
+static inline unsigned long pci_address_to_pio(phys_addr_t address)
{
- return (unsigned int)-1;
+ return (unsigned long)-1;
}
#endif