gpt: support random UUIDs without setting environment variables

Currently, an environment variable must be used to store the randomly
generated UUID for each partition. This is not necessary, so make storing
the UUID optional. Now passing uuid_disk and uuid are optional when random
UUIDs are enabled.

Signed-off-by: Rob Herring <robh@kernel.org>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
This commit is contained in:
Rob Herring 2015-01-26 09:44:18 -06:00 committed by Tom Rini
parent a150e6c9df
commit 0c7e8d1317
2 changed files with 35 additions and 21 deletions

View file

@ -154,17 +154,24 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
/* extract disk guid */
s = str;
tok = strsep(&s, ";");
val = extract_val(tok, "uuid_disk");
val = extract_val(str, "uuid_disk");
if (!val) {
#ifdef CONFIG_RANDOM_UUID
*str_disk_guid = malloc(UUID_STR_LEN + 1);
gen_rand_uuid_str(*str_disk_guid, UUID_STR_FORMAT_STD);
#else
free(str);
return -2;
#endif
} else {
val = strsep(&val, ";");
if (extract_env(val, &p))
p = val;
*str_disk_guid = strdup(p);
free(val);
/* Move s to first partition */
strsep(&s, ";");
}
if (extract_env(val, &p))
p = val;
*str_disk_guid = strdup(p);
free(val);
if (strlen(s) == 0)
return -3;
@ -192,20 +199,25 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
/* uuid */
val = extract_val(tok, "uuid");
if (!val) { /* 'uuid' is mandatory */
if (!val) {
/* 'uuid' is optional if random uuid's are enabled */
#ifdef CONFIG_RANDOM_UUID
gen_rand_uuid_str(parts[i].uuid, UUID_STR_FORMAT_STD);
#else
errno = -4;
goto err;
#endif
} else {
if (extract_env(val, &p))
p = val;
if (strlen(p) >= sizeof(parts[i].uuid)) {
printf("Wrong uuid format for partition %d\n", i);
errno = -4;
goto err;
}
strcpy((char *)parts[i].uuid, p);
free(val);
}
if (extract_env(val, &p))
p = val;
if (strlen(p) >= sizeof(parts[i].uuid)) {
printf("Wrong uuid format for partition %d\n", i);
errno = -4;
goto err;
}
strcpy((char *)parts[i].uuid, p);
free(val);
/* name */
val = extract_val(tok, "name");
if (!val) { /* name is mandatory */

View file

@ -157,11 +157,13 @@ To restore GUID partition table one needs to:
"partitions=uuid_disk=${uuid_gpt_disk};name=${uboot_name},
size=${uboot_size},uuid=${uboot_uuid};"
Fields 'name', 'size' and 'uuid' are mandatory for every partition.
The fields 'name' and 'size' are mandatory for every partition.
The field 'start' is optional.
option: CONFIG_RANDOM_UUID
If any partition "UUID" no exists then it is randomly generated.
The fields 'uuid' and 'uuid_disk' are optional if CONFIG_RANDOM_UUID is
enabled. A random uuid will be used if omitted or they point to an empty/
non-existent environment variable. The environment variable will be set to
the generated UUID.
2. Define 'CONFIG_EFI_PARTITION' and 'CONFIG_CMD_GPT'