Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command

2015-10-20 Thread Tom Rini
On Mon, Oct 19, 2015 at 04:59:28PM +0200, Patrick Delaunay wrote:
> 2015-10-15 23:46 GMT+02:00 Tom Rini :
> 
> > On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> > > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
> > >  wrote:
> > > > code under flag CONFIG_PARTITION_TYPE_GUID
> > > > add parameter guid to select partition type guid
> > > >
> > > > example of use with gpt command :
> > > >
> > > >   partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> > > >   size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7,
> > > >   size=0x7538ba00,uuid=${uuid_gpt_root},
> > > >   guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
> > >
> > > The mixture of UUID and GUID is confusing. What we want are the
> > > GUIDs/UUIDs for unique ID and the partition type. I would just call
> > > the partition type "type". This would allow the same format to be used
> > > for MBR partitions if someone wanted to do support for that.
> >
> > ... and if someone wants to add MBR support, there's enough use cases
> > for it (mainly around flashing/factory stuff) that I wouldn't object.
> > So yes, lets do this with that kind of thing in mind.
> >
> 
> 
> Hi,
> 
> if you prefer, I can modify the parameter name to "type" as proposed in a
> version 2 of the patchset.
> 
> partitions =
> uuid_disk=${uuid_gpt_disk}; \
> name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \
> 
> name=root,start=0x7,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4;
> 
> and to be coherent, I will also modify the field in the struct
> disk_partition_t to type_guid
> 
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> +chartype_guid[37];/* type GUID as string, if exists*/
> +#endif
>  } disk_partition_t;

Sounds like a plan, thanks!

-- 
Tom


signature.asc
Description: Digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command

2015-10-19 Thread Patrick Delaunay
2015-10-15 23:46 GMT+02:00 Tom Rini :

> On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> > On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
> >  wrote:
> > > code under flag CONFIG_PARTITION_TYPE_GUID
> > > add parameter guid to select partition type guid
> > >
> > > example of use with gpt command :
> > >
> > >   partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> > >   size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7,
> > >   size=0x7538ba00,uuid=${uuid_gpt_root},
> > >   guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
> >
> > The mixture of UUID and GUID is confusing. What we want are the
> > GUIDs/UUIDs for unique ID and the partition type. I would just call
> > the partition type "type". This would allow the same format to be used
> > for MBR partitions if someone wanted to do support for that.
>
> ... and if someone wants to add MBR support, there's enough use cases
> for it (mainly around flashing/factory stuff) that I wouldn't object.
> So yes, lets do this with that kind of thing in mind.
>


Hi,

if you prefer, I can modify the parameter name to "type" as proposed in a
version 2 of the patchset.

partitions =
uuid_disk=${uuid_gpt_disk}; \
name=boot,start=0x4400,size=0x6bc00,uuid=${uuid_gpt_boot}; \

name=root,start=0x7,size=0x7538ba00,uuid=${uuid_gpt_root},type=0fc63daf-8483-4772-8e79-3d69d8477de4;

and to be coherent, I will also modify the field in the struct
disk_partition_t to type_guid

+#ifdef CONFIG_PARTITION_TYPE_GUID
+chartype_guid[37];/* type GUID as string, if exists*/
+#endif
 } disk_partition_t;

Patrick
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command

2015-10-15 Thread Tom Rini
On Thu, Oct 15, 2015 at 03:58:24PM -0500, Rob Herring wrote:
> On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
>  wrote:
> > code under flag CONFIG_PARTITION_TYPE_GUID
> > add parameter guid to select partition type guid
> >
> > example of use with gpt command :
> >
> >   partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
> >   size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7,
> >   size=0x7538ba00,uuid=${uuid_gpt_root},
> >   guid=0fc63daf-8483-4772-8e79-3d69d8477de4;
> 
> The mixture of UUID and GUID is confusing. What we want are the
> GUIDs/UUIDs for unique ID and the partition type. I would just call
> the partition type "type". This would allow the same format to be used
> for MBR partitions if someone wanted to do support for that.

... and if someone wants to add MBR support, there's enough use cases
for it (mainly around flashing/factory stuff) that I wouldn't object.
So yes, lets do this with that kind of thing in mind.

-- 
Tom


signature.asc
Description: Digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command

2015-10-15 Thread Rob Herring
On Tue, Oct 13, 2015 at 9:23 AM, Patrick Delaunay
 wrote:
> code under flag CONFIG_PARTITION_TYPE_GUID
> add parameter guid to select partition type guid
>
> example of use with gpt command :
>
>   partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
>   size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7,
>   size=0x7538ba00,uuid=${uuid_gpt_root},
>   guid=0fc63daf-8483-4772-8e79-3d69d8477de4;

The mixture of UUID and GUID is confusing. What we want are the
GUIDs/UUIDs for unique ID and the partition type. I would just call
the partition type "type". This would allow the same format to be used
for MBR partitions if someone wanted to do support for that.

Rob

>
>   gpt write mmc 0 $partitions
>
> Signed-off-by: Patrick Delaunay 
> ---
>
>  common/cmd_gpt.c | 17 +
>  disk/part.c  |  9 +
>  disk/part_efi.c  | 25 +
>  include/part.h   |  3 +++
>  4 files changed, 54 insertions(+)
>
> diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c
> index c56fe15..1e8f927 100644
> --- a/common/cmd_gpt.c
> +++ b/common/cmd_gpt.c
> @@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
>  strcpy((char *)parts[i].uuid, p);
>  free(val);
>  }
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> +/* guid */
> +val = extract_val(tok, "guid");
> +if (val) {
> +/* 'guid' is optional */
> +if (extract_env(val, ))
> +p = val;
> +if (strlen(p) >= sizeof(parts[i].guid)) {
> +printf("Wrong guid format for partition %d\n",
> +   i);
> +errno = -4;
> +goto err;
> +}
> +strcpy((char *)parts[i].guid, p);
> +free(val);
> +}
> +#endif
>  /* name */
>  val = extract_val(tok, "name");
>  if (!val) { /* name is mandatory */
> diff --git a/disk/part.c b/disk/part.c
> index 43485c9..316454d 100644
> --- a/disk/part.c
> +++ b/disk/part.c
> @@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int
> part,
>  /* The common case is no UUID support */
>  info->uuid[0] = 0;
>  #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> +info->guid[0] = 0;
> +#endif
>
>  switch (dev_desc->part_type) {
>  #ifdef CONFIG_MAC_PARTITION
> @@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const
> char *dev_part_str,
>  #ifdef CONFIG_PARTITION_UUIDS
>  info->uuid[0] = 0;
>  #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> +info->guid[0] = 0;
> +#endif
>
>  return 0;
>  }
> @@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const
> char *dev_part_str,
>  #ifdef CONFIG_PARTITION_UUIDS
>  info->uuid[0] = 0;
>  #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUIDS
> +info->guid[0] = 0;
> +#endif
>
>  ret = 0;
>  goto cleanup;
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 15627f2..25bf8f9 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc,
> int part,
>  uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid,
>  UUID_STR_FORMAT_GUID);
>  #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> +uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid,
> +UUID_STR_FORMAT_GUID);
> +#endif
>
>  debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__,
>info->start, info->size, info->name);
> @@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
>  char *str_uuid;
>  unsigned char *bin_uuid;
>  #endif
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> +char *str_guid;
> +unsigned char *bin_guid;
> +#endif
>
>  for (i = 0; i < parts; i++) {
>  /* partition starting lba */
> @@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
>  else
>  gpt_e[i].ending_lba = cpu_to_le64(offset - 1);
>
> +#ifdef CONFIG_PARTITION_TYPE_GUID
> +str_guid = partitions[i].guid;
> +bin_guid = gpt_e[i].partition_type_guid.b;
> +if (strlen(str_guid)) {
> +if (uuid_str_to_bin(str_guid, bin_guid,
> +UUID_STR_FORMAT_GUID)) {
> +printf("Partition no. %d: invalid type guid: %s\n",
> +   i, str_guid);
> +return -1;
> +}
> +} else {
> +/* default partition type GUID */
> +memcpy(bin_guid,
> +   _BASIC_DATA_GUID, 16);
> +}
> +#else
>  /* partition type GUID */
>  memcpy(gpt_e[i].partition_type_guid.b,
>  _BASIC_DATA_GUID, 16);
> +#endif
>
>  #ifdef CONFIG_PARTITION_UUIDS
>  str_uuid = partitions[i].uuid;
> diff --git a/include/part.h b/include/part.h
> index 8ea9b30..d57d284 

[U-Boot] [PATCH 2/3] gpt: add optional parameter guid in gpt command

2015-10-13 Thread Patrick Delaunay
code under flag CONFIG_PARTITION_TYPE_GUID
add parameter guid to select partition type guid

example of use with gpt command :

  partitions = uuid_disk=${uuid_gpt_disk};name=boot,start=0x4400,
  size=0x6bc00,uuid=${uuid_gpt_boot};name=root,start=0x7,
  size=0x7538ba00,uuid=${uuid_gpt_root},
  guid=0fc63daf-8483-4772-8e79-3d69d8477de4;

  gpt write mmc 0 $partitions

Signed-off-by: Patrick Delaunay 
---

 common/cmd_gpt.c | 17 +
 disk/part.c  |  9 +
 disk/part_efi.c  | 25 +
 include/part.h   |  3 +++
 4 files changed, 54 insertions(+)

diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c
index c56fe15..1e8f927 100644
--- a/common/cmd_gpt.c
+++ b/common/cmd_gpt.c
@@ -218,6 +218,23 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
 strcpy((char *)parts[i].uuid, p);
 free(val);
 }
+#ifdef CONFIG_PARTITION_TYPE_GUID
+/* guid */
+val = extract_val(tok, "guid");
+if (val) {
+/* 'guid' is optional */
+if (extract_env(val, ))
+p = val;
+if (strlen(p) >= sizeof(parts[i].guid)) {
+printf("Wrong guid format for partition %d\n",
+   i);
+errno = -4;
+goto err;
+}
+strcpy((char *)parts[i].guid, p);
+free(val);
+}
+#endif
 /* name */
 val = extract_val(tok, "name");
 if (!val) { /* name is mandatory */
diff --git a/disk/part.c b/disk/part.c
index 43485c9..316454d 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -391,6 +391,9 @@ int get_partition_info(block_dev_desc_t *dev_desc, int
part,
 /* The common case is no UUID support */
 info->uuid[0] = 0;
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+info->guid[0] = 0;
+#endif

 switch (dev_desc->part_type) {
 #ifdef CONFIG_MAC_PARTITION
@@ -526,6 +529,9 @@ int get_device_and_partition(const char *ifname, const
char *dev_part_str,
 #ifdef CONFIG_PARTITION_UUIDS
 info->uuid[0] = 0;
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+info->guid[0] = 0;
+#endif

 return 0;
 }
@@ -610,6 +616,9 @@ int get_device_and_partition(const char *ifname, const
char *dev_part_str,
 #ifdef CONFIG_PARTITION_UUIDS
 info->uuid[0] = 0;
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUIDS
+info->guid[0] = 0;
+#endif

 ret = 0;
 goto cleanup;
diff --git a/disk/part_efi.c b/disk/part_efi.c
index 15627f2..25bf8f9 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -283,6 +283,10 @@ int get_partition_info_efi(block_dev_desc_t *
dev_desc, int part,
 uuid_bin_to_str(gpt_pte[part - 1].unique_partition_guid.b, info->uuid,
 UUID_STR_FORMAT_GUID);
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+uuid_bin_to_str(gpt_pte[part - 1].partition_type_guid.b, info->guid,
+UUID_STR_FORMAT_GUID);
+#endif

 debug("%s: start 0x" LBAF ", size 0x" LBAF ", name %s\n", __func__,
   info->start, info->size, info->name);
@@ -419,6 +423,10 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
 char *str_uuid;
 unsigned char *bin_uuid;
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+char *str_guid;
+unsigned char *bin_guid;
+#endif

 for (i = 0; i < parts; i++) {
 /* partition starting lba */
@@ -445,9 +453,26 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
 else
 gpt_e[i].ending_lba = cpu_to_le64(offset - 1);

+#ifdef CONFIG_PARTITION_TYPE_GUID
+str_guid = partitions[i].guid;
+bin_guid = gpt_e[i].partition_type_guid.b;
+if (strlen(str_guid)) {
+if (uuid_str_to_bin(str_guid, bin_guid,
+UUID_STR_FORMAT_GUID)) {
+printf("Partition no. %d: invalid type guid: %s\n",
+   i, str_guid);
+return -1;
+}
+} else {
+/* default partition type GUID */
+memcpy(bin_guid,
+   _BASIC_DATA_GUID, 16);
+}
+#else
 /* partition type GUID */
 memcpy(gpt_e[i].partition_type_guid.b,
 _BASIC_DATA_GUID, 16);
+#endif

 #ifdef CONFIG_PARTITION_UUIDS
 str_uuid = partitions[i].uuid;
diff --git a/include/part.h b/include/part.h
index 8ea9b30..d57d284 100644
--- a/include/part.h
+++ b/include/part.h
@@ -93,6 +93,9 @@ typedef struct disk_partition {
 #ifdef CONFIG_PARTITION_UUIDS
 charuuid[37];/* filesystem UUID as string, if exists*/
 #endif
+#ifdef CONFIG_PARTITION_TYPE_GUID
+charguid[37];/* type GUID as string, if exists*/
+#endif
 } disk_partition_t;

 /* Misc _get_dev functions */
-- 
1.9.1
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot