]> git.sur5r.net Git - u-boot/blob - cmd/cache.c
Merge branch 'master' of git://git.denx.de/u-boot-sunxi
[u-boot] / cmd / cache.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * (C) Copyright 2000
4  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5  */
6
7 /*
8  * Cache support: switch on or off, get status
9  */
10 #include <common.h>
11 #include <command.h>
12 #include <linux/compiler.h>
13
14 static int parse_argv(const char *);
15
16 void __weak invalidate_icache_all(void)
17 {
18         /* please define arch specific invalidate_icache_all */
19         puts("No arch specific invalidate_icache_all available!\n");
20 }
21
22 static int do_icache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
23 {
24         switch (argc) {
25         case 2:                 /* on / off     */
26                 switch (parse_argv(argv[1])) {
27                 case 0:
28                         icache_disable();
29                         break;
30                 case 1:
31                         icache_enable();
32                         break;
33                 case 2:
34                         invalidate_icache_all();
35                         break;
36                 }
37                 break;
38         case 1:                 /* get status */
39                 printf("Instruction Cache is %s\n",
40                         icache_status() ? "ON" : "OFF");
41                 return 0;
42         default:
43                 return CMD_RET_USAGE;
44         }
45         return 0;
46 }
47
48 void __weak flush_dcache_all(void)
49 {
50         puts("No arch specific flush_dcache_all available!\n");
51         /* please define arch specific flush_dcache_all */
52 }
53
54 static int do_dcache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
55 {
56         switch (argc) {
57         case 2:                 /* on / off */
58                 switch (parse_argv(argv[1])) {
59                 case 0:
60                         dcache_disable();
61                         break;
62                 case 1:
63                         dcache_enable();
64                         break;
65                 case 2:
66                         flush_dcache_all();
67                         break;
68                 }
69                 break;
70         case 1:                 /* get status */
71                 printf("Data (writethrough) Cache is %s\n",
72                         dcache_status() ? "ON" : "OFF");
73                 return 0;
74         default:
75                 return CMD_RET_USAGE;
76         }
77         return 0;
78 }
79
80 static int parse_argv(const char *s)
81 {
82         if (strcmp(s, "flush") == 0)
83                 return 2;
84         else if (strcmp(s, "on") == 0)
85                 return 1;
86         else if (strcmp(s, "off") == 0)
87                 return 0;
88
89         return -1;
90 }
91
92
93 U_BOOT_CMD(
94         icache,   2,   1,     do_icache,
95         "enable or disable instruction cache",
96         "[on, off, flush]\n"
97         "    - enable, disable, or flush instruction cache"
98 );
99
100 U_BOOT_CMD(
101         dcache,   2,   1,     do_dcache,
102         "enable or disable data cache",
103         "[on, off, flush]\n"
104         "    - enable, disable, or flush data (writethrough) cache"
105 );