diff options
author | Matthew McClintock <msm@freescale.com> | 2011-05-24 10:09:05 +0000 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2011-07-26 14:30:08 +0200 |
commit | d0c4c33850793be7e211d1cb20c9e0ce67c26c3b (patch) | |
tree | 2a28c0f25beb867fd425bdc7ce8b76dc62c2a6c3 /common | |
parent | 0e0996ef4fb340bd91ce6588a998cdaf10f43a42 (diff) | |
download | u-boot-imx-d0c4c33850793be7e211d1cb20c9e0ce67c26c3b.zip u-boot-imx-d0c4c33850793be7e211d1cb20c9e0ce67c26c3b.tar.gz u-boot-imx-d0c4c33850793be7e211d1cb20c9e0ce67c26c3b.tar.bz2 |
command/cmd_cache.c: Add optional flush arguments
It might be desirable to have the ability to flush icache/dcache
within u-boot, this patch gives each arch the ability to provide
a flush_dcache/flush_icache function to let u-boot flush caches
from the prompt
Signed-off-by: Matthew McClintock <msm@freescale.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_cache.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/common/cmd_cache.c b/common/cmd_cache.c index 5cdd834..9778d3b 100644 --- a/common/cmd_cache.c +++ b/common/cmd_cache.c @@ -26,18 +26,27 @@ */ #include <common.h> #include <command.h> +#include <linux/compiler.h> -static int on_off (const char *); +static int parse_argv(const char *); + +void __weak flush_icache(void) +{ + /* please define arch specific flush_icache */ + puts("No arch specific flush_icache available!\n"); +} int do_icache ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { switch (argc) { case 2: /* on / off */ - switch (on_off(argv[1])) { + switch (parse_argv(argv[1])) { case 0: icache_disable(); break; case 1: icache_enable (); break; + case 2: flush_icache(); + break; } /* FALL TROUGH */ case 1: /* get status */ @@ -50,15 +59,23 @@ int do_icache ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; } +void __weak flush_dcache(void) +{ + puts("No arch specific flush_dcache available!\n"); + /* please define arch specific flush_dcache */ +} + int do_dcache ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { switch (argc) { case 2: /* on / off */ - switch (on_off(argv[1])) { + switch (parse_argv(argv[1])) { case 0: dcache_disable(); break; case 1: dcache_enable (); break; + case 2: flush_dcache(); + break; } /* FALL TROUGH */ case 1: /* get status */ @@ -72,9 +89,11 @@ int do_dcache ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } -static int on_off (const char *s) +static int parse_argv(const char *s) { - if (strcmp(s, "on") == 0) { + if (strcmp(s, "flush") == 0) { + return (2); + } else if (strcmp(s, "on") == 0) { return (1); } else if (strcmp(s, "off") == 0) { return (0); @@ -86,13 +105,13 @@ static int on_off (const char *s) U_BOOT_CMD( icache, 2, 1, do_icache, "enable or disable instruction cache", - "[on, off]\n" - " - enable or disable instruction cache" + "[on, off, flush]\n" + " - enable, disable, or flush instruction cache" ); U_BOOT_CMD( dcache, 2, 1, do_dcache, "enable or disable data cache", - "[on, off]\n" - " - enable or disable data (writethrough) cache" + "[on, off, flush]\n" + " - enable, disable, or flush data (writethrough) cache" ); |