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();
}