]>
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 EN |
8 | #include <config.h> |
9 | #include <common.h> | |
10 | #include <malloc.h> | |
11 | #include <part.h> | |
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 | ||
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 | ||
09140113 SG |
59 | static int do_blkcache(struct cmd_tbl *cmdtp, int flag, |
60 | int argc, char *const argv[]) | |
e40cf34a | 61 | { |
09140113 | 62 | struct cmd_tbl *c; |
e40cf34a EN |
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 | ||
195c94a2 | 76 | if (!c) |
e40cf34a EN |
77 | return CMD_RET_USAGE; |
78 | ||
195c94a2 | 79 | return c->cmd(cmdtp, flag, argc, argv); |
e40cf34a EN |
80 | } |
81 | ||
82 | U_BOOT_CMD( | |
83 | blkcache, 4, 0, do_blkcache, | |
84 | "block cache diagnostics and control", | |
85 | "show - show and reset statistics\n" | |
f86eba03 ABK |
86 | "blkcache configure <blocks> <entries> " |
87 | "- set max blocks per entry and max cache entries\n" | |
e40cf34a | 88 | ); |