1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) Nelson Integration, LLC 2016 4 * Author: Eric Nelson<eric@nelint.com> 5 * 6 */ 7#include <command.h> 8#include <config.h> 9#include <common.h> 10#include <malloc.h> 11#include <part.h> 12 13static int blkc_show(struct cmd_tbl *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 29static int blkc_configure(struct cmd_tbl *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 44static struct cmd_tbl 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 49static int do_blkcache(struct cmd_tbl *cmdtp, int flag, 50 int argc, char *const argv[]) 51{ 52 struct cmd_tbl *c; 53 54 if (argc < 2) 55 return CMD_RET_USAGE; 56 57 /* Strip off leading argument */ 58 argc--; 59 argv++; 60 61 c = find_cmd_tbl(argv[0], &cmd_blkc_sub[0], ARRAY_SIZE(cmd_blkc_sub)); 62 63 if (!c) 64 return CMD_RET_USAGE; 65 66 return c->cmd(cmdtp, flag, argc, argv); 67} 68 69U_BOOT_CMD( 70 blkcache, 4, 0, do_blkcache, 71 "block cache diagnostics and control", 72 "show - show and reset statistics\n" 73 "blkcache configure <blocks> <entries> " 74 "- set max blocks per entry and max cache entries\n" 75); 76