[PATCH 2/3 v3] efi_loader: Force a sinlge FMP instance per hardware store

Heinrich Schuchardt xypron.glpk at gmx.de
Fri Jul 2 09:25:57 CEST 2021


On 6/22/21 4:38 PM, Ilias Apalodimas wrote:
> Chapter 23 of the EFI spec (rev 2.9) says:
> "A specific updatable hardware firmware store must be represented by
> exactly one FMP instance".
> This is not the case for us, since both of our FMP protocols can be
> installed at the same time because they are controlled by a single
> 'dfu_alt_info' env variable.
> So make the config options depend on each other and allow the user to
> install one of them at any given time.  If we fix the meta-data provided
> by the 'dfu_alt_info' in the future,  to hint about the capsule type
> (fit or raw) we can revise this and enable both FMPs to be installed, as
> long as they target different firmware hardware stores
>
> Note that we are not using a Kconfig 'choice' on purpose, since we
> want to allow both of those to be installed and tested in sandbox
>
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> ---
> Changes since v2:
> -
> Changes since v1:
> - Don't use 'choice' on Kconfig sicne we need both of the FMPs installed for sandbox testing
>    instead just make them mutually exclusive with 'depends on'
>
>   configs/xilinx_zynqmp_virt_defconfig |  1 -
>   lib/efi_loader/Kconfig               | 45 ++++++++++++++--------------
>   2 files changed, 22 insertions(+), 24 deletions(-)
> diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig
> index 6adbe987cb7f..4d34e6c4cba5 100644
> --- a/configs/xilinx_zynqmp_virt_defconfig
> +++ b/configs/xilinx_zynqmp_virt_defconfig
> @@ -187,5 +187,4 @@ CONFIG_OF_LIBFDT_OVERLAY=y
>   CONFIG_EFI_SET_TIME=y
>   CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
>   CONFIG_EFI_CAPSULE_ON_DISK=y
> -CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
>   CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> index 6242caceb7f9..684adfb62379 100644
> --- a/lib/efi_loader/Kconfig
> +++ b/lib/efi_loader/Kconfig
> @@ -161,6 +161,28 @@ config EFI_CAPSULE_FIRMWARE_MANAGEMENT
>   	  Select this option if you want to enable capsule-based
>   	  firmware update using Firmware Management Protocol.
>
> +config EFI_CAPSULE_FIRMWARE_FIT
> +	bool "FMP driver for FIT images"
> +	depends on FIT
> +	depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT

Should here be:

	depends on SANDBOX || (!SANDBOX && !EFI_CAPSULE_FIRMWARE_RAW)

Best regards

Heinrich

> +	select UPDATE_FIT
> +	select DFU
> +	select EFI_CAPSULE_FIRMWARE
> +	help
> +	  Select this option if you want to enable firmware management protocol
> +	  driver for FIT image
> +
> +config EFI_CAPSULE_FIRMWARE_RAW
> +	bool "FMP driver for raw images"
> +	depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
> +	depends on SANDBOX || (!SANDBOX && !EFI_CAPSULE_FIRMWARE_FIT)
> +	select DFU_WRITE_ALT
> +	select DFU
> +	select EFI_CAPSULE_FIRMWARE
> +	help
> +	  Select this option if you want to enable firmware management protocol
> +	  driver for raw image
> +
>   config EFI_CAPSULE_AUTHENTICATE
>   	bool "Update Capsule authentication"
>   	depends on EFI_CAPSULE_FIRMWARE
> @@ -181,29 +203,6 @@ config EFI_CAPSULE_AUTHENTICATE
>   	  Select this option if you want to enable capsule
>   	  authentication
>
> -config EFI_CAPSULE_FIRMWARE_FIT
> -	bool "FMP driver for FIT image"
> -	depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
> -	depends on FIT
> -	select UPDATE_FIT
> -	select DFU
> -	select EFI_CAPSULE_FIRMWARE
> -	default n
> -	help
> -	  Select this option if you want to enable firmware management protocol
> -	  driver for FIT image
> -
> -config EFI_CAPSULE_FIRMWARE_RAW
> -	bool "FMP driver for raw image"
> -	depends on EFI_CAPSULE_FIRMWARE_MANAGEMENT
> -	select DFU
> -	select DFU_WRITE_ALT
> -	select EFI_CAPSULE_FIRMWARE
> -	default n
> -	help
> -	  Select this option if you want to enable firmware management protocol
> -	  driver for raw image
> -
>   config EFI_DEVICE_PATH_TO_TEXT
>   	bool "Device path to text protocol"
>   	default y
>



More information about the U-Boot mailing list