---
 arch/arm/mach-versatile/pci.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Index: linux-2.6.21/arch/arm/mach-versatile/pci.c
===================================================================
--- linux-2.6.21.orig/arch/arm/mach-versatile/pci.c	2007-06-26 16:53:14.000000000 +0100
+++ linux-2.6.21/arch/arm/mach-versatile/pci.c	2007-06-26 16:54:28.000000000 +0100
@@ -99,7 +99,7 @@ static void __iomem *__pci_addr(struct p
 static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int where,
 				 int size, u32 *val)
 {
-	void __iomem *addr = __pci_addr(bus, devfn, where & ~3);
+	void __iomem *addr = __pci_addr(bus, devfn, where);
 	u32 v;
 	int slot = PCI_SLOT(devfn);
 
@@ -122,12 +122,14 @@ static int versatile_read_config(struct 
 			break;
 
 		case 2:
+			addr -= where & 3;
 			v = __raw_readl(addr);
 			if (where & 2) v >>= 16;
  			v &= 0xffff;
 			break;
 
 		default:
+			addr -= where & 3;
 			v = __raw_readl(addr);
 			break;
 		}

