diff mbox series

[U-Boot,3/4] cmd: dtimg: Make <varname> an optional argument

Message ID 20191129192919.27715-4-erosca@de.adit-jv.com
State Changes Requested
Delegated to: Tom Rini
Headers show
Series cmd: dtimg: Enhance with --id and --rev options (take #1) | expand

Commit Message

Eugeniu Rosca Nov. 29, 2019, 7:29 p.m. UTC
Unlike dtimg, U-Boot commands like part [1], fstype [2] and uuid [3]
accept an _optional_ <varname> parameter, which means that they will
output the result to console whenever <varname> is skipped. This is
extremely useful during development.

Allow "dtimg" to behave in a similar fashion [4]. In addition:
 - replace env_set() by env_set_hex()
 - track and report the failures of env_set_hex()
 - amend command's help/usage text

[1] => part start mmc 0 1
    800
    => part start mmc 0 1 myvar; print myvar
    myvar=800
[2] => fstype mmc 0:1
    ext4
    => fstype mmc 0:1 myvar; print myvar
    myvar=ext4
[3] => uuid
    b3909b50-55df-4173-b83c-b05343d2d5d2
    => uuid myvar; print myvar
    myvar=4c04b15f-d0c1-4f98-9aca-ab62a66be864
[4] => dtimg start 0x48000000 0
    0x480000e0
    => dtimg start 0x48000000 0 myvar; print myvar
    myvar=480000e0

Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
---
 cmd/dtimg.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

Comments

Sam Protsenko Dec. 4, 2019, 5:47 p.m. UTC | #1
Hi,

On Fri, Nov 29, 2019 at 9:30 PM Eugeniu Rosca <erosca@de.adit-jv.com> wrote:
>
> Unlike dtimg, U-Boot commands like part [1], fstype [2] and uuid [3]
> accept an _optional_ <varname> parameter, which means that they will
> output the result to console whenever <varname> is skipped. This is
> extremely useful during development.
>
> Allow "dtimg" to behave in a similar fashion [4]. In addition:
>  - replace env_set() by env_set_hex()

Thanks, didn't know that existed. I like it.

>  - track and report the failures of env_set_hex()

"grep -Ir env_set cmd/" shows nobody really cares to check env_set*
error codes. Probably it's very unlikely that environment is broken at
the point of commands execution?

>  - amend command's help/usage text
>
> [1] => part start mmc 0 1
>     800
>     => part start mmc 0 1 myvar; print myvar
>     myvar=800
> [2] => fstype mmc 0:1
>     ext4
>     => fstype mmc 0:1 myvar; print myvar
>     myvar=ext4
> [3] => uuid
>     b3909b50-55df-4173-b83c-b05343d2d5d2
>     => uuid myvar; print myvar
>     myvar=4c04b15f-d0c1-4f98-9aca-ab62a66be864
> [4] => dtimg start 0x48000000 0
>     0x480000e0
>     => dtimg start 0x48000000 0 myvar; print myvar
>     myvar=480000e0
>
> Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
> ---
>  cmd/dtimg.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/cmd/dtimg.c b/cmd/dtimg.c
> index 5989081b0c14..5348a4ad46e8 100644
> --- a/cmd/dtimg.c
> +++ b/cmd/dtimg.c
> @@ -55,9 +55,10 @@ static int dtimg_get_fdt(int argc, char * const argv[], enum cmd_dtimg_info cmd)
>         char *endp;
>         ulong fdt_addr;
>         u32 fdt_size;
> -       char buf[65];
> +       ulong envval;
> +       int ret;
>
> -       if (argc != 4)
> +       if (argc < 3)
>                 return CMD_RET_USAGE;
>
>         if (dtimg_get_argv_addr(argv[1], &hdr_addr) != CMD_RET_SUCCESS)
> @@ -74,17 +75,24 @@ static int dtimg_get_fdt(int argc, char * const argv[], enum cmd_dtimg_info cmd)
>
>         switch (cmd) {
>         case CMD_DTIMG_START:
> -               snprintf(buf, sizeof(buf), "%lx", fdt_addr);
> +               envval = fdt_addr;
>                 break;
>         case CMD_DTIMG_SIZE:
> -               snprintf(buf, sizeof(buf), "%x", fdt_size);
> +               envval = fdt_size;
>                 break;
>         default:
>                 printf("Error: Unknown cmd_dtimg_info value: %d\n", cmd);
>                 return CMD_RET_FAILURE;
>         }
>
> -       env_set(argv[3], buf);
> +       if (argv[3]) {
> +               ret = env_set_hex(argv[3], envval);
> +               if (ret)
> +                       printf("Error(%d) env-setting '%s=0x%lx'\n",
> +                              ret, argv[3], envval);
> +       } else {
> +               printf("0x%lx\n", envval);
> +       }
>
>         return CMD_RET_SUCCESS;
>  }
> @@ -131,12 +139,12 @@ U_BOOT_CMD(
>         "dump <addr>\n"
>         "    - parse specified image and print its structure info\n"
>         "      <addr>: image address in RAM, in hex\n"
> -       "dtimg start <addr> <index> <varname>\n"
> +       "dtimg start <addr> <index> [<varname>]\n"

Bikeshedding: maybe use just [varname]?

>         "    - get address (hex) of FDT in the image, by index\n"
>         "      <addr>: image address in RAM, in hex\n"
>         "      <index>: index of desired FDT in the image\n"
>         "      <varname>: name of variable where to store address of FDT\n"
> -       "dtimg size <addr> <index> <varname>\n"
> +       "dtimg size <addr> <index> [<varname>]\n"
>         "    - get size (hex, bytes) of FDT in the image, by index\n"
>         "      <addr>: image address in RAM, in hex\n"
>         "      <index>: index of desired FDT in the image\n"
> --
> 2.24.0
>

Other than those minor comments:

Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org>
diff mbox series

Patch

diff --git a/cmd/dtimg.c b/cmd/dtimg.c
index 5989081b0c14..5348a4ad46e8 100644
--- a/cmd/dtimg.c
+++ b/cmd/dtimg.c
@@ -55,9 +55,10 @@  static int dtimg_get_fdt(int argc, char * const argv[], enum cmd_dtimg_info cmd)
 	char *endp;
 	ulong fdt_addr;
 	u32 fdt_size;
-	char buf[65];
+	ulong envval;
+	int ret;
 
-	if (argc != 4)
+	if (argc < 3)
 		return CMD_RET_USAGE;
 
 	if (dtimg_get_argv_addr(argv[1], &hdr_addr) != CMD_RET_SUCCESS)
@@ -74,17 +75,24 @@  static int dtimg_get_fdt(int argc, char * const argv[], enum cmd_dtimg_info cmd)
 
 	switch (cmd) {
 	case CMD_DTIMG_START:
-		snprintf(buf, sizeof(buf), "%lx", fdt_addr);
+		envval = fdt_addr;
 		break;
 	case CMD_DTIMG_SIZE:
-		snprintf(buf, sizeof(buf), "%x", fdt_size);
+		envval = fdt_size;
 		break;
 	default:
 		printf("Error: Unknown cmd_dtimg_info value: %d\n", cmd);
 		return CMD_RET_FAILURE;
 	}
 
-	env_set(argv[3], buf);
+	if (argv[3]) {
+		ret = env_set_hex(argv[3], envval);
+		if (ret)
+			printf("Error(%d) env-setting '%s=0x%lx'\n",
+			       ret, argv[3], envval);
+	} else {
+		printf("0x%lx\n", envval);
+	}
 
 	return CMD_RET_SUCCESS;
 }
@@ -131,12 +139,12 @@  U_BOOT_CMD(
 	"dump <addr>\n"
 	"    - parse specified image and print its structure info\n"
 	"      <addr>: image address in RAM, in hex\n"
-	"dtimg start <addr> <index> <varname>\n"
+	"dtimg start <addr> <index> [<varname>]\n"
 	"    - get address (hex) of FDT in the image, by index\n"
 	"      <addr>: image address in RAM, in hex\n"
 	"      <index>: index of desired FDT in the image\n"
 	"      <varname>: name of variable where to store address of FDT\n"
-	"dtimg size <addr> <index> <varname>\n"
+	"dtimg size <addr> <index> [<varname>]\n"
 	"    - get size (hex, bytes) of FDT in the image, by index\n"
 	"      <addr>: image address in RAM, in hex\n"
 	"      <index>: index of desired FDT in the image\n"