[PATCH v3 0/8] qcom: implement capsule updates
Caleb Connolly
caleb.connolly at linaro.org
Wed Jun 5 14:42:09 CEST 2024
Hi Sumit,
On 05/06/2024 07:31, Sumit Garg wrote:
> Hi Caleb,
>
> On Mon, 3 Jun 2024 at 18:19, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>>
>> Hook up support for capsule updates loaded from disk on Qualcomm
>> platforms.
>>
>> Most Qualcomm devices have an A/B partition layout, with most partitions
>> duplicated. The metadata on which slot is active is stored in the GPT
>> headers in the vendor-specific attribute bits of each partition.
>
> It's good to see capsule updates support coming up for Qualcomm
> platforms. AFAICS, with this series we only update U-Boot on the
> current active partition. IOW, real A/B support is still not
> supported. Do you think it is possible for U-Boot to update metadata
> in GPT headers and for proprietary bootloaders to pick up the U-Boot
> from the updated partition?
Yes this would be possible, I have some WIP patches to let us modify the
slot attribute bits and write back the header.
The reason I haven't implement A/B is because we don't support it from
the OS level on any of the boards I work on. We often patch ABL to
disable or skip the slot logic and flash a partition table without
slots. It also unlocks a bunch of additional complexity...
This isn't super high on my todo list but I'd be happy to help if
someone wants to enable this functionality. We'd need:
1. Upstream support for modifying the GPT (see my PoC at [1] and [2]).
2. Logic to configure flashing the active or inactive slot
This logic would have to run after the capsule update, I don't know if
there is currently a way to add a callback after the update.
If we enable updating other images (like XBL, hyp, tz, etc), we would
need to either agree that a capsule update would have to update ALL
partitions, or implement logic to copy over partitions that weren't
flashed to the other slot.
[1]:
https://git.codelinaro.org/linaro/qcomlt/u-boot/-/commit/34d3de6f79550527746303e0bf6337fa37e31fe5
[2]:
https://git.codelinaro.org/linaro/qcomlt/u-boot/-/commit/656d9e816bef85e586460a999cc7874255be9f1d
>
> -Sumit
>
>>
>> Add support for reading this attributes via the disk_partition struct
>> and using them to determine which boot partition U-Boot is flashed to
>> and generate the appropriate DFU string.
>>
>> This logic is gated behind a check to ensure that U-Boot is actually
>> being chainloaded and not run via some other mechanism.
>>
>> SCSI support for most Qualcomm platforms is not yet enabled upstream,
>> but will follow in future patches.
>>
>> This series enables capsule updates on the RB2, however [1] is required
>> for it to work properly (as otherwise MMC won't be available).
>>
>> [1]: https://lore.kernel.org/u-boot/20240527-b4-clk-stub-v2-0-29013855e343@linaro.org/
>>
>> To: Tom Rini <trini at konsulko.com>
>> To: Simon Glass <sjg at chromium.org>
>> To: Lukasz Majewski <lukma at denx.de>
>> To: Mattijs Korpershoek <mkorpershoek at baylibre.com>
>> To: Caleb Connolly <caleb.connolly at linaro.org>
>> To: Neil Armstrong <neil.armstrong at linaro.org>
>> To: Sumit Garg <sumit.garg at linaro.org>
>> Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>
>> Cc: u-boot at lists.denx.de
>> Cc: u-boot-qcom at groups.io
>>
>> Changes in v3:
>> - Address comments in scsi dfu support
>> - enable CONFIG_DFU_SCSI for qcom
>> - Link to v2: https://lore.kernel.org/r/20240527-b4-qcom-capsule-updates-v2-0-47583d7ad428@linaro.org
>>
>> Changes in v2:
>> - Add qcom capsule update support patches
>> - Link to v1: https://lore.kernel.org/r/20240409-b4-dfu-scsi-v1-0-3e1441a60376@linaro.org
>>
>> ---
>> Caleb Connolly (8):
>> dfu: add scsi backend
>> disk: expose partition type flags
>> mmc: msm_sdhci: work around a bug when writing
>> mach-snapdragon: implement capsule update support
>> qcom_defconfig: savedefconfig
>> mach-snapdragon: use SYSRESET_PSCI
>> mach-snapdragon: bump up heap size
>> qcom_defconfig: enable capsule update support
>>
>> arch/arm/Kconfig | 2 +
>> arch/arm/mach-snapdragon/Kconfig | 3 +
>> arch/arm/mach-snapdragon/Makefile | 1 +
>> arch/arm/mach-snapdragon/board.c | 8 +-
>> arch/arm/mach-snapdragon/capsule_update.c | 147 ++++++++++
>> arch/arm/mach-snapdragon/qcom-priv.h | 6 +
>> configs/qcom_defconfig | 19 +-
>> disk/part_efi.c | 1 +
>> doc/usage/dfu.rst | 32 +++
>> drivers/dfu/Kconfig | 7 +
>> drivers/dfu/Makefile | 1 +
>> drivers/dfu/dfu.c | 5 +-
>> drivers/dfu/dfu_scsi.c | 435 ++++++++++++++++++++++++++++++
>> drivers/mmc/msm_sdhci.c | 7 +
>> include/configs/qcom.h | 5 +
>> include/dfu.h | 26 ++
>> include/part.h | 1 +
>> 17 files changed, 695 insertions(+), 11 deletions(-)
>> ---
>> change-id: 20240523-b4-qcom-capsule-updates-ea2e4f8f0ff0
>> base-commit: 5d8881a0801241d68701e8644d495f1d535506f0
>>
>> // Caleb (they/them)
>>
--
// Caleb (they/them)
More information about the U-Boot
mailing list