Message ID | 1434184697-23410-3-git-send-email-contact@paulk.fr |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
On 06/13/2015 02:38 AM, Paul Kocialkowski wrote: > 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. Patches 1 and 2, Acked-by: Stephen Warren <swarren@nvidia.com> One minor comment here though: > diff --git a/common/cmd_part.c b/common/cmd_part.c > +static int do_part_start(int argc, char * const argv[]) > + if (argc < 4) > + return CMD_RET_USAGE; ... > + snprintf(buf, sizeof(buf), "0x%lx", info.start); > + setenv(argv[3], buf); It would be nice if the variable name parameter to this command (and part size) were optional, just like it is in "part uuid". This would make it simpler to run the command interactively while experimenting.
On Mon, Jun 15, 2015 at 08:59:47AM -0600, Stephen Warren wrote: > On 06/13/2015 02:38 AM, Paul Kocialkowski wrote: > >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. > > Patches 1 and 2, > Acked-by: Stephen Warren <swarren@nvidia.com> > > One minor comment here though: > > >diff --git a/common/cmd_part.c b/common/cmd_part.c > > >+static int do_part_start(int argc, char * const argv[]) > > >+ if (argc < 4) > >+ return CMD_RET_USAGE; > ... > >+ snprintf(buf, sizeof(buf), "0x%lx", info.start); > >+ setenv(argv[3], buf); > > It would be nice if the variable name parameter to this command (and > part size) were optional, just like it is in "part uuid". This would > make it simpler to run the command interactively while > experimenting. Yes. Also numbers are hex by default in U-Boot so we don't need the 0x here.
Le lundi 15 juin 2015 à 08:59 -0600, Stephen Warren a écrit : > On 06/13/2015 02:38 AM, Paul Kocialkowski wrote: > > 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. > > Patches 1 and 2, > Acked-by: Stephen Warren <swarren@nvidia.com> > > One minor comment here though: > > > diff --git a/common/cmd_part.c b/common/cmd_part.c > > > +static int do_part_start(int argc, char * const argv[]) > > > + if (argc < 4) > > + return CMD_RET_USAGE; > ... > > + snprintf(buf, sizeof(buf), "0x%lx", info.start); > > + setenv(argv[3], buf); > > It would be nice if the variable name parameter to this command (and > part size) were optional, just like it is in "part uuid". This would > make it simpler to run the command interactively while experimenting. Sure, that wouldn't hurt! Thanks for the review.
Le lundi 15 juin 2015 à 12:02 -0400, Tom Rini a écrit : > On Mon, Jun 15, 2015 at 08:59:47AM -0600, Stephen Warren wrote: > > On 06/13/2015 02:38 AM, Paul Kocialkowski wrote: > > >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. > > > > Patches 1 and 2, > > Acked-by: Stephen Warren <swarren@nvidia.com> > > > > One minor comment here though: > > > > >diff --git a/common/cmd_part.c b/common/cmd_part.c > > > > >+static int do_part_start(int argc, char * const argv[]) > > > > >+ if (argc < 4) > > >+ return CMD_RET_USAGE; > > ... > > >+ snprintf(buf, sizeof(buf), "0x%lx", info.start); > > >+ setenv(argv[3], buf); > > > > It would be nice if the variable name parameter to this command (and > > part size) were optional, just like it is in "part uuid". This would > > make it simpler to run the command interactively while > > experimenting. > > Yes. Also numbers are hex by default in U-Boot so we don't need the 0x > here. Thanks for the reminder. v3 doesn't include the 0x.
diff --git a/common/cmd_part.c b/common/cmd_part.c index 4bdbf90..7212ba6 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%lx", 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%lx", 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)" );
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(-)