[U-Boot] [PATCH 1/3] common: cmd_part: Proper alignment

This fixes a misaligned declaration.
Signed-off-by: Paul Kocialkowski contact@paulk.fr --- common/cmd_part.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/cmd_part.c b/common/cmd_part.c index 8483c12..4bdbf90 100644 --- a/common/cmd_part.c +++ b/common/cmd_part.c @@ -88,7 +88,7 @@ static int do_part_list(int argc, char * const argv[]) if (var != NULL) { int p; char str[512] = { '\0', }; - disk_partition_t info; + disk_partition_t info;
for (p = 1; p < 128; p++) { char t[5];

This introduces the part start and part size sub-commands. The purpose of these is to store the start block and size of a partition in a variable, given the device and partition number.
This allows reading raw data that fits a single partition more easily. For instance, this could be used to figure out the start block and size of a kernel partition when a partition table is present, given the partition number.
Signed-off-by: Paul Kocialkowski contact@paulk.fr --- common/cmd_part.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-)
diff --git a/common/cmd_part.c b/common/cmd_part.c index 4bdbf90..b33498b 100644 --- a/common/cmd_part.c +++ b/common/cmd_part.c @@ -112,6 +112,62 @@ static int do_part_list(int argc, char * const argv[]) return 0; }
+static int do_part_start(int argc, char * const argv[]) +{ + block_dev_desc_t *desc; + disk_partition_t info; + char buf[512] = { 0 }; + int part; + int err; + int ret; + + if (argc < 4) + return CMD_RET_USAGE; + + part = simple_strtoul(argv[2], NULL, 0); + + ret = get_device(argv[0], argv[1], &desc); + if (ret < 0) + return 1; + + err = get_partition_info(desc, part, &info); + if (err) + return 1; + + snprintf(&buf, sizeof(buf), "0x%x", info.start); + setenv(argv[3], buf); + + return 0; +} + +static int do_part_size(int argc, char * const argv[]) +{ + block_dev_desc_t *desc; + disk_partition_t info; + char buf[512] = { 0 }; + int part; + int err; + int ret; + + if (argc < 4) + return CMD_RET_USAGE; + + part = simple_strtoul(argv[2], NULL, 0); + + ret = get_device(argv[0], argv[1], &desc); + if (ret < 0) + return 1; + + err = get_partition_info(desc, part, &info); + if (err) + return 1; + + snprintf(&buf, sizeof(buf), "0x%x", info.size); + setenv(argv[3], buf); + + return 0; +} + static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { if (argc < 2) @@ -121,6 +177,10 @@ static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return do_part_uuid(argc - 2, argv + 2); else if (!strcmp(argv[1], "list")) return do_part_list(argc - 2, argv + 2); + else if (!strcmp(argv[1], "start")) + return do_part_start(argc - 2, argv + 2); + else if (!strcmp(argv[1], "size")) + return do_part_size(argc - 2, argv + 2);
return CMD_RET_USAGE; } @@ -136,5 +196,9 @@ U_BOOT_CMD( " - print a device's partition table\n" "part list <interface> <dev> [flags] <varname>\n" " - set environment variable to the list of partitions\n" - " flags can be -bootable (list only bootable partitions)" + " flags can be -bootable (list only bootable partitions)\n" + "part start <interface> <dev> <part> <varname>\n" + " - set environment variable to the start of the partition (in blocks)\n" + "part size <interface> <dev> <part> <varname>\n" + " - set environment variable to the size of the partition (in blocks)" );

When a failure occurs when selecting the device or partition, the user should be notified through an error print.
Signed-off-by: Paul Kocialkowski contact@paulk.fr --- common/cmd_part.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/common/cmd_part.c b/common/cmd_part.c index b33498b..39c870b 100644 --- a/common/cmd_part.c +++ b/common/cmd_part.c @@ -38,8 +38,10 @@ static int do_part_uuid(int argc, char * const argv[]) return CMD_RET_USAGE;
part = get_device_and_partition(argv[0], argv[1], &dev_desc, &info, 0); - if (part < 0) + if (part < 0) { + error("Invalid device and/or partition\n"); return 1; + }
if (argc > 2) setenv(argv[2], info.uuid); @@ -82,8 +84,10 @@ static int do_part_list(int argc, char * const argv[]) }
ret = get_device(argv[0], argv[1], &desc); - if (ret < 0) + if (ret < 0) { + error("Invalid device\n"); return 1; + }
if (var != NULL) { int p; @@ -127,12 +131,16 @@ static int do_part_start(int argc, char * const argv[]) part = simple_strtoul(argv[2], NULL, 0);
ret = get_device(argv[0], argv[1], &desc); - if (ret < 0) + if (ret < 0) { + error("Invalid device\n"); return 1; + }
err = get_partition_info(desc, part, &info); - if (err) + if (err) { + error("Invalid partition number\n"); return 1; + }
snprintf(&buf, sizeof(buf), "0x%x", info.start); setenv(argv[3], buf); @@ -155,12 +163,16 @@ static int do_part_size(int argc, char * const argv[]) part = simple_strtoul(argv[2], NULL, 0);
ret = get_device(argv[0], argv[1], &desc); - if (ret < 0) + if (ret < 0) { + error("Invalid device\n"); return 1; + }
err = get_partition_info(desc, part, &info); - if (err) + if (err) { + error("Invalid partition number\n"); return 1; + }
snprintf(&buf, sizeof(buf), "0x%x", info.size); setenv(argv[3], buf);
participants (1)
-
Paul Kocialkowski