[PATCH v2 0/4] Qualcomm: expand capsule update support

Casey Connolly casey.connolly at linaro.org
Fri May 2 16:32:44 CEST 2025



On 5/2/25 14:37, Sumit Garg wrote:
> On Fri, May 02, 2025 at 02:16:53PM +0200, Casey Connolly wrote:
>> Hi Sumit,
>>
>> On 5/2/25 12:50, Sumit Garg wrote:
>>> Hi Casey
>>>
>>> On Fri, Apr 11, 2025 at 05:03:33PM +0200, Caleb Connolly wrote:
>>>> The initial capsule update support only worked on the RB3 Gen 2 and made
>>>> a lot of assumptions specific to that board.
>>>>
>>>> Implement the logic necessary to update U-Boot no matter where it was
>>>> flashed to, independent of any particular board.
>>>>
>>>> First, we keep track of how U-Boot was loaded, specifically if we had a
>>>> valid external FDT (even if we didn't use it) this indicates that we
>>>> were booted via the Android bootloader, in this case the target for
>>>> capsule updates is the boot partition. Otherwise, we target the uefi
>>>> partition (if it exists) or the xbl partition. We handle A/B support for
>>>> all 3 (currently we always flash to the currently active partition with
>>>> a minor exception for the uefi partition).
>>>
>>> Does this means say if we are booting from "A" partition then the update
>>> gets applied to "A" partition only? IOW, we don't support dual bank
>>> updates as of now?
>>
>> Yes exactly, to have A/B working we would need the following:
>>
>> * Implement all the fiddly GPT stuff (the vendor bits but also swapping the
>> partition type GUIDs between A/B partitions)
>> * Change MMC/UFS boot block/LUN
>> * Support flashing all other bootloader partitions via capsule update
>>
>> And really some tooling to produce said capsule update files containing all
>> the bootloader related images.
> 
> Thanks for the info, those can sure be next steps.
> 
>>
>>>
>>>>
>>>> We introduce two new fw_name strings to differentiate the GUIDs based on
>>>> the target partition, this means one board can support multiple boot
>>>> methods with capsule update support for all of them (typically this
>>>> would be chainloading OR flashing U-Boot to XBL).
>>>>
>>>> Lastly, the call to scsi_scan() in dfu_scsi.c is removed. Since
>>>> scsi_scan() unbinds all scsi devices it breaks device handles maintained
>>>> in the EFI layer for the duration of the capsule update process and
>>>> causes the EFI filesystem access to delete the capsule file after the
>>>> update to fail.
>>>>
>>>> Boards should instead be responsible for calling scsi_scan() before
>>>> initiating DFU.
>>>
>>> Thanks for working on EFI firmware capsule updates feature. I think
>>> currently we are missing any documentation from this patch-set. IOW, how
>>> one can test updating U-Boot via EFI firmware capsules? I suppose we are
>>> using here dynamic GUID generation while creating update capsules,
>>> right?
>>
>> Yes, we're using dynamic GUIDs. I have written a small tool and brief docs
>> here for creating an LVFS cabinet which can be used with FWUPD
>>
>> https://github.com/kcxt/mkcab
> 
> Thanks for working on that tooling. However, it would be better for
> U-Boot documentation to instead use standard tooling like:
> 
> $ fwupdtool build-cabinet ARCHIVE FIRMWARE METAINFO
> 
> where we can provide an example meta info xml file in the docs for Qcom
> platforms.

oh lol, you mean this exact thing already exists! grrr>
>>
>> I'll write something in doc/board/qualcomm to explain things too (excluding
>> the LVFS bits).
> 
> Thanks.
> 
> -Sumit
> 
>>
>> Kind regards,
>> Casey (she/they)>
>>> -Sumit
>>>
>>>>
>>>> ---
>>>> Changes in v2:
>>>> - Restrict the partition hunt to either UFS storage or the first MMC
>>>>     device so that we never accidentally write to some external storage
>>>>     (like an sdcard) during a capsule update.
>>>> - Fix typo
>>>> - Link to v1: https://lore.kernel.org/r/20250326-b4-qcom-capsule-update-improvements-v1-0-afe2e3696675@linaro.org
>>>>
>>>> ---
>>>> Caleb Connolly (4):
>>>>         mach-snapdragon: track boot source
>>>>         mach-snapdragon: CapsuleUpdate: support all boot methods
>>>>         dfu: scsi: don't call scsi_scan()
>>>>         qcom_defconfig: enable capsule update support
>>>>
>>>>    arch/arm/mach-snapdragon/board.c          |  26 +++
>>>>    arch/arm/mach-snapdragon/capsule_update.c | 274 ++++++++++++++++++++++++------
>>>>    arch/arm/mach-snapdragon/qcom-priv.h      |  14 ++
>>>>    configs/qcm6490_defconfig                 |   6 -
>>>>    configs/qcom_defconfig                    |   3 +
>>>>    drivers/dfu/dfu_scsi.c                    |   5 -
>>>>    6 files changed, 266 insertions(+), 62 deletions(-)
>>>> ---
>>>> base-commit: 885d68280c29b8011731b6a7cdac32b8d9a4e6fd
>>>> change-id: 20250326-b4-qcom-capsule-update-improvements-16ff7bc2d1d2
>>>>
>>>> Caleb Connolly <caleb.connolly at linaro.org>
>>>>
>>
>> -- 
>> Casey (she/they)
>>

-- 
Casey (she/they)



More information about the U-Boot mailing list