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

This command fills the memory with data produced by rand(). This command depends on CONFIG_LIB_RAND.
Signed-off-by: Jean-Jacques Hiblot jjhiblot@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

+Tom
On 02/07/2019 10:36, Jean-Jacques Hiblot wrote:
This command fills the memory with data produced by rand(). This command depends on CONFIG_LIB_RAND.
Signed-off-by: Jean-Jacques Hiblot jjhiblot@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

On Tue, Jul 02, 2019 at 10:50:43AM +0200, Jean-Jacques Hiblot wrote:
+Tom
On 02/07/2019 10:36, Jean-Jacques Hiblot wrote:
This command fills the memory with data produced by rand(). This command depends on CONFIG_LIB_RAND.
Signed-off-by: Jean-Jacques Hiblot jjhiblot@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
This needs to be a new CONFIG option that depends on CMD_MEM, thanks!
participants (2)
-
Jean-Jacques Hiblot
-
Tom Rini