On 2/24/22 19:05, 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 <sughosh.g...@linaro.org>
---
  cmd/rng.c | 31 +++++++++++++++++++++++--------
  1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/cmd/rng.c b/cmd/rng.c
index 1ad5a096c0..2b197e322e 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) || !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) || !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"

Thanks for updating the command.

I think this should be

    [dev [n]]

to indicate that dev takes precedence if only one parameter is provided.

A man-page doc/usage/rng.rst should be added in future.

Tested-by: Heinrich Schuchardt <xypron.g...@gmx.de>


+       "  - 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
  );

Reply via email to