1 /* 2 * Copyright (C) Nelson Integration, LLC 2016 3 * Author: Eric Nelson<eric@nelint.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 * 7 */ 8 #include <config.h> 9 #include <common.h> 10 #include <malloc.h> 11 #include <part.h> 12 13 static int blkc_show(cmd_tbl_t *cmdtp, int flag, 14 int argc, char * const argv[]) 15 { 16 struct block_cache_stats stats; 17 blkcache_stats(&stats); 18 19 printf(" hits: %u\n" 20 " misses: %u\n" 21 " entries: %u\n" 22 " max blocks/entry: %u\n" 23 " max cache entries: %u\n", 24 stats.hits, stats.misses, stats.entries, 25 stats.max_blocks_per_entry, stats.max_entries); 26 return 0; 27 } 28 29 static int blkc_configure(cmd_tbl_t *cmdtp, int flag, 30 int argc, char * const argv[]) 31 { 32 unsigned blocks_per_entry, max_entries; 33 if (argc != 3) 34 return CMD_RET_USAGE; 35 36 blocks_per_entry = simple_strtoul(argv[1], 0, 0); 37 max_entries = simple_strtoul(argv[2], 0, 0); 38 blkcache_configure(blocks_per_entry, max_entries); 39 printf("changed to max of %u entries of %u blocks each\n", 40 max_entries, blocks_per_entry); 41 return 0; 42 } 43 44 static cmd_tbl_t cmd_blkc_sub[] = { 45 U_BOOT_CMD_MKENT(show, 0, 0, blkc_show, "", ""), 46 U_BOOT_CMD_MKENT(configure, 3, 0, blkc_configure, "", ""), 47 }; 48 49 static __maybe_unused void blkc_reloc(void) 50 { 51 static int relocated; 52 53 if (!relocated) { 54 fixup_cmdtable(cmd_blkc_sub, ARRAY_SIZE(cmd_blkc_sub)); 55 relocated = 1; 56 }; 57 } 58 59 static int do_blkcache(cmd_tbl_t *cmdtp, int flag, 60 int argc, char * const argv[]) 61 { 62 cmd_tbl_t *c; 63 64 #ifdef CONFIG_NEEDS_MANUAL_RELOC 65 blkc_reloc(); 66 #endif 67 if (argc < 2) 68 return CMD_RET_USAGE; 69 70 /* Strip off leading argument */ 71 argc--; 72 argv++; 73 74 c = find_cmd_tbl(argv[0], &cmd_blkc_sub[0], ARRAY_SIZE(cmd_blkc_sub)); 75 76 if (c) 77 return c->cmd(cmdtp, flag, argc, argv); 78 else 79 return CMD_RET_USAGE; 80 81 return 0; 82 } 83 84 U_BOOT_CMD( 85 blkcache, 4, 0, do_blkcache, 86 "block cache diagnostics and control", 87 "show - show and reset statistics\n" 88 "blkcache configure blocks entries\n" 89 ); 90