Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
Hi Sughosh, On Thu, 10 Mar 2022 at 05:43, Sughosh Ganu wrote: > > hi Simon, > > On Wed, 9 Mar 2022 at 21:02, Simon Glass wrote: > > > > Hi Sugosh, > > > > On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu wrote: > > > > > > 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 > > > Tested-by: Heinrich Schuchardt > > > --- > > > > > > Changes since V2: None > > > > > > cmd/rng.c | 31 +++ > > > 1 file changed, 23 insertions(+), 8 deletions(-) > > > > > > diff --git a/cmd/rng.c b/cmd/rng.c > > > index 1ad5a096c0..bb89cfa784 100644 > > > --- a/cmd/rng.c > > > +++ b/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) { > > > + 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(UCLASS_RNG, devnum, ) || !dev) { > > > > Devices are numbered by aliases, so you should use > > uclass_get_device_by_seq() here. > > > > > printf("No RNG device\n"); > > > return CMD_RET_FAILURE; > > > } > > > > > > - if (argc >= 2) > > > - n = hextoul(argv[1], NULL); > > > - > > > buf = malloc(n); > > > > No need to malloc(), just set a limit for (say 64) bytes. See how > > cmd_mem.c does it. > > These changes were not made as part of this patch. This is already > existing code. I will make the changes that you suggest nonetheless. > Btw, can you please take a look at the v4 patchset for this series. > Thanks. Ah I see, then you could do it as another patch. Regards, Simon
Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
hi Simon, On Wed, 9 Mar 2022 at 21:02, Simon Glass wrote: > > Hi Sugosh, > > On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu wrote: > > > > 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 > > Tested-by: Heinrich Schuchardt > > --- > > > > Changes since V2: None > > > > cmd/rng.c | 31 +++ > > 1 file changed, 23 insertions(+), 8 deletions(-) > > > > diff --git a/cmd/rng.c b/cmd/rng.c > > index 1ad5a096c0..bb89cfa784 100644 > > --- a/cmd/rng.c > > +++ b/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) { > > + 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(UCLASS_RNG, devnum, ) || !dev) { > > Devices are numbered by aliases, so you should use > uclass_get_device_by_seq() here. > > > printf("No RNG device\n"); > > return CMD_RET_FAILURE; > > } > > > > - if (argc >= 2) > > - n = hextoul(argv[1], NULL); > > - > > buf = malloc(n); > > No need to malloc(), just set a limit for (say 64) bytes. See how > cmd_mem.c does it. These changes were not made as part of this patch. This is already existing code. I will make the changes that you suggest nonetheless. Btw, can you please take a look at the v4 patchset for this series. Thanks. -sughosh > > > 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 > > ); > > -- > > 2.25.1 > > > > Regards, > Simon
Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
Hi Sugosh, On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu wrote: > > 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 > Tested-by: Heinrich Schuchardt > --- > > Changes since V2: None > > cmd/rng.c | 31 +++ > 1 file changed, 23 insertions(+), 8 deletions(-) > > diff --git a/cmd/rng.c b/cmd/rng.c > index 1ad5a096c0..bb89cfa784 100644 > --- a/cmd/rng.c > +++ b/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) { > + 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(UCLASS_RNG, devnum, ) || !dev) { Devices are numbered by aliases, so you should use uclass_get_device_by_seq() here. > printf("No RNG device\n"); > return CMD_RET_FAILURE; > } > > - if (argc >= 2) > - n = hextoul(argv[1], NULL); > - > buf = malloc(n); No need to malloc(), just set a limit for (say 64) bytes. See how cmd_mem.c does it. > 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 > ); > -- > 2.25.1 > Regards, Simon
Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
On Fri, Mar 04, 2022 at 07:04:27PM +0530, Sughosh Ganu wrote: > 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 > Tested-by: Heinrich Schuchardt > --- > > Changes since V2: None > > cmd/rng.c | 31 +++ > 1 file changed, 23 insertions(+), 8 deletions(-) > > diff --git a/cmd/rng.c b/cmd/rng.c > index 1ad5a096c0..bb89cfa784 100644 > --- a/cmd/rng.c > +++ b/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) { > + 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(UCLASS_RNG, devnum, ) || !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 > ); > -- > 2.25.1 > Reviewed-by: Ilias Apalodimas
Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
hi Simon, On Wed, 9 Mar 2022 at 08:05, Simon Glass wrote: > > Hi Sughosh, > > On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu wrote: > > > > 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 > > Tested-by: Heinrich Schuchardt > > --- > > > > Changes since V2: None > > > > cmd/rng.c | 31 +++ > > 1 file changed, 23 insertions(+), 8 deletions(-) > > Please add docs to doc/ and a test for the command. That is being done in patches 7 and 8 of this series. -sughosh > > Regards, > Simon
Re: [PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
Hi Sughosh, On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu wrote: > > 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 > Tested-by: Heinrich Schuchardt > --- > > Changes since V2: None > > cmd/rng.c | 31 +++ > 1 file changed, 23 insertions(+), 8 deletions(-) Please add docs to doc/ and a test for the command. Regards, Simon
[PATCH v3 6/8] 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 Tested-by: Heinrich Schuchardt --- Changes since V2: None cmd/rng.c | 31 +++ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/cmd/rng.c b/cmd/rng.c index 1ad5a096c0..bb89cfa784 100644 --- a/cmd/rng.c +++ b/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) { + 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(UCLASS_RNG, devnum, ) || !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 ); -- 2.25.1