[PATCH v3] Fix flashing of eMMC user area with Fastboot

Oleh Kravchenko oleg at kaa.org.ua
Sat May 15 00:43:59 CEST 2021


Hm,

So next mapping works:
0.0:0 mmc0 user area
0.1:0 mmc0 boot 1        
0.2:0 mmc0 boot 2

linux> $ fastboot erase 0.1:0
linux> Erasing '0.1:0'...
linux> OKAY [  2.969s]
linux> Finished. Total time: 2.990s
linux> $ fastboot erase 0.2:0
linux> Erasing '0.2:0'...
linux> OKAY [  2.962s]
linux> Finished. Total time: 2.985s
linux> $ fastboot erase 0.0:0
linux> Erasing '0.0:0'...
linux> OKAY [ 48.224s]
linux> Finished. Total time: 48.239s


linux> $ fastboot flash -raw2sparse 0.0:0 core-image-minimal.wic 
linux> target reported max download size of 268435456 bytes
linux> Invalid sparse file format at header magic
linux> Sending sparse '0.0:0' 1/1 (221985 KB)...
linux> OKAY [  7.301s]
linux> Writing '0.0:0' 1/1...
linux> OKAY [ 31.904s]
linux> Finished. Total time: 39.298s
linux> $ fastboot flash -raw2sparse 0.1:0 u-boot.bin 
linux> target reported max download size of 268435456 bytes
linux> Sending '0.1:0' (440 KB)...
linux> OKAY [  0.020s]
linux> Writing '0.1:0'...
linux> OKAY [  0.113s]
linux> Finished. Total time: 0.166s
linux> $ fastboot flash -raw2sparse 0.2:0 u-boot.bin 
linux> target reported max download size of 268435456 bytes
linux> Sending '0.2:0' (440 KB)...
linux> OKAY [  0.020s]
linux> Writing '0.2:0'...
linux> OKAY [  0.113s]
linux> Finished. Total time: 0.168s

15.05.21 01:34, Oleh Kravchenko пише:
> This one works "0:0"
> 
> linux> fastboot flash 0:0 core-image-minimal.wic 
> linux> target reported max download size of 419430400 bytes
> linux> Sending '0:0' (402048 KB)...
> linux> OKAY [ 12.613s]
> linux> Writing '0:0'...
> linux> OKAY [ 30.204s]
> linux> Finished. Total time: 42.842s
> 
> u-boot> ** Bad partition specification mmc 0:0_a **
> u-boot> Couldn't find partition mmc 0:0_a
> u-boot> ** Unrecognized filesystem type **
> u-boot> Starting download of 411697152 bytes
> u-boot> downloading of 411697152 bytes finished
> u-boot> Flashing Raw Image
> u-boot> ........ wrote 411697152 bytes to '0:0'
> 
> 15.05.21 01:26, Sean Anderson пише:
>>
>>
>> On 5/14/21 6:10 PM, Oleh Kravchenko wrote:
>>> Hello Sean,
>>> Could you please clarify what you have mean?
>>>
>>> I think you pointing to this?
>>>> fastboot_raw_partition_<raw partition name>=<offset> <size> [mmcpart <num>]
>>>
>>> Because I don't have idea how aliases will help to flash.
>>
>> No, specifically I was requesting that you try "fastboot flash 0.1:0
>> foo.img" (or 1.1:0 depending on your mmc). And please send me the
>> failing output from the U-Boot side.
>>
>> (and please address the comments inline below as well)
>>
>> --Sean
>>
>>>
>>> 15.05.21 00:45, Sean Anderson пише:
>>>> On 5/14/21 5:26 PM, Oleh Kravchenko wrote:
>>>>> Hello guys,
>>>>> Could you please review and merge this patch?
>>>>
>>>> Did you have any luck with the second suggestion [1] I made for your
>>>> original patch?
>>>>
>>>> [1] https://lists.denx.de/pipermail/u-boot/2021-May/449778.html
>>>>
>>>> --Sean
>>>>
>>>>>
>>>>> PR successfully passed CI:
>>>>> https://github.com/u-boot/u-boot/pull/75
>>>>>
>>>>> 15.05.21 00:15, Oleh Kravchenko пише:
>>>>>> 'gpt' and 'mmc0' fastboot partitions have been treated as the same device,
>>>>>> but it is wrong.
>>>>>>
>>>>>> Signed-off-by: Oleh Kravchenko <oleg at kaa.org.ua>
>>>>>> Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
>>>>>> Cc: Marek Vasut <marex at denx.de>
>>>>>> ---
>>>>>> Changes for v2:
>>>>>>        - code cleanup;
>>>>>> Changes for v3:
>>>>>>        - QA passed at https://github.com/u-boot/u-boot/pull/75;
>>>>>>
>>>>>>      drivers/fastboot/fb_mmc.c | 25 ++++++++++++++++++++-----
>>>>>>      1 file changed, 20 insertions(+), 5 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/fastboot/fb_mmc.c b/drivers/fastboot/fb_mmc.c
>>>>>> index 2f3837e559..647d3f6c1b 100644
>>>>>> --- a/drivers/fastboot/fb_mmc.c
>>>>>> +++ b/drivers/fastboot/fb_mmc.c
>>>>>> @@ -532,12 +532,7 @@ void fastboot_mmc_flash_write(const char *cmd, void *download_buffer,
>>>>>>      #endif
>>>>>>
>>>>>>      #if CONFIG_IS_ENABLED(EFI_PARTITION)
>>>>>> -#ifndef CONFIG_FASTBOOT_MMC_USER_SUPPORT
>>>>>>          if (strcmp(cmd, CONFIG_FASTBOOT_GPT_NAME) == 0) {
>>>>>> -#else
>>>>>> -    if (strcmp(cmd, CONFIG_FASTBOOT_GPT_NAME) == 0 ||
>>>>>> -        strcmp(cmd, CONFIG_FASTBOOT_MMC_USER_NAME) == 0) {
>>>>>> -#endif
>>>>>>              dev_desc = fastboot_mmc_get_dev(response);
>>>>>>              if (!dev_desc)
>>>>>>                  return;
>>>>>> @@ -599,9 +594,29 @@ void fastboot_mmc_flash_write(const char *cmd, void *download_buffer,
>>>>>>          }
>>>>>>      #endif
>>>>>>
>>>>>> +#if CONFIG_IS_ENABLED(FASTBOOT_MMC_USER_SUPPORT)
>>>>
>>>> Is it possible to use
>>>>
>>>> if (CONFIG_IS_ENABLED(...)) { ... }
>>>>
>>>> here?
>>>>
>>>>>> +    if (strcmp(cmd, CONFIG_FASTBOOT_MMC_USER_NAME) == 0) {
>>>>>> +        dev_desc = fastboot_mmc_get_dev(response);
>>>>>> +        if (!dev_desc)
>>>>>> +            return;
>>>>>> +
>>>>>> +        memset(&info, 0, sizeof(info));
>>>>>> +        info.start    = 0;
>>>>>> +        info.size    = dev_desc->lba;
>>>>>> +        info.blksz    = dev_desc->blksz;
>>>>>> +        strlcpy((char *)&info.name, cmd, sizeof(info.name));
>>>>>> +
>>>>>> +        goto write_image;
>>>>
>>>> Why do we need to skip get_part_info?
>>>>
>>>>>> +    }
>>>>>> +#endif
>>>>>> +
>>>>>>          if (fastboot_mmc_get_part_info(cmd, &dev_desc, &info, response) < 0)
>>>>>>              return;
>>>>>>
>>>>>> +#if CONFIG_IS_ENABLED(FASTBOOT_MMC_USER_SUPPORT)
>>>>
>>>> Is conditionally defining this label necessary?
>>>>
>>>> --Sean
>>>>
>>>>>> +write_image:
>>>>>> +#endif
>>>>>> +
>>>>>>          if (is_sparse_image(download_buffer)) {
>>>>>>              struct fb_mmc_sparse sparse_priv;
>>>>>>              struct sparse_storage sparse;
>>>>>>
>>>>>
>>>
> 

-- 
Best regards,
Oleh Kravchenko



More information about the U-Boot mailing list