diff mbox series

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

Message ID 20210622143854.15682-2-ilias.apalodimas@linaro.org
State Accepted
Commit b891ff18f8999c89d00e1a963a4bc07afe3ae061
Headers show
Series [1/3,v3] efi: Fix to use null handle to create new handle for efi_fmp_raw | expand

Commit Message

Ilias Apalodimas June 22, 2021, 2:38 p.m. UTC
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@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(-)
-- 
2.32.0.rc0

Comments

Masami Hiramatsu June 22, 2021, 11:57 p.m. UTC | #1
Hi,

2021年6月22日(火) 23:39 Ilias Apalodimas <ilias.apalodimas@linaro.org>:
>

> 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@linaro.org>


This looks good to me.

Reviewed-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>


> ---

> Changes since v2:

> -


BTW, you might need to describe the change (fix to move the FMP
installation part to the next patch, etc.). But I think this is a
minor issue.

Thank you,


> 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

> +       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

> --

> 2.32.0.rc0

>



--
Masami Hiramatsu
Heinrich Schuchardt July 2, 2021, 7:25 a.m. UTC | #2
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@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

>
Ilias Apalodimas July 2, 2021, 7:32 a.m. UTC | #3
> > +	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)

> 

Well on of them is enough and makes them mutually exclusive. If you choose 
EFI_CAPSULE_FIRMWARE_RAW in this specific case the FIT variant will dissapear. 

I dont mind adding it for completeness, up to you

Cheers
/Ilias

> 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

> > 

>
diff mbox series

Patch

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
+	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