Merge with /home/wd/git/u-boot/mailing-list/Haavard_Skinnemoen
[platform/kernel/u-boot.git] / common / cmd_cache.c
1 /*
2  * (C) Copyright 2000
3  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 /*
25  * Cache support: switch on or off, get status
26  */
27 #include <common.h>
28 #include <command.h>
29
30 #if (CONFIG_COMMANDS & CFG_CMD_CACHE)
31
32 static int on_off (const char *);
33
34 int do_icache ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
35 {
36         switch (argc) {
37         case 2:                 /* on / off     */
38                 switch (on_off(argv[1])) {
39 #if 0   /* prevented by varargs handling; FALLTROUGH is harmless, too */
40                 default: printf ("Usage:\n%s\n", cmdtp->usage);
41                         return;
42 #endif
43                 case 0: icache_disable();
44                         break;
45                 case 1: icache_enable ();
46                         break;
47                 }
48                 /* FALL TROUGH */
49         case 1:                 /* get status */
50                 printf ("Instruction Cache is %s\n",
51                         icache_status() ? "ON" : "OFF");
52                 return 0;
53         default:
54                 printf ("Usage:\n%s\n", cmdtp->usage);
55                 return 1;
56         }
57         return 0;
58 }
59
60 int do_dcache ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
61 {
62         switch (argc) {
63         case 2:                 /* on / off     */
64                 switch (on_off(argv[1])) {
65 #if 0   /* prevented by varargs handling; FALLTROUGH is harmless, too */
66                 default: printf ("Usage:\n%s\n", cmdtp->usage);
67                         return;
68 #endif
69                 case 0: dcache_disable();
70                         break;
71                 case 1: dcache_enable ();
72                         break;
73                 }
74                 /* FALL TROUGH */
75         case 1:                 /* get status */
76                 printf ("Data (writethrough) Cache is %s\n",
77                         dcache_status() ? "ON" : "OFF");
78                 return 0;
79         default:
80                 printf ("Usage:\n%s\n", cmdtp->usage);
81                 return 1;
82         }
83         return 0;
84
85 }
86
87 static int on_off (const char *s)
88 {
89         if (strcmp(s, "on") == 0) {
90                 return (1);
91         } else if (strcmp(s, "off") == 0) {
92                 return (0);
93         }
94         return (-1);
95 }
96
97
98 U_BOOT_CMD(
99         icache,   2,   1,     do_icache,
100         "icache  - enable or disable instruction cache\n",
101         "[on, off]\n"
102         "    - enable or disable instruction cache\n"
103 );
104
105 U_BOOT_CMD(
106         dcache,   2,   1,     do_dcache,
107         "dcache  - enable or disable data cache\n",
108         "[on, off]\n"
109         "    - enable or disable data (writethrough) cache\n"
110 );
111
112 #endif  /* CFG_CMD_CACHE */