diff options
author | Michal Simek <monstr@monstr.eu> | 2009-01-05 13:29:32 +0100 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2009-01-23 10:39:59 +0100 |
commit | e9b737deb2c30125362d20e24170617476026e94 (patch) | |
tree | 5343cda3a837595ed07fbefb8402a96936bcbe1d | |
parent | b4f8dda35bfad447b4106828232705b2e878d168 (diff) | |
download | u-boot-imx-e9b737deb2c30125362d20e24170617476026e94.zip u-boot-imx-e9b737deb2c30125362d20e24170617476026e94.tar.gz u-boot-imx-e9b737deb2c30125362d20e24170617476026e94.tar.bz2 |
microblaze: Add cache flush
-rw-r--r-- | include/configs/microblaze-generic.h | 19 | ||||
-rw-r--r-- | lib_microblaze/cache.c | 16 |
2 files changed, 32 insertions, 3 deletions
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h index 867f885..4c6cc9f 100644 --- a/include/configs/microblaze-generic.h +++ b/include/configs/microblaze-generic.h @@ -194,6 +194,18 @@ #define CONFIG_DOS_PARTITION #endif +#if defined(XILINX_USE_ICACHE) + #define CONFIG_ICACHE +#else + #undef CONFIG_ICACHE +#endif + +#if defined(XILINX_USE_DCACHE) + #define CONFIG_DCACHE +#else + #undef CONFIG_DCACHE +#endif + /* * BOOTP options */ @@ -208,11 +220,16 @@ #include <config_cmd_default.h> #define CONFIG_CMD_ASKENV -#define CONFIG_CMD_CACHE #define CONFIG_CMD_IRQ #define CONFIG_CMD_MFSL #define CONFIG_CMD_ECHO +#if defined(CONFIG_DCACHE) || defined(CONFIG_ICACHE) + #define CONFIG_CMD_CACHE +#else + #undef CONFIG_CMD_CACHE +#endif + #ifndef CONFIG_SYS_ENET #undef CONFIG_CMD_NET #else diff --git a/lib_microblaze/cache.c b/lib_microblaze/cache.c index a2f7493..4b2e8e3 100644 --- a/lib_microblaze/cache.c +++ b/lib_microblaze/cache.c @@ -26,6 +26,18 @@ void flush_cache (ulong addr, ulong size) { - /* MicroBlaze have write thruough cache. nothing to do. */ - return; + int i; + for (i = 0; i < size; i += 4) + asm volatile ( +#ifdef CONFIG_ICACHE + "wic %0, r0;" +#endif + "nop;" +#ifdef CONFIG_DCACHE + "wdc %0, r0;" +#endif + "nop;" + : + : "r" (addr + i) + : "memory"); } |