summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2010-09-17 13:10:32 +0200
committerWolfgang Denk <wd@denx.de>2010-09-19 19:29:51 +0200
commit7e4a9e6dc819b2b3499659ca90e1e9c6d4ca3077 (patch)
tree5e386feeea7c803a1800484bee8253796c030a39
parent95c6f6d34d4ff23f4d005488d84682eec5fa9ec8 (diff)
downloadu-boot-imx-7e4a9e6dc819b2b3499659ca90e1e9c6d4ca3077.zip
u-boot-imx-7e4a9e6dc819b2b3499659ca90e1e9c6d4ca3077.tar.gz
u-boot-imx-7e4a9e6dc819b2b3499659ca90e1e9c6d4ca3077.tar.bz2
ARM (ARM11): add data cache support, test on Qong board
Add data cache support for arm1136 systems. Enable "cache" command on Qong board and test performance. Test 1: Loading 127 MB of data from NAND flash into RAM: Instr. Cache off on on Data Cache off off on -------------------------------------------------- QONG (ARM11) 177s 95s 43s = x 4.1 Test 2: uncompressing a gzipped image from RAM to RAM (size compressed: 6.5 MiB, uncompressed: 35 MiB): Instr. Cache off on on Data Cache off off on -------------------------------------------------- QONG (ARM11) 1.54s 0.95s 0.18s = x 8.6 Portions of this work were supported by funding from the CE Linux Forum. Signed-off-by: Heiko Schocher <hs@denx.de>
-rw-r--r--arch/arm/cpu/arm1136/start.S5
-rw-r--r--arch/arm/lib/cache.c2
-rw-r--r--include/configs/qong.h1
3 files changed, 7 insertions, 1 deletions
diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
index 41eb82d..1c58abd 100644
--- a/arch/arm/cpu/arm1136/start.S
+++ b/arch/arm/cpu/arm1136/start.S
@@ -439,6 +439,11 @@ fiq:
.align 5
.global arm1136_cache_flush
arm1136_cache_flush:
+#if !defined(CONFIG_SYS_NO_ICACHE)
mcr p15, 0, r1, c7, c5, 0 @ invalidate I cache
+#endif
+#if !defined(CONFIG_SYS_NO_DCACHE)
+ mcr p15, 0, r1, c7, c14, 0 @ invalidate D cache
+#endif
mov pc, lr @ back to caller
#endif /* CONFIG_PRELOADER */
diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
index 3684cad..55b633e 100644
--- a/arch/arm/lib/cache.c
+++ b/arch/arm/lib/cache.c
@@ -27,7 +27,7 @@
void flush_cache (unsigned long dummy1, unsigned long dummy2)
{
-#ifdef CONFIG_OMAP2420
+#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
void arm1136_cache_flush(void);
arm1136_cache_flush();
diff --git a/include/configs/qong.h b/include/configs/qong.h
index 100fa3f..4735b5e 100644
--- a/include/configs/qong.h
+++ b/include/configs/qong.h
@@ -104,6 +104,7 @@
#include <config_cmd_default.h>
+#define CONFIG_CMD_CACHE
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_NET