diff mbox

[U-Boot] fastboot: check for alias when looking up partition by name

Message ID 1426093351-8998-1-git-send-email-michael.scott@linaro.org
State Accepted
Delegated to: Łukasz Majewski
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

Steve Rae March 12, 2015, 4:23 p.m. UTC | #1
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).
> +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,
Acked-by: Steve Rae <srae@broadcom.com>
Michael Scott March 12, 2015, 5:17 p.m. UTC | #2
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!
Steve Rae March 12, 2015, 6:14 p.m. UTC | #3
On 15-03-12 10:17 AM, Michael Scott wrote:
>
> 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.
Sorry -- I corrupted this (finger trouble!) - please ignore
>
>>> +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.
OK -- then this patch makes much more sense!
- so when the user performs "mmc part", (I'm assuming it will list the 
"3 letter names"), then they perform "fastboot flash LNX boot.bin" 
(which makes sense to me....)
- or they can setup these aliases and perform "fastboot flash boot boot.bin"
(I would probably stick with the former myself...)
Thanks, Steve
>
> To present a "normal" fastboot experience to users, we use this patch.
>
>> Acked-by: Steve Rae <srae@broadcom.com>
>
> Thank you for the Ack!
Łukasz Majewski March 20, 2015, 7:50 a.m. UTC | #4
Hi Steve,

> 
> 
> On 15-03-12 10:17 AM, Michael Scott wrote:
> >
> > 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.
> Sorry -- I corrupted this (finger trouble!) - please ignore
> >
> >>> +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.
> OK -- then this patch makes much more sense!
> - so when the user performs "mmc part", (I'm assuming it will list
> the "3 letter names"), then they perform "fastboot flash LNX
> boot.bin" (which makes sense to me....)
> - or they can setup these aliases and perform "fastboot flash boot
> boot.bin" (I would probably stick with the former myself...)
> Thanks, Steve
> >
> > To present a "normal" fastboot experience to users, we use this
> > patch.
> >
> >> Acked-by: Steve Rae <srae@broadcom.com>
> >
> > Thank you for the Ack!

Are there more comments for this patch?
Steve Rae March 20, 2015, 4:30 p.m. UTC | #5
Hi Lukasz,

On 15-03-20 12:50 AM, Lukasz Majewski wrote:
> Hi Steve,
>
>>
>>
>> On 15-03-12 10:17 AM, Michael Scott wrote:
>>>
>>> On 03/12/2015 09:23 AM, Steve Rae wrote:

[... snip ...]

>>>> 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.
>> OK -- then this patch makes much more sense!
>> - so when the user performs "mmc part", (I'm assuming it will list
>> the "3 letter names"), then they perform "fastboot flash LNX
>> boot.bin" (which makes sense to me....)
>> - or they can setup these aliases and perform "fastboot flash boot
>> boot.bin" (I would probably stick with the former myself...)
>> Thanks, Steve
>>>
>>> To present a "normal" fastboot experience to users, we use this
>>> patch.
>>>
>>>> Acked-by: Steve Rae <srae@broadcom.com>
>>>
>>> Thank you for the Ack!
>
> Are there more comments for this patch?
>

No - the feature is OK
(personally - I would use the names that match what "mmc part" displays; 
so I don't think that I would create any aliases....)

Acked-by: Steve Rae <srae@broadcom.com>
Łukasz Majewski March 23, 2015, 9:13 a.m. UTC | #6
Hi Steve,

> Hi Lukasz,
> 
> On 15-03-20 12:50 AM, Lukasz Majewski wrote:
> > Hi Steve,
> >
> >>
> >>
> >> On 15-03-12 10:17 AM, Michael Scott wrote:
> >>>
> >>> On 03/12/2015 09:23 AM, Steve Rae wrote:
> 
> [... snip ...]
> 
> >>>> 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.
> >> OK -- then this patch makes much more sense!
> >> - so when the user performs "mmc part", (I'm assuming it will list
> >> the "3 letter names"), then they perform "fastboot flash LNX
> >> boot.bin" (which makes sense to me....)
> >> - or they can setup these aliases and perform "fastboot flash boot
> >> boot.bin" (I would probably stick with the former myself...)
> >> Thanks, Steve
> >>>
> >>> To present a "normal" fastboot experience to users, we use this
> >>> patch.
> >>>
> >>>> Acked-by: Steve Rae <srae@broadcom.com>
> >>>
> >>> Thank you for the Ack!
> >
> > Are there more comments for this patch?
> >
> 
> No - the feature is OK
> (personally - I would use the names that match what "mmc part"
> displays; so I don't think that I would create any aliases....)
> 
> Acked-by: Steve Rae <srae@broadcom.com>

Applied to u-boot-dfu tree. Thanks!
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