]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
e40cf34a EN |
2 | /* |
3 | * Copyright (C) Nelson Integration, LLC 2016 | |
4 | * Author: Eric Nelson<[email protected]> | |
5 | * | |
e40cf34a | 6 | */ |
09140113 | 7 | #include <command.h> |
e40cf34a | 8 | #include <config.h> |
e40cf34a EN |
9 | #include <malloc.h> |
10 | #include <part.h> | |
301bac60 | 11 | #include <vsprintf.h> |
e40cf34a | 12 | |
09140113 SG |
13 | static int blkc_show(struct cmd_tbl *cmdtp, int flag, |
14 | int argc, char *const argv[]) | |
e40cf34a EN |
15 | { |
16 | struct block_cache_stats stats; | |
17 | blkcache_stats(&stats); | |
18 | ||
7e872146 EN |
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", | |
e40cf34a EN |
24 | stats.hits, stats.misses, stats.entries, |
25 | stats.max_blocks_per_entry, stats.max_entries); | |
26 | return 0; | |
27 | } | |
28 | ||
09140113 SG |
29 | static int blkc_configure(struct cmd_tbl *cmdtp, int flag, |
30 | int argc, char *const argv[]) | |
e40cf34a EN |
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 | ||
09140113 | 44 | static struct cmd_tbl cmd_blkc_sub[] = { |
e40cf34a EN |
45 | U_BOOT_CMD_MKENT(show, 0, 0, blkc_show, "", ""), |
46 | U_BOOT_CMD_MKENT(configure, 3, 0, blkc_configure, "", ""), | |
47 | }; | |
48 | ||
09140113 SG |
49 | static int do_blkcache(struct cmd_tbl *cmdtp, int flag, |
50 | int argc, char *const argv[]) | |
e40cf34a | 51 | { |
09140113 | 52 | struct cmd_tbl *c; |
e40cf34a | 53 | |
e40cf34a EN |
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 | ||
195c94a2 | 63 | if (!c) |
e40cf34a EN |
64 | return CMD_RET_USAGE; |
65 | ||
195c94a2 | 66 | return c->cmd(cmdtp, flag, argc, argv); |
e40cf34a EN |
67 | } |
68 | ||
69 | U_BOOT_CMD( | |
70 | blkcache, 4, 0, do_blkcache, | |
71 | "block cache diagnostics and control", | |
72 | "show - show and reset statistics\n" | |
f86eba03 ABK |
73 | "blkcache configure <blocks> <entries> " |
74 | "- set max blocks per entry and max cache entries\n" | |
e40cf34a | 75 | ); |