[PATCH v3 00/14] qemu: arm64: Add support for uefi capsule update on qemu arm platform
Sughosh Ganu
sughosh.ganu at linaro.org
Tue Dec 29 05:42:54 CET 2020
hello Heinrich,
On Mon, 28 Dec 2020 at 20:09, Heinrich Schuchardt <xypron.glpk at gmx.de>
wrote:
> On 12/23/20 8:03 AM, Sughosh Ganu wrote:
> > The capsule update feature is supported on a platform configuration
> > booting in a non-secure mode, i.e with -machine virt,secure=off option
> > set. This results in the platform booting u-boot directly without
> > the presence of trusted firmware(tf-a). Steps that need to be followed
> > for using this feature have been provided as part of the documentation.
> >
> > Support has also been added for enabling the capsule authentication
> > feature. Capsule authentication, as defined by the uefi
> > specification is very much on similar lines to the logic used for
> > variable authentication. As a result, most of the signature
> > verification code already in use for variable authentication has been
> > used for capsule authentication.
> >
> > Storage of the public key certificate, needed for the signature
> > verification process is in form of the efi signature list(esl)
> > structure. This public key is stored on an overlay which is then
> > merged with the platform's base fdt at runtime. The public key esl
> > file can be embedded into the overlay dtb using the mkeficapsule
> > utility that has been added as part of the capsule update support
> > series by Takahiro Akashi. Steps needed for enabling capsule
> > authentication have been provided as part of the documentation.
> >
> > This patch series needs to be applied on top of the capsule update
> > support patch series from Takahiro Akashi on the next branch.
> >
> > Changes since V2:
> > * Enable building of board_late_init for both of the Qemu arm and
> > arm64 variants
> > * Move the selection the CONFIG_BOARD_LATE_INIT to mach-qemu Kconfig
> > file
> > * Move the functions to populate the mtdparts under
> > board/emulation/common for allowing subsequent re-use by other Qemu
> > arch based platforms
> > * Move the functions to populate the dfu_alt_info variable under
> > board/emulation/common for allowing subsequent re-use by other Qemu
> > arch based platforms
> > * Move the function for fetching the public key certficate from the
> > platform's dtb under board/emulation/common directory.
> > * Move the function for checking the capsule_authentication_enabled
> > env variable under board/emulation/common directory.
> > * Moved the capsule update related documentation for the Qemu
> > platform to a new file under doc/board/emulation/ directory.
> > * Incorporated all typo review comments from Heinrich
> > * Put in a skeletal overlay dts file for reference, as was suggested
> > by Heinrich
>
> Hello Sughosh,
>
> I have applied your changes to the next branch in tag
>
>
> https://gitlab.denx.de/u-boot/custodians/u-boot-efi/-/tags/capsule_update_2020-12-28
>
> Unfortunately it does not build on the sandbox:
>
> /usr/bin/ld: cmd/built-in.o: in function `mtdparts_init':
> c/md/mtdparts.c:1739: undefined reference to `board_mtdparts_default'
> /usr/bin/ld: drivers/built-in.o: in function `dfu_init_env_entities':
> /drivers/dfu/dfu.c:143: undefined reference to `set_dfu_alt_info'
> /usr/bin/ld: drivers/built-in.o: in function `mtd_search_alternate_name':
> /drivers/mtd/mtd_uboot.c:30: undefined reference to
> `board_mtdparts_default'
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:1757: u-boot] Error 1
>
> I assume this is due to selecting SYS_MTDPARTS_RUNTIME in
> lib/efi_loader/Kconfig.
>
Will fix it. Thanks.
-sughosh
>
> Best regards
>
> Heinrich
>
> >
> >
> > Changes since V1:
> > * Added support for embedding the public key cert in an overlay using
> > the -O option
> > * The earlier patch was adding a call to pci_init in board_init. Moved
> > the virtio_init call to board_late_init
> > * Change MTDPARTS_NOR[01] as config options instead of defining them in
> > the qemu-arm.h config header.
> > * Enable CONFIG_SYS_MTDPARTS_RUNTIME with
> CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT
> > * Build set_dfu_alt_info and board_get_alt_info functions only if
> > CONFIG_SET_DFU_ALT_INFO is defined
> > * Enable CONFIG_SET_DFU_ALT_INFO with
> > CONFIG_EFI_CAPSULE_FIRMWARE_MANAGEMENT
> > * Detect the presence of the FMP Payload header at runtime instead of
> > using a Kconfig option, as was suggested by Heinrich
> > * Change the documentation to reflect the usage of overlays for
> > embedding the public key certs at runtime
> > * Fix the build for 'make htmldocs'
> >
> >
> > Sughosh Ganu (14):
> > mkeficapsule: Add support for embedding public key in a dtb
> > qemu: arm: Initialise virtio devices in board_late_init
> > crypto: Fix the logic to calculate hash with authattributes set
> > qemu: common: Add support for dynamic mtdparts for the platform
> > qemu: common: Set dfu_alt_info variable for the platform
> > fsp: Move and rename fsp_types.h file
> > efi_loader: Add logic to parse EDKII specific fmp payload header
> > dfu_mtd: Add provision to unlock mtd device
> > efi_loader: Make the pkcs7 header parsing function an extern
> > efi_loader: Re-factor code to build the signature store from efi
> > signature list
> > efi: capsule: Add support for uefi capsule authentication
> > efi_loader: Enable uefi capsule authentication
> > efidebug: capsule: Add a command to update capsule on disk
> > qemu: arm64: Add documentation for capsule update
> >
> > arch/arm/mach-qemu/Kconfig | 2 +
> > arch/x86/include/asm/fsp/fsp_support.h | 3 +-
> > board/emulation/common/Kconfig | 15 ++
> > board/emulation/common/Makefile | 5 +
> > board/emulation/common/qemu_capsule.c | 48 ++++
> > board/emulation/common/qemu_dfu.c | 68 +++++
> > board/emulation/common/qemu_mtdparts.c | 82 ++++++
> > board/emulation/qemu-arm/Kconfig | 4 +
> > board/emulation/qemu-arm/qemu-arm.c | 5 +
> > cmd/efidebug.c | 14 ++
> > doc/board/emulation/qemu_capsule_update.rst | 210 ++++++++++++++++
> > drivers/dfu/dfu_mtd.c | 20 +-
> > include/efi_api.h | 18 ++
> > include/efi_loader.h | 12 +
> > .../fsp/fsp_types.h => include/signatures.h | 6 +-
> > lib/crypto/pkcs7_verify.c | 37 ++-
> > lib/efi_loader/Kconfig | 19 ++
> > lib/efi_loader/efi_capsule.c | 122 +++++++++
> > lib/efi_loader/efi_firmware.c | 77 +++++-
> > lib/efi_loader/efi_signature.c | 192 +++++++++++----
> > lib/efi_loader/efi_variable.c | 93 +------
> > tools/Makefile | 1 +
> > tools/mkeficapsule.c | 233 +++++++++++++++++-
> > 23 files changed, 1122 insertions(+), 164 deletions(-)
> > create mode 100644 board/emulation/common/Kconfig
> > create mode 100644 board/emulation/common/Makefile
> > create mode 100644 board/emulation/common/qemu_capsule.c
> > create mode 100644 board/emulation/common/qemu_dfu.c
> > create mode 100644 board/emulation/common/qemu_mtdparts.c
> > create mode 100644 doc/board/emulation/qemu_capsule_update.rst
> > rename arch/x86/include/asm/fsp/fsp_types.h => include/signatures.h
> (95%)
> >
>
>
More information about the U-Boot
mailing list