arm: mmu: deal with peripheral mapping on msm7k

Peripherals must be accessed as DEVICE NON-SHARED.
diff --git a/arch/arm/mmu.c b/arch/arm/mmu.c
index 36c2bef..74e9ecd 100644
--- a/arch/arm/mmu.c
+++ b/arch/arm/mmu.c
@@ -47,12 +47,24 @@
 	int index;
 	uint AP;
 	uint CB;
+	uint TEX = 0;
+
+#if defined(PLATFORM_MSM7K)
+	if ((paddr >= 0x88000000) && (paddr < 0xD0000000)) {
+            /* peripherals in the 0x88000000 - 0xD0000000 range must
+             * be mapped as DEVICE NON-SHARED: TEX=2, C=0, B=0
+             */
+		TEX = 2;
+		flags &= (~(MMU_FLAG_CACHED | MMU_FLAG_BUFFERED));
+	}
+#endif
 
 	AP = (flags & MMU_FLAG_READWRITE) ? 0x3 : 0x2;
 	CB = ((flags & MMU_FLAG_CACHED) ? 0x2 : 0) | ((flags & MMU_FLAG_BUFFERED) ? 0x1 : 0);
 
 	index = vaddr / MB;
-	tt[index] = (paddr & ~(MB-1)) | (AP << 10) | (0<<5) | (CB << 2) | (2<<0); // section mapping
+	// section mapping
+	tt[index] = (paddr & ~(MB-1)) | (TEX << 12) | (AP << 10) | (0<<5) | (CB << 2) | (2<<0);
 
 	arm_invalidate_tlb();
 }