cmd: mem: Add a command to fill the memory with random data

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

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
This commit is contained in:
Jean-Jacques Hiblot 2019-07-02 14:23:26 +02:00 committed by Tom Rini
parent 849f9bef42
commit 803e1a3d38
2 changed files with 59 additions and 0 deletions

View File

@ -571,6 +571,13 @@ config CMD_MEMORY
base - print or set address offset
loop - initialize loop on address range
config CMD_RANDOM
bool "random"
default y
depends on CMD_MEMORY && (LIB_RAND || LIB_HW_RAND)
help
random - fill memory with random data
config CMD_MEMTEST
bool "memtest"
help

View File

@ -1082,6 +1082,49 @@ static int do_mem_crc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#endif
#ifdef CONFIG_CMD_RANDOM
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_CMD_RANDOM
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