diff mbox

fastboot: check for alias when looking up partition by name

Message ID 1426093351-8998-1-git-send-email-michael.scott@linaro.org
State New
Headers show

Commit Message

Michael Scott March 11, 2015, 5:02 p.m. UTC
Implement an alias name check for devices where GPT limitations prevent
user-friendly partition names such as "boot", "system" and "cache". Or,
where the actual partition name doesn't match a standard partition name
used commonly with fastboot.

To set an alias, add an environment setting as follows:
fastboot_partition_alias_<alias partition name>=<actual partition name>

Example: fastboot_partition_alias_boot=LNX

Signed-off-by: Michael Scott <michael.scott@linaro.org>
Cc: Steve Rae <srae@broadcom.com>
Cc: Lukasz Majewski <l.majewski@samsung.com>
---
 common/fb_mmc.c             | 26 ++++++++++++++++++++++++--
 doc/README.android-fastboot |  9 +++++++++
 2 files changed, 33 insertions(+), 2 deletions(-)

Comments

Michael Scott March 12, 2015, 5:17 p.m. UTC | #1
On 03/12/2015 09:23 AM, Steve Rae wrote:
>
>
> On 15-03-11 10:02 AM, Michael Scott wrote:
>> Implement an alias name check for devices where GPT limitations prevent
>> user-friendly partition names such as "boot", "system" and "cache". Or,
>> where the actual partition name doesn't match a standard partition name
>> used commonly with fastboot.
>>
>> To set an alias, add an environment setting as follows:
>> fastboot_partition_alias_<alias partition name>=<actual partition name>
>>
>> Example: fastboot_partition_alias_boot=LNX
>>
>> Signed-off-by: Michael Scott <michael.scott@linaro.org>
>> Cc: Steve Rae <srae@broadcom.com>
>> Cc: Lukasz Majewski <l.majewski@samsung.com>
>> ---
>>   common/fb_mmc.c             | 26 ++++++++++++++++++++++++--
>>   doc/README.android-fastboot |  9 +++++++++
>>   2 files changed, 33 insertions(+), 2 deletions(-)
>>
>> diff --git a/common/fb_mmc.c b/common/fb_mmc.c
>> index 75899e4..0c48cf9 100644
>> --- a/common/fb_mmc.c
>> +++ b/common/fb_mmc.c
>> @@ -33,6 +33,28 @@ void fastboot_okay(const char *s)
>>       strncat(response_str, s, RESPONSE_LEN - 4 - 1);
>>   }
>>
>> +static int get_partition_info_efi_by_name_or_alias(block_dev_desc_t 
>> *dev_desc,
>> +        const char *name, disk_partition_t *info)
>> +{
>> +    int ret;
>> +
>> +    ret = get_partition_info_efi_by_name(dev_desc, name, info);
>> +    if (ret) {
>> +        /* strlen("fastboot_partition_alias_") + 32(part_name) + 1 */
>> +        char env_alias_name[25 + 32 + 1];
>> +        char *aliased_part_name;
>> +
>> +        /* check for alias */
>> +        strcpy(env_alias_name, "fastboot_partition_alias_");
>> +        strncat(env_alias_name, name, 32);
>> +        aliased_part_name = getenv(env_alias_name);
>> +        if (aliased_part_name != NULL)
>> +            ret = get_partition_info_efi_by_name(dev_desc,
>> +                    aliased_part_name, info);
>> +    }
>> +    return ret;
>> +}
>> +
>>   static void write_raw_image(block_dev_desc_t *dev_desc, 
>> disk_partition_t *info,
>>           const char *part_name, void *buffer,
>>           unsigned int download_bytes)
>> @@ -98,7 +120,7 @@ void fb_mmc_flash_write(const char *cmd, void 
>> *download_buffer,
>>           printf("........ success\n");
>>           fastboot_okay("");
>>           return;
>> -    } else if (get_partition_info_efi_by_name(dev_desc, cmd, &info)) {
>> +    } else if (get_partition_info_efi_by_name_or_alias(dev_desc, 
>> cmd, &info)) {
>>           error("cannot find partition: '%s'\n", cmd);
>>           fastboot_fail("cannot find partition");
>>           return;
>> @@ -136,7 +158,7 @@ void fb_mmc_erase(const char *cmd, char *response)
>>           return;
>>       }
>>
>> -    ret = get_partition_info_efi_by_name(dev_desc, cmd, &info);
>> +    ret = get_partition_info_efi_by_name_or_alias(dev_desc, cmd, 
>> &info);
>>       if (ret) {
>>           error("cannot find partition: '%s'", cmd);
>>           fastboot_fail("cannot find partition");
>> diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot
>> index 5526a43..04411e9 100644
>> --- a/doc/README.android-fastboot
>> +++ b/doc/README.android-fastboot
>> @@ -50,6 +50,15 @@ buffer should be as large as possible for a 
>> platform. The location of the
>>   buffer and size are set with CONFIG_USB_FASTBOOT_BUF_ADDR and
>>   CONFIG_USB_FASTBOOT_BUF_SIZE.
>>
>> +Fastboot partition aliases can also be defined for devices where GPT
>> +limitations prevent user-friendly partition names such as "boot", 
>> "system"
>> +and "cache".  Or, where the actual partition name doesn't match a 
>> standard
>> +partition name used commonly with fastboot.  Current implentation 
>> checks
>> +aliases when accessing partitions by name (flash_write andThere's 
>> already a driver
> for DWC2 in drivers/usb/gadget/s3c_udc_otg.c . This driver should really
> be properly renamed though ;-/  erase functions).
Hi Steve,

I'm a bit confused with the mention of drivers/usb/gadget/s3c_udc_otg.c and
how it relates back this patch.  I'm willing to make any corrections you 
would
like, but may need some clarification.

>> +To define a partition alias add an environment variable similar to:
>> +fastboot_partition_alias_<alias partition name>=<actual partition name>
>> +Example: fastboot_partition_alias_boot=LNX
>> +
>>   In Action
>>   =========
>>   Enter into fastboot by executing the fastboot command in u-boot and 
>> you
>>
>
> An interesting feature (which seems unnecessary to me...) However,
A bit of background:

We are using fastboot support on Nvidia Jetson-TK1 platform where
a GPT limitation sets partition names to 3 letters.

IE: LNX = boot, APP = system and UDA = userdata.

To present a "normal" fastboot experience to users, we use this patch.

> Acked-by: Steve Rae <srae@broadcom.com>

Thank you for the Ack!
diff mbox

Patch

diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 75899e4..0c48cf9 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -33,6 +33,28 @@  void fastboot_okay(const char *s)
 	strncat(response_str, s, RESPONSE_LEN - 4 - 1);
 }
 
+static int get_partition_info_efi_by_name_or_alias(block_dev_desc_t *dev_desc,
+		const char *name, disk_partition_t *info)
+{
+	int ret;
+
+	ret = get_partition_info_efi_by_name(dev_desc, name, info);
+	if (ret) {
+		/* strlen("fastboot_partition_alias_") + 32(part_name) + 1 */
+		char env_alias_name[25 + 32 + 1];
+		char *aliased_part_name;
+
+		/* check for alias */
+		strcpy(env_alias_name, "fastboot_partition_alias_");
+		strncat(env_alias_name, name, 32);
+		aliased_part_name = getenv(env_alias_name);
+		if (aliased_part_name != NULL)
+			ret = get_partition_info_efi_by_name(dev_desc,
+					aliased_part_name, info);
+	}
+	return ret;
+}
+
 static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
 		const char *part_name, void *buffer,
 		unsigned int download_bytes)
@@ -98,7 +120,7 @@  void fb_mmc_flash_write(const char *cmd, void *download_buffer,
 		printf("........ success\n");
 		fastboot_okay("");
 		return;
-	} else if (get_partition_info_efi_by_name(dev_desc, cmd, &info)) {
+	} else if (get_partition_info_efi_by_name_or_alias(dev_desc, cmd, &info)) {
 		error("cannot find partition: '%s'\n", cmd);
 		fastboot_fail("cannot find partition");
 		return;
@@ -136,7 +158,7 @@  void fb_mmc_erase(const char *cmd, char *response)
 		return;
 	}
 
-	ret = get_partition_info_efi_by_name(dev_desc, cmd, &info);
+	ret = get_partition_info_efi_by_name_or_alias(dev_desc, cmd, &info);
 	if (ret) {
 		error("cannot find partition: '%s'", cmd);
 		fastboot_fail("cannot find partition");
diff --git a/doc/README.android-fastboot b/doc/README.android-fastboot
index 5526a43..04411e9 100644
--- a/doc/README.android-fastboot
+++ b/doc/README.android-fastboot
@@ -50,6 +50,15 @@  buffer should be as large as possible for a platform. The location of the
 buffer and size are set with CONFIG_USB_FASTBOOT_BUF_ADDR and
 CONFIG_USB_FASTBOOT_BUF_SIZE.
 
+Fastboot partition aliases can also be defined for devices where GPT
+limitations prevent user-friendly partition names such as "boot", "system"
+and "cache".  Or, where the actual partition name doesn't match a standard
+partition name used commonly with fastboot.  Current implentation checks
+aliases when accessing partitions by name (flash_write and erase functions).
+To define a partition alias add an environment variable similar to:
+fastboot_partition_alias_<alias partition name>=<actual partition name>
+Example: fastboot_partition_alias_boot=LNX
+
 In Action
 =========
 Enter into fastboot by executing the fastboot command in u-boot and you