summaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/Kconfig11
-rw-r--r--cmd/Makefile1
-rw-r--r--cmd/blkcache.c89
3 files changed, 101 insertions, 0 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig
index cdcaff8bea..fe8b4f0510 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -497,6 +497,17 @@ config SYS_AMBAPP_PRINT_ON_STARTUP
help
Show AMBA Plug-n-Play information on startup.
+config CMD_BLOCK_CACHE
+ bool "blkcache - control and stats for block cache"
+ depends on BLOCK_CACHE
+ default y if BLOCK_CACHE
+ help
+ Enable the blkcache command, which can be used to control the
+ operation of the cache functions.
+ This is most useful when fine-tuning the operation of the cache
+ during development, but also allows the cache to be disabled when
+ it might hurt performance (e.g. when using the ums command).
+
config CMD_TIME
bool "time"
help
diff --git a/cmd/Makefile b/cmd/Makefile
index 7604621859..ba04197307 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -20,6 +20,7 @@ obj-$(CONFIG_SOURCE) += source.o
obj-$(CONFIG_CMD_SOURCE) += source.o
obj-$(CONFIG_CMD_BDI) += bdinfo.o
obj-$(CONFIG_CMD_BEDBUG) += bedbug.o
+obj-$(CONFIG_CMD_BLOCK_CACHE) += blkcache.o
obj-$(CONFIG_CMD_BMP) += bmp.o
obj-$(CONFIG_CMD_BOOTEFI) += bootefi.o
obj-$(CONFIG_CMD_BOOTMENU) += bootmenu.o
diff --git a/cmd/blkcache.c b/cmd/blkcache.c
new file mode 100644
index 0000000000..9a619e2199
--- /dev/null
+++ b/cmd/blkcache.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) Nelson Integration, LLC 2016
+ * Author: Eric Nelson<eric@nelint.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ */
+#include <config.h>
+#include <common.h>
+#include <malloc.h>
+#include <part.h>
+
+static int blkc_show(cmd_tbl_t *cmdtp, int flag,
+ int argc, char * const argv[])
+{
+ struct block_cache_stats stats;
+ blkcache_stats(&stats);
+
+ printf(" hits: %u\n"
+ " misses: %u\n"
+ " entries: %u\n"
+ " max blocks/entry: %u\n"
+ " max cache entries: %u\n",
+ stats.hits, stats.misses, stats.entries,
+ stats.max_blocks_per_entry, stats.max_entries);
+ return 0;
+}
+
+static int blkc_configure(cmd_tbl_t *cmdtp, int flag,
+ int argc, char * const argv[])
+{
+ unsigned blocks_per_entry, max_entries;
+ if (argc != 3)
+ return CMD_RET_USAGE;
+
+ blocks_per_entry = simple_strtoul(argv[1], 0, 0);
+ max_entries = simple_strtoul(argv[2], 0, 0);
+ blkcache_configure(blocks_per_entry, max_entries);
+ printf("changed to max of %u entries of %u blocks each\n",
+ max_entries, blocks_per_entry);
+ return 0;
+}
+
+static cmd_tbl_t cmd_blkc_sub[] = {
+ U_BOOT_CMD_MKENT(show, 0, 0, blkc_show, "", ""),
+ U_BOOT_CMD_MKENT(configure, 3, 0, blkc_configure, "", ""),
+};
+
+static __maybe_unused void blkc_reloc(void)
+{
+ static int relocated;
+
+ if (!relocated) {
+ fixup_cmdtable(cmd_blkc_sub, ARRAY_SIZE(cmd_blkc_sub));
+ relocated = 1;
+ };
+}
+
+static int do_blkcache(cmd_tbl_t *cmdtp, int flag,
+ int argc, char * const argv[])
+{
+ cmd_tbl_t *c;
+
+#ifdef CONFIG_NEEDS_MANUAL_RELOC
+ blkc_reloc();
+#endif
+ if (argc < 2)
+ return CMD_RET_USAGE;
+
+ /* Strip off leading argument */
+ argc--;
+ argv++;
+
+ c = find_cmd_tbl(argv[0], &cmd_blkc_sub[0], ARRAY_SIZE(cmd_blkc_sub));
+
+ if (c)
+ return c->cmd(cmdtp, flag, argc, argv);
+ else
+ return CMD_RET_USAGE;
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ blkcache, 4, 0, do_blkcache,
+ "block cache diagnostics and control",
+ "show - show and reset statistics\n"
+ "blkcache configure blocks entries\n"
+);
OpenPOWER on IntegriCloud