Home | History | Annotate | Download | only in cmd
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * (C) Copyright 2000
      4  * Wolfgang Denk, DENX Software Engineering, wd (at) 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 );
    106