summaryrefslogtreecommitdiffstats
path: root/arch/arm/cpu/mmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/cpu/mmu.c')
-rw-r--r--arch/arm/cpu/mmu.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c
index e3ca722300..068e0eac1d 100644
--- a/arch/arm/cpu/mmu.c
+++ b/arch/arm/cpu/mmu.c
@@ -6,7 +6,9 @@
#include <asm/memory.h>
#include <asm/barebox-arm.h>
#include <asm/system.h>
+#include <asm/cache.h>
#include <memory.h>
+#include <asm/system_info.h>
#include "mmu.h"
@@ -43,13 +45,15 @@ static inline void tlb_invalidate(void)
);
}
-#ifdef CONFIG_CPU_V7
-#define PTE_FLAGS_CACHED (PTE_EXT_TEX(1) | PTE_BUFFERABLE | PTE_CACHEABLE)
-#define PTE_FLAGS_UNCACHED (0)
-#else
-#define PTE_FLAGS_CACHED (PTE_SMALL_AP_UNO_SRW | PTE_BUFFERABLE | PTE_CACHEABLE)
-#define PTE_FLAGS_UNCACHED PTE_SMALL_AP_UNO_SRW
-#endif
+extern int arm_architecture;
+
+#define PTE_FLAGS_CACHED_V7 (PTE_EXT_TEX(1) | PTE_BUFFERABLE | PTE_CACHEABLE)
+#define PTE_FLAGS_UNCACHED_V7 (0)
+#define PTE_FLAGS_CACHED_V4 (PTE_SMALL_AP_UNO_SRW | PTE_BUFFERABLE | PTE_CACHEABLE)
+#define PTE_FLAGS_UNCACHED_V4 PTE_SMALL_AP_UNO_SRW
+
+static uint32_t PTE_FLAGS_CACHED;
+static uint32_t PTE_FLAGS_UNCACHED;
#define PTE_MASK ((1 << 12) - 1)
@@ -226,6 +230,16 @@ static int mmu_init(void)
struct memory_bank *bank;
int i;
+ arm_set_cache_functions();
+
+ if (cpu_architecture() >= CPU_ARCH_ARMv7) {
+ PTE_FLAGS_CACHED = PTE_FLAGS_CACHED_V7;
+ PTE_FLAGS_UNCACHED = PTE_FLAGS_UNCACHED_V7;
+ } else {
+ PTE_FLAGS_CACHED = PTE_FLAGS_CACHED_V4;
+ PTE_FLAGS_UNCACHED = PTE_FLAGS_UNCACHED_V4;
+ }
+
ttb = memalign(0x10000, 0x4000);
debug("ttb: 0x%p\n", ttb);