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>
This commit is contained in:
Matthew McClintock 2011-05-24 10:09:05 +00:00 committed by Wolfgang Denk
parent 0e0996ef4f
commit d0c4c33850
1 changed files with 28 additions and 9 deletions

View File

@ -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"
);