hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
u-boot/cmd/cache.c
....@@ -54,7 +54,24 @@
5454
5555 static int do_dcache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
5656 {
57
+ ulong start, size;
58
+
5759 switch (argc) {
60
+ case 4:
61
+ start = simple_strtoul(argv[2], NULL, 16);
62
+ size = simple_strtoul(argv[3], NULL, 16);
63
+
64
+ switch (parse_argv(argv[1])) {
65
+ case 2:
66
+ printf("flush dcache: 0x%08lx - 0x%08lx\n", start, start + size);
67
+ flush_dcache_range(start, start + size);
68
+ break;
69
+ case 3:
70
+ printf("invalidate dcache: 0x%08lx - 0x%08lx\n", start, start + size);
71
+ invalidate_dcache_range(start, start + size);
72
+ break;
73
+ }
74
+ break;
5875 case 2: /* on / off */
5976 switch (parse_argv(argv[1])) {
6077 case 0:
....@@ -65,6 +82,9 @@
6582 break;
6683 case 2:
6784 flush_dcache_all();
85
+ break;
86
+ case 3:
87
+ printf("error: dcache invalidate require [start] [size]\n");
6888 break;
6989 }
7090 break;
....@@ -80,7 +100,9 @@
80100
81101 static int parse_argv(const char *s)
82102 {
83
- if (strcmp(s, "flush") == 0)
103
+ if (strcmp(s, "invalidate") == 0)
104
+ return 3;
105
+ else if (strcmp(s, "flush") == 0)
84106 return 2;
85107 else if (strcmp(s, "on") == 0)
86108 return 1;
....@@ -99,8 +121,8 @@
99121 );
100122
101123 U_BOOT_CMD(
102
- dcache, 2, 1, do_dcache,
124
+ dcache, 4, 1, do_dcache,
103125 "enable or disable data cache",
104
- "[on, off, flush]\n"
126
+ "[on, off, flush, invalidate] [start] [size]\n"
105127 " - enable, disable, or flush data (writethrough) cache"
106128 );