[U-Boot] [PATCH v2] cmd: mem: Add a command to fill the memory with random data

Jean-Jacques Hiblot jjhiblot at ti.com
Tue Jul 2 08:36:06 UTC 2019


This command fills the memory with data produced by rand().
This command depends on CONFIG_LIB_RAND.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
---
changes in v2:
- Do not include the command if CONFIG_LIB_RAND is not set
- make do_random() static

cmd/Kconfig |  3 ++-
 cmd/mem.c   | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index cda7931fe3..f9385fcc08 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -537,7 +537,7 @@ config CMD_MEMINFO
 	  Display memory information.
 
 config CMD_MEMORY
-	bool "md, mm, nm, mw, cp, cmp, base, loop"
+	bool "md, mm, nm, mw, cp, cmp, base, loop, random"
 	default y
 	help
 	  Memory commands.
@@ -549,6 +549,7 @@ config CMD_MEMORY
 	    cmp - memory compare
 	    base - print or set address offset
 	    loop - initialize loop on address range
+	    random - fill memory with random data
 
 config CMD_MEMTEST
 	bool "memtest"
diff --git a/cmd/mem.c b/cmd/mem.c
index 392ed1756b..e5af12db57 100644
--- a/cmd/mem.c
+++ b/cmd/mem.c
@@ -1082,6 +1082,49 @@ static int do_mem_crc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 #endif
 
+#ifdef CONFIG_LIB_RAND
+static int do_random(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	unsigned long addr, len;
+	unsigned long seed; // NOT INITIALIZED ON PURPOSE
+	unsigned int *buf, *start;
+	unsigned char *buf8;
+	unsigned int i;
+
+	if (argc < 3 || argc > 4) {
+		printf("usage: %s <addr> <len> [<seed>]\n", argv[0]);
+		return 0;
+	}
+
+	len = simple_strtoul(argv[2], NULL, 16);
+	addr = simple_strtoul(argv[1], NULL, 16);
+
+	if (argc == 4) {
+		seed = simple_strtoul(argv[3], NULL, 16);
+		if (seed == 0) {
+			printf("The seed cannot be 0. Using 0xDEADBEEF.\n");
+			seed = 0xDEADBEEF;
+		}
+	} else {
+		seed = get_timer(0) ^ rand();
+	}
+
+	srand(seed);
+	start = map_sysmem(addr, len);
+	buf = start;
+	for (i = 0; i < (len / 4); i++)
+		*buf++ = rand();
+
+	buf8 = (unsigned char *)buf;
+	for (i = 0; i < (len % 4); i++)
+		*buf8++ = rand() & 0xFF;
+
+	unmap_sysmem(start);
+	printf("%lu bytes filled with random data\n", len);
+	return 1;
+}
+#endif
+
 /**************************************************/
 U_BOOT_CMD(
 	md,	3,	1,	do_mem_md,
@@ -1250,3 +1293,12 @@ U_BOOT_CMD(
 	""
 );
 #endif
+
+#ifdef CONFIG_LIB_RAND
+U_BOOT_CMD(
+	random,	4,	0,	do_random,
+	"fill memory with random pattern",
+	"<addr> <len> [<seed>]\n"
+	"   - Fill 'len' bytes of memory starting at 'addr' with random data\n"
+);
+#endif
-- 
2.17.1



More information about the U-Boot mailing list