cmd: rng: Add support for selecting RNG device
The 'rng' u-boot command is used for printing a select number of random bytes on the console. Currently, the RNG device from which the random bytes are read is fixed. However, a platform can have multiple RNG devices, one example being qemu, which has a virtio RNG device and the RNG pseudo device through the TPM chip. Extend the 'rng' command so that the user can provide the RNG device number from which the random bytes are to be read. This will be the device index under the RNG uclass. Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org> Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
aedd45138e
commit
87ab234c1c
31
cmd/rng.c
31
cmd/rng.c
@ -13,19 +13,34 @@
|
||||
|
||||
static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
{
|
||||
size_t n = 0x40;
|
||||
size_t n;
|
||||
struct udevice *dev;
|
||||
void *buf;
|
||||
int devnum;
|
||||
int ret = CMD_RET_SUCCESS;
|
||||
|
||||
if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
|
||||
switch (argc) {
|
||||
case 1:
|
||||
devnum = 0;
|
||||
n = 0x40;
|
||||
break;
|
||||
case 2:
|
||||
devnum = hextoul(argv[1], NULL);
|
||||
n = 0x40;
|
||||
break;
|
||||
case 3:
|
||||
devnum = hextoul(argv[1], NULL);
|
||||
n = hextoul(argv[2], NULL);
|
||||
break;
|
||||
default:
|
||||
return CMD_RET_USAGE;
|
||||
}
|
||||
|
||||
if (uclass_get_device_by_seq(UCLASS_RNG, devnum, &dev) || !dev) {
|
||||
printf("No RNG device\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
if (argc >= 2)
|
||||
n = hextoul(argv[1], NULL);
|
||||
|
||||
buf = malloc(n);
|
||||
if (!buf) {
|
||||
printf("Out of memory\n");
|
||||
@ -46,12 +61,12 @@ static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
|
||||
#ifdef CONFIG_SYS_LONGHELP
|
||||
static char rng_help_text[] =
|
||||
"[n]\n"
|
||||
" - print n random bytes\n";
|
||||
"[dev [n]]\n"
|
||||
" - print n random bytes read from dev\n";
|
||||
#endif
|
||||
|
||||
U_BOOT_CMD(
|
||||
rng, 2, 0, do_rng,
|
||||
rng, 3, 0, do_rng,
|
||||
"print bytes from the hardware random number generator",
|
||||
rng_help_text
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user