diff mbox series

[v2] Kconfig: clean up the efi configuration status

Message ID 20240830114528.267593-1-ilias.apalodimas@linaro.org
State Accepted
Commit 775f7657ba583d6bbd0b2833cd589247292a17be
Headers show
Series [v2] Kconfig: clean up the efi configuration status | expand

Commit Message

Ilias Apalodimas Aug. 30, 2024, 11:45 a.m. UTC
The EFI_LOADER and EFI config options are randomly scattered under lib/
making it cumbersome to navigate and enable options, unless you really
know what you are doing. On top of that the existing options are in
random order instead of a logical one.

So let's move things around a bit and move them under boot/. Present a
generic UEFI entry where people can select Capsules, Protocols,
Services,  and an option to compile U-Boot as an EFI for X86

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---
Changes since v1:
- Move the EFI Loader under boot/ instead of having it on the main menu
- Fold in the U-Boot as an EFI app option under the new EFI menu
 boot/Kconfig           |   2 +
 lib/Kconfig            |   2 -
 lib/efi/Kconfig        |   5 +
 lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
 4 files changed, 124 insertions(+), 89 deletions(-)

--
2.45.2

Comments

Simon Glass Sept. 1, 2024, 8:09 p.m. UTC | #1
On Fri, 30 Aug 2024 at 05:45, Ilias Apalodimas
<ilias.apalodimas@linaro.org> wrote:
>
> The EFI_LOADER and EFI config options are randomly scattered under lib/
> making it cumbersome to navigate and enable options, unless you really
> know what you are doing. On top of that the existing options are in
> random order instead of a logical one.
>
> So let's move things around a bit and move them under boot/. Present a
> generic UEFI entry where people can select Capsules, Protocols,
> Services,  and an option to compile U-Boot as an EFI for X86
>
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> ---
> Changes since v1:
> - Move the EFI Loader under boot/ instead of having it on the main menu
> - Fold in the U-Boot as an EFI app option under the new EFI menu
>  boot/Kconfig           |   2 +
>  lib/Kconfig            |   2 -
>  lib/efi/Kconfig        |   5 +
>  lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
>  4 files changed, 124 insertions(+), 89 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Takahiro AKASHI Sept. 20, 2024, 1:39 a.m. UTC | #2
On Fri, 30 Aug 2024 at 20:45, Ilias Apalodimas <ilias.apalodimas@linaro.org>
wrote:
>
> The EFI_LOADER and EFI config options are randomly scattered under lib/
> making it cumbersome to navigate and enable options, unless you really
> know what you are doing. On top of that the existing options are in
> random order instead of a logical one.
>
> So let's move things around a bit and move them under boot/. Present a
> generic UEFI entry where people can select Capsules, Protocols,
> Services,  and an option to compile U-Boot as an EFI for X86
>
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> ---
> Changes since v1:
> - Move the EFI Loader under boot/ instead of having it on the main menu
> - Fold in the U-Boot as an EFI app option under the new EFI menu
>  boot/Kconfig           |   2 +
>  lib/Kconfig            |   2 -
>  lib/efi/Kconfig        |   5 +
>  lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
>  4 files changed, 124 insertions(+), 89 deletions(-)
>
> diff --git a/boot/Kconfig b/boot/Kconfig
> index 940389d4882f..a1477eb8c7e1 100644
> --- a/boot/Kconfig
> +++ b/boot/Kconfig
> @@ -1,5 +1,7 @@
>  menu "Boot options"
>
> +source "lib/efi_loader/Kconfig"
> +
>  menu "Boot images"
>
>  config ANDROID_BOOT_IMAGE
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 2059219a1207..06b4e9a73135 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
>         help
>           A simple parser for SMBIOS data.
>
> -source "lib/efi/Kconfig"
> -source "lib/efi_loader/Kconfig"
>  source "lib/optee/Kconfig"
>
>  config TEST_FDTDEC
> diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> index c2b9bb73f718..81ed3e66b34d 100644
> --- a/lib/efi/Kconfig
> +++ b/lib/efi/Kconfig
> @@ -1,3 +1,6 @@
> +menu "U-Boot as UEFI application"
> +       depends on X86
> +
>  config EFI
>         bool "Support running U-Boot from EFI"
>         depends on X86
> @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
>           use. U-Boot allocates this from EFI on start-up (along with a
few
>           other smaller amounts) and it can never be increased after that.
>           It is used as the RAM size in with U-Boot.
> +
> +endmenu
> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> index 6ffefa9103ff..0756be61d688 100644
> --- a/lib/efi_loader/Kconfig
> +++ b/lib/efi_loader/Kconfig
> @@ -1,3 +1,5 @@
> +menu "UEFI Support"
> +
>  config EFI_LOADER
>         bool "Support running UEFI applications"
>         depends on OF_LIBFDT && ( \
> @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
>           You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
>           command to do that.
>
> -config EFI_BOOTMGR
> -       bool "UEFI Boot Manager"
> +config EFI_SECURE_BOOT
> +       bool "Enable EFI secure boot support"
> +       depends on EFI_LOADER && FIT_SIGNATURE
> +       select HASH
> +       select SHA256
> +       select RSA
> +       select RSA_VERIFY_WITH_PKEY
> +       select IMAGE_SIGN_INFO
> +       select ASYMMETRIC_KEY_TYPE
> +       select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> +       select X509_CERTIFICATE_PARSER
> +       select PKCS7_MESSAGE_PARSER
> +       select PKCS7_VERIFY
> +       select MSCODE_PARSER
> +       select EFI_SIGNATURE_SUPPORT
> +       help
> +         Select this option to enable EFI secure boot support.
> +         Once SecureBoot mode is enforced, any EFI binary can run only if
> +         it is signed with a trusted key. To do that, you need to
install,
> +         at least, PK, KEK and db.
> +
> +config EFI_SIGNATURE_SUPPORT
> +       bool
> +
> +menu "UEFI services"
> +
> +config EFI_GET_TIME
> +       bool "GetTime() runtime service"
> +       depends on DM_RTC
>         default y
>         help
> -         Select this option if you want to select the UEFI binary to be
booted
> -         via UEFI variables Boot####, BootOrder, and BootNext. You
should also
> -         normally enable CMD_BOOTEFI_BOOTMGR so that the command is
available.
> +         Provide the GetTime() runtime service at boottime. This service
> +         can be used by an EFI application to read the real time clock.
> +
> +config EFI_SET_TIME
> +       bool "SetTime() runtime service"
> +       depends on EFI_GET_TIME
> +       default y if ARCH_QEMU || SANDBOX
> +       help
> +         Provide the SetTime() runtime service at boottime. This service
> +         can be used by an EFI application to adjust the real time clock.
> +
> +config EFI_HAVE_RUNTIME_RESET
> +       # bool "Reset runtime service is available"
> +       bool
> +       default y
> +       depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> +                  SANDBOX || SYSRESET_SBI || SYSRESET_X86
> +
> +endmenu
> +
> +menu "UEFI Variables"
>
>  choice
>         prompt "Store for non-volatile UEFI variables"
> @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
>
>           Minimum 4096, default 131072
>
> -config EFI_GET_TIME
> -       bool "GetTime() runtime service"
> -       depends on DM_RTC
> -       default y
> +config EFI_PLATFORM_LANG_CODES
> +       string "Language codes supported by firmware"
> +       default "en-US"
>         help
> -         Provide the GetTime() runtime service at boottime. This service
> -         can be used by an EFI application to read the real time clock.
> +         This value is used to initialize the PlatformLangCodes
variable. Its
> +         value is a semicolon (;) separated list of language codes in
native
> +         RFC 4646 format, e.g. "en-US;de-DE". The first language code is
used
> +         to initialize the PlatformLang variable.
>
> -config EFI_SET_TIME
> -       bool "SetTime() runtime service"
> -       depends on EFI_GET_TIME
> -       default y if ARCH_QEMU || SANDBOX
> -       help
> -         Provide the SetTime() runtime service at boottime. This service
> -         can be used by an EFI application to adjust the real time clock.
> +endmenu
>
> -config EFI_SCROLL_ON_CLEAR_SCREEN
> -       bool "Avoid overwriting previous output on clear screen"
> -       help
> -         Instead of erasing the screen content when the console screen
should
> -         be cleared, emit blank new lines so that previous output is
scrolled
> -         out of sight rather than overwritten. On serial consoles this
allows
> -         to capture complete boot logs (except for interactive menus
etc.)
> -         and can ease debugging related issues.
> +menu "Capsule support"
>
>  config EFI_HAVE_CAPSULE_SUPPORT
>         bool
> @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
>           embedded in the platform's device tree and used for capsule
>           authentication at the time of capsule update.
>
> +endmenu
> +
> +menu "UEFI protocol support"
> +
>  config EFI_DEVICE_PATH_TO_TEXT
>         bool "Device path to text protocol"
>         default y
> @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
>
>  endif
>
> -config EFI_LOADER_BOUNCE_BUFFER
> -       bool "EFI Applications use bounce buffers for DMA operations"
> -       help
> -         Some hardware does not support DMA to full 64bit addresses. For
this
> -         hardware we can create a bounce buffer so that payloads don't
have to
> -         worry about platform details.
> -
> -config EFI_PLATFORM_LANG_CODES
> -       string "Language codes supported by firmware"
> -       default "en-US"
> -       help
> -         This value is used to initialize the PlatformLangCodes
variable. Its
> -         value is a semicolon (;) separated list of language codes in
native
> -         RFC 4646 format, e.g. "en-US;de-DE". The first language code is
used
> -         to initialize the PlatformLang variable.
> -
> -config EFI_HAVE_RUNTIME_RESET
> -       # bool "Reset runtime service is available"
> -       bool
> -       default y
> -       depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> -                  SANDBOX || SYSRESET_SBI || SYSRESET_X86
> -
> -config EFI_GRUB_ARM32_WORKAROUND
> -       bool "Workaround for GRUB on 32bit ARM"
> -       default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> -       default y
> -       depends on ARM && !ARM64
> -       help
> -         GRUB prior to version 2.04 requires U-Boot to disable caches.
This
> -         workaround currently is also needed on systems with caches that
> -         cannot be managed via CP15.
> -
>  config EFI_RNG_PROTOCOL
>         bool "EFI_RNG_PROTOCOL support"
>         depends on DM_RNG
> @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
>           installed and Linux 5.7+ will ignore any initrd=<ramdisk>
command line
>           argument.
>
> -config EFI_SECURE_BOOT
> -       bool "Enable EFI secure boot support"
> -       depends on EFI_LOADER && FIT_SIGNATURE
> -       select HASH
> -       select SHA256
> -       select RSA
> -       select RSA_VERIFY_WITH_PKEY
> -       select IMAGE_SIGN_INFO
> -       select ASYMMETRIC_KEY_TYPE
> -       select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> -       select X509_CERTIFICATE_PARSER
> -       select PKCS7_MESSAGE_PARSER
> -       select PKCS7_VERIFY
> -       select MSCODE_PARSER
> -       select EFI_SIGNATURE_SUPPORT
> +config EFI_RISCV_BOOT_PROTOCOL
> +       bool "RISCV_EFI_BOOT_PROTOCOL support"
> +       default y
> +       depends on RISCV
>         help
> -         Select this option to enable EFI secure boot support.
> -         Once SecureBoot mode is enforced, any EFI binary can run only if
> -         it is signed with a trusted key. To do that, you need to
install,
> -         at least, PK, KEK and db.
> +         The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> +         to the next boot stage. It should be enabled as it is meant to
> +         replace the transfer via the device-tree. The latter is not
> +         possible on systems using ACPI.
>
> -config EFI_SIGNATURE_SUPPORT
> -       bool
> +endmenu
> +
> +menu "Misc options"
> +config EFI_LOADER_BOUNCE_BUFFER
> +       bool "EFI Applications use bounce buffers for DMA operations"
> +       depends on ARM64
> +       help
> +         Some hardware does not support DMA to full 64bit addresses. For
this
> +         hardware we can create a bounce buffer so that payloads don't
have to
> +         worry about platform details.
> +
> +config EFI_GRUB_ARM32_WORKAROUND
> +       bool "Workaround for GRUB on 32bit ARM"
> +       default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> +       default y
> +       depends on ARM && !ARM64
> +       help
> +         GRUB prior to version 2.04 requires U-Boot to disable caches.
This
> +         workaround currently is also needed on systems with caches that
> +         cannot be managed via CP15.
>
>  config EFI_ESRT
>         bool "Enable the UEFI ESRT generation"
> @@ -496,15 +509,26 @@ config EFI_EBBR_2_1_CONFORMANCE
>         help
>           Enabling this option adds the EBBRv2.1 conformance entry to the
ECPT UEFI table.
>
> -config EFI_RISCV_BOOT_PROTOCOL
> -       bool "RISCV_EFI_BOOT_PROTOCOL support"
> +config EFI_SCROLL_ON_CLEAR_SCREEN
> +       bool "Avoid overwriting previous output on clear screen"
> +       help
> +         Instead of erasing the screen content when the console screen
should
> +         be cleared, emit blank new lines so that previous output is
scrolled
> +         out of sight rather than overwritten. On serial consoles this
allows
> +         to capture complete boot logs (except for interactive menus
etc.)
> +         and can ease debugging related issues.
> +
> +endmenu
> +
> +menu "EFI bootmanager"
> +
> +config EFI_BOOTMGR
> +       bool "UEFI Boot Manager"
>         default y
> -       depends on RISCV
>         help
> -         The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> -         to the next boot stage. It should be enabled as it is meant to
> -         replace the transfer via the device-tree. The latter is not
> -         possible on systems using ACPI.
> +         Select this option if you want to select the UEFI binary to be
booted
> +         via UEFI variables Boot####, BootOrder, and BootNext. You
should also
> +         normally enable CMD_BOOTEFI_BOOTMGR so that the command is
available.
>
>  config EFI_HTTP_BOOT
>         bool "EFI HTTP Boot support"
> @@ -514,5 +538,11 @@ config EFI_HTTP_BOOT
>         help
>           Enabling this option adds EFI HTTP Boot support. It allows to
>           directly boot from network.
> +endmenu
>
>  endif
> +
> +source "lib/efi/Kconfig"

While you might have already discussed the issue, it looks weird to me that
lib/efi/Kconfig
is contained in lib/efi_loader/Kconfig.

-Takahiro AKASHI

> +
> +endmenu
> +
> --
> 2.45.2
Ilias Apalodimas Sept. 20, 2024, 4:49 a.m. UTC | #3
Akashi-san

On Fri, 20 Sept 2024 at 04:39, Takahiro AKASHI <akashi.tkhro@gmail.com> wrote:
>
>
>
> On Fri, 30 Aug 2024 at 20:45, Ilias Apalodimas <ilias.apalodimas@linaro.org> wrote:
> >
> > The EFI_LOADER and EFI config options are randomly scattered under lib/
> > making it cumbersome to navigate and enable options, unless you really
> > know what you are doing. On top of that the existing options are in
> > random order instead of a logical one.
> >
> > So let's move things around a bit and move them under boot/. Present a
> > generic UEFI entry where people can select Capsules, Protocols,
> > Services,  and an option to compile U-Boot as an EFI for X86
> >
> > Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> > ---
> > Changes since v1:
> > - Move the EFI Loader under boot/ instead of having it on the main menu
> > - Fold in the U-Boot as an EFI app option under the new EFI menu
> >  boot/Kconfig           |   2 +
> >  lib/Kconfig            |   2 -
> >  lib/efi/Kconfig        |   5 +
> >  lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
> >  4 files changed, 124 insertions(+), 89 deletions(-)
> >
> > diff --git a/boot/Kconfig b/boot/Kconfig
> > index 940389d4882f..a1477eb8c7e1 100644
> > --- a/boot/Kconfig
> > +++ b/boot/Kconfig
> > @@ -1,5 +1,7 @@
> >  menu "Boot options"
> >
> > +source "lib/efi_loader/Kconfig"
> > +
> >  menu "Boot images"
> >
> >  config ANDROID_BOOT_IMAGE
> > diff --git a/lib/Kconfig b/lib/Kconfig
> > index 2059219a1207..06b4e9a73135 100644
> > --- a/lib/Kconfig
> > +++ b/lib/Kconfig
> > @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
> >         help
> >           A simple parser for SMBIOS data.
> >
> > -source "lib/efi/Kconfig"
> > -source "lib/efi_loader/Kconfig"
> >  source "lib/optee/Kconfig"
> >
> >  config TEST_FDTDEC
> > diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> > index c2b9bb73f718..81ed3e66b34d 100644
> > --- a/lib/efi/Kconfig
> > +++ b/lib/efi/Kconfig
> > @@ -1,3 +1,6 @@
> > +menu "U-Boot as UEFI application"
> > +       depends on X86
> > +
> >  config EFI
> >         bool "Support running U-Boot from EFI"
> >         depends on X86
> > @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
> >           use. U-Boot allocates this from EFI on start-up (along with a few
> >           other smaller amounts) and it can never be increased after that.
> >           It is used as the RAM size in with U-Boot.
> > +
> > +endmenu
> > diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> > index 6ffefa9103ff..0756be61d688 100644
> > --- a/lib/efi_loader/Kconfig
> > +++ b/lib/efi_loader/Kconfig
> > @@ -1,3 +1,5 @@
> > +menu "UEFI Support"
> > +
> >  config EFI_LOADER
> >         bool "Support running UEFI applications"
> >         depends on OF_LIBFDT && ( \
> > @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
> >           You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
> >           command to do that.
> >
> > -config EFI_BOOTMGR
> > -       bool "UEFI Boot Manager"
> > +config EFI_SECURE_BOOT
> > +       bool "Enable EFI secure boot support"
> > +       depends on EFI_LOADER && FIT_SIGNATURE
> > +       select HASH
> > +       select SHA256
> > +       select RSA
> > +       select RSA_VERIFY_WITH_PKEY
> > +       select IMAGE_SIGN_INFO
> > +       select ASYMMETRIC_KEY_TYPE
> > +       select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > +       select X509_CERTIFICATE_PARSER
> > +       select PKCS7_MESSAGE_PARSER
> > +       select PKCS7_VERIFY
> > +       select MSCODE_PARSER
> > +       select EFI_SIGNATURE_SUPPORT
> > +       help
> > +         Select this option to enable EFI secure boot support.
> > +         Once SecureBoot mode is enforced, any EFI binary can run only if
> > +         it is signed with a trusted key. To do that, you need to install,
> > +         at least, PK, KEK and db.
> > +
> > +config EFI_SIGNATURE_SUPPORT
> > +       bool
> > +
> > +menu "UEFI services"
> > +
> > +config EFI_GET_TIME
> > +       bool "GetTime() runtime service"
> > +       depends on DM_RTC
> >         default y
> >         help
> > -         Select this option if you want to select the UEFI binary to be booted
> > -         via UEFI variables Boot####, BootOrder, and BootNext. You should also
> > -         normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> > +         Provide the GetTime() runtime service at boottime. This service
> > +         can be used by an EFI application to read the real time clock.
> > +
> > +config EFI_SET_TIME
> > +       bool "SetTime() runtime service"
> > +       depends on EFI_GET_TIME
> > +       default y if ARCH_QEMU || SANDBOX
> > +       help
> > +         Provide the SetTime() runtime service at boottime. This service
> > +         can be used by an EFI application to adjust the real time clock.
> > +
> > +config EFI_HAVE_RUNTIME_RESET
> > +       # bool "Reset runtime service is available"
> > +       bool
> > +       default y
> > +       depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > +                  SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > +
> > +endmenu
> > +
> > +menu "UEFI Variables"
> >
> >  choice
> >         prompt "Store for non-volatile UEFI variables"
> > @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
> >
> >           Minimum 4096, default 131072
> >
> > -config EFI_GET_TIME
> > -       bool "GetTime() runtime service"
> > -       depends on DM_RTC
> > -       default y
> > +config EFI_PLATFORM_LANG_CODES
> > +       string "Language codes supported by firmware"
> > +       default "en-US"
> >         help
> > -         Provide the GetTime() runtime service at boottime. This service
> > -         can be used by an EFI application to read the real time clock.
> > +         This value is used to initialize the PlatformLangCodes variable. Its
> > +         value is a semicolon (;) separated list of language codes in native
> > +         RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > +         to initialize the PlatformLang variable.
> >
> > -config EFI_SET_TIME
> > -       bool "SetTime() runtime service"
> > -       depends on EFI_GET_TIME
> > -       default y if ARCH_QEMU || SANDBOX
> > -       help
> > -         Provide the SetTime() runtime service at boottime. This service
> > -         can be used by an EFI application to adjust the real time clock.
> > +endmenu
> >
> > -config EFI_SCROLL_ON_CLEAR_SCREEN
> > -       bool "Avoid overwriting previous output on clear screen"
> > -       help
> > -         Instead of erasing the screen content when the console screen should
> > -         be cleared, emit blank new lines so that previous output is scrolled
> > -         out of sight rather than overwritten. On serial consoles this allows
> > -         to capture complete boot logs (except for interactive menus etc.)
> > -         and can ease debugging related issues.
> > +menu "Capsule support"
> >
> >  config EFI_HAVE_CAPSULE_SUPPORT
> >         bool
> > @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
> >           embedded in the platform's device tree and used for capsule
> >           authentication at the time of capsule update.
> >
> > +endmenu
> > +
> > +menu "UEFI protocol support"
> > +
> >  config EFI_DEVICE_PATH_TO_TEXT
> >         bool "Device path to text protocol"
> >         default y
> > @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
> >
> >  endif
> >
> > -config EFI_LOADER_BOUNCE_BUFFER
> > -       bool "EFI Applications use bounce buffers for DMA operations"
> > -       help
> > -         Some hardware does not support DMA to full 64bit addresses. For this
> > -         hardware we can create a bounce buffer so that payloads don't have to
> > -         worry about platform details.
> > -
> > -config EFI_PLATFORM_LANG_CODES
> > -       string "Language codes supported by firmware"
> > -       default "en-US"
> > -       help
> > -         This value is used to initialize the PlatformLangCodes variable. Its
> > -         value is a semicolon (;) separated list of language codes in native
> > -         RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > -         to initialize the PlatformLang variable.
> > -
> > -config EFI_HAVE_RUNTIME_RESET
> > -       # bool "Reset runtime service is available"
> > -       bool
> > -       default y
> > -       depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > -                  SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > -
> > -config EFI_GRUB_ARM32_WORKAROUND
> > -       bool "Workaround for GRUB on 32bit ARM"
> > -       default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> > -       default y
> > -       depends on ARM && !ARM64
> > -       help
> > -         GRUB prior to version 2.04 requires U-Boot to disable caches. This
> > -         workaround currently is also needed on systems with caches that
> > -         cannot be managed via CP15.
> > -
> >  config EFI_RNG_PROTOCOL
> >         bool "EFI_RNG_PROTOCOL support"
> >         depends on DM_RNG
> > @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
> >           installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
> >           argument.
> >
> > -config EFI_SECURE_BOOT
> > -       bool "Enable EFI secure boot support"
> > -       depends on EFI_LOADER && FIT_SIGNATURE
> > -       select HASH
> > -       select SHA256
> > -       select RSA
> > -       select RSA_VERIFY_WITH_PKEY
> > -       select IMAGE_SIGN_INFO
> > -       select ASYMMETRIC_KEY_TYPE
> > -       select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > -       select X509_CERTIFICATE_PARSER
> > -       select PKCS7_MESSAGE_PARSER
> > -       select PKCS7_VERIFY
> > -       select MSCODE_PARSER
> > -       select EFI_SIGNATURE_SUPPORT
> > +config EFI_RISCV_BOOT_PROTOCOL
> > +       bool "RISCV_EFI_BOOT_PROTOCOL support"
> > +       default y
> > +       depends on RISCV
> >         help
> > -         Select this option to enable EFI secure boot support.
> > -         Once SecureBoot mode is enforced, any EFI binary can run only if
> > -         it is signed with a trusted key. To do that, you need to install,
> > -         at least, PK, KEK and db.
> > +         The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> > +         to the next boot stage. It should be enabled as it is meant to
> > +         replace the transfer via the device-tree. The latter is not
> > +         possible on systems using ACPI.
> >
> > -config EFI_SIGNATURE_SUPPORT
> > -       bool
> > +endmenu
> > +
> > +menu "Misc options"
> > +config EFI_LOADER_BOUNCE_BUFFER
> > +       bool "EFI Applications use bounce buffers for DMA operations"
> > +       depends on ARM64
> > +       help
> > +         Some hardware does not support DMA to full 64bit addresses. For this
> > +         hardware we can create a bounce buffer so that payloads don't have to
> > +         worry about platform details.
> > +
> > +config EFI_GRUB_ARM32_WORKAROUND
> > +       bool "Workaround for GRUB on 32bit ARM"
> > +       default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> > +       default y
> > +       depends on ARM && !ARM64
> > +       help
> > +         GRUB prior to version 2.04 requires U-Boot to disable caches. This
> > +         workaround currently is also needed on systems with caches that
> > +         cannot be managed via CP15.
> >
> >  config EFI_ESRT
> >         bool "Enable the UEFI ESRT generation"
> > @@ -496,15 +509,26 @@ config EFI_EBBR_2_1_CONFORMANCE
> >         help
> >           Enabling this option adds the EBBRv2.1 conformance entry to the ECPT UEFI table.
> >
> > -config EFI_RISCV_BOOT_PROTOCOL
> > -       bool "RISCV_EFI_BOOT_PROTOCOL support"
> > +config EFI_SCROLL_ON_CLEAR_SCREEN
> > +       bool "Avoid overwriting previous output on clear screen"
> > +       help
> > +         Instead of erasing the screen content when the console screen should
> > +         be cleared, emit blank new lines so that previous output is scrolled
> > +         out of sight rather than overwritten. On serial consoles this allows
> > +         to capture complete boot logs (except for interactive menus etc.)
> > +         and can ease debugging related issues.
> > +
> > +endmenu
> > +
> > +menu "EFI bootmanager"
> > +
> > +config EFI_BOOTMGR
> > +       bool "UEFI Boot Manager"
> >         default y
> > -       depends on RISCV
> >         help
> > -         The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> > -         to the next boot stage. It should be enabled as it is meant to
> > -         replace the transfer via the device-tree. The latter is not
> > -         possible on systems using ACPI.
> > +         Select this option if you want to select the UEFI binary to be booted
> > +         via UEFI variables Boot####, BootOrder, and BootNext. You should also
> > +         normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> >
> >  config EFI_HTTP_BOOT
> >         bool "EFI HTTP Boot support"
> > @@ -514,5 +538,11 @@ config EFI_HTTP_BOOT
> >         help
> >           Enabling this option adds EFI HTTP Boot support. It allows to
> >           directly boot from network.
> > +endmenu
> >
> >  endif
> > +
> > +source "lib/efi/Kconfig"
>
> While you might have already discussed the issue, it looks weird to me that lib/efi/Kconfig
> is contained in lib/efi_loader/Kconfig.

No, we haven't but that's just naming no? We can easily rename that

Thanks
/Ilias
>
> -Takahiro AKASHI
>
> > +
> > +endmenu
> > +
> > --
> > 2.45.2
Heinrich Schuchardt Nov. 21, 2024, 1:53 p.m. UTC | #4
On 30.08.24 13:45, Ilias Apalodimas wrote:
> The EFI_LOADER and EFI config options are randomly scattered under lib/
> making it cumbersome to navigate and enable options, unless you really
> know what you are doing. On top of that the existing options are in
> random order instead of a logical one.
>
> So let's move things around a bit and move them under boot/. Present a
> generic UEFI entry where people can select Capsules, Protocols,
> Services,  and an option to compile U-Boot as an EFI for X86
>
> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> ---
> Changes since v1:
> - Move the EFI Loader under boot/ instead of having it on the main menu
> - Fold in the U-Boot as an EFI app option under the new EFI menu
>   boot/Kconfig           |   2 +
>   lib/Kconfig            |   2 -
>   lib/efi/Kconfig        |   5 +
>   lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
>   4 files changed, 124 insertions(+), 89 deletions(-)
>
> diff --git a/boot/Kconfig b/boot/Kconfig
> index 940389d4882f..a1477eb8c7e1 100644
> --- a/boot/Kconfig
> +++ b/boot/Kconfig
> @@ -1,5 +1,7 @@
>   menu "Boot options"
>
> +source "lib/efi_loader/Kconfig"
> +
>   menu "Boot images"
>
>   config ANDROID_BOOT_IMAGE
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 2059219a1207..06b4e9a73135 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
>   	help
>   	  A simple parser for SMBIOS data.
>
> -source "lib/efi/Kconfig"
> -source "lib/efi_loader/Kconfig"
>   source "lib/optee/Kconfig"
>
>   config TEST_FDTDEC
> diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> index c2b9bb73f718..81ed3e66b34d 100644
> --- a/lib/efi/Kconfig
> +++ b/lib/efi/Kconfig
> @@ -1,3 +1,6 @@
> +menu "U-Boot as UEFI application"
> +	depends on X86
> +
>   config EFI
>   	bool "Support running U-Boot from EFI"
>   	depends on X86
> @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
>   	  use. U-Boot allocates this from EFI on start-up (along with a few
>   	  other smaller amounts) and it can never be increased after that.
>   	  It is used as the RAM size in with U-Boot.
> +
> +endmenu
> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> index 6ffefa9103ff..0756be61d688 100644
> --- a/lib/efi_loader/Kconfig
> +++ b/lib/efi_loader/Kconfig
> @@ -1,3 +1,5 @@
> +menu "UEFI Support"
> +
>   config EFI_LOADER
>   	bool "Support running UEFI applications"
>   	depends on OF_LIBFDT && ( \
> @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
>   	  You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
>   	  command to do that.
>
> -config EFI_BOOTMGR
> -	bool "UEFI Boot Manager"
> +config EFI_SECURE_BOOT
> +	bool "Enable EFI secure boot support"
> +	depends on EFI_LOADER && FIT_SIGNATURE
> +	select HASH
> +	select SHA256
> +	select RSA
> +	select RSA_VERIFY_WITH_PKEY
> +	select IMAGE_SIGN_INFO
> +	select ASYMMETRIC_KEY_TYPE
> +	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> +	select X509_CERTIFICATE_PARSER
> +	select PKCS7_MESSAGE_PARSER
> +	select PKCS7_VERIFY
> +	select MSCODE_PARSER
> +	select EFI_SIGNATURE_SUPPORT
> +	help
> +	  Select this option to enable EFI secure boot support.
> +	  Once SecureBoot mode is enforced, any EFI binary can run only if
> +	  it is signed with a trusted key. To do that, you need to install,
> +	  at least, PK, KEK and db.
> +
> +config EFI_SIGNATURE_SUPPORT
> +	bool
> +
> +menu "UEFI services"
> +
> +config EFI_GET_TIME
> +	bool "GetTime() runtime service"
> +	depends on DM_RTC
>   	default y
>   	help
> -	  Select this option if you want to select the UEFI binary to be booted
> -	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
> -	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> +	  Provide the GetTime() runtime service at boottime. This service
> +	  can be used by an EFI application to read the real time clock.
> +
> +config EFI_SET_TIME
> +	bool "SetTime() runtime service"
> +	depends on EFI_GET_TIME
> +	default y if ARCH_QEMU || SANDBOX
> +	help
> +	  Provide the SetTime() runtime service at boottime. This service
> +	  can be used by an EFI application to adjust the real time clock.
> +
> +config EFI_HAVE_RUNTIME_RESET
> +	# bool "Reset runtime service is available"
> +	bool
> +	default y
> +	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> +		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
> +
> +endmenu
> +
> +menu "UEFI Variables"
>
>   choice
>   	prompt "Store for non-volatile UEFI variables"
> @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
>
>   	  Minimum 4096, default 131072
>
> -config EFI_GET_TIME
> -	bool "GetTime() runtime service"
> -	depends on DM_RTC
> -	default y
> +config EFI_PLATFORM_LANG_CODES
> +	string "Language codes supported by firmware"
> +	default "en-US"
>   	help
> -	  Provide the GetTime() runtime service at boottime. This service
> -	  can be used by an EFI application to read the real time clock.
> +	  This value is used to initialize the PlatformLangCodes variable. Its
> +	  value is a semicolon (;) separated list of language codes in native
> +	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> +	  to initialize the PlatformLang variable.
>
> -config EFI_SET_TIME
> -	bool "SetTime() runtime service"
> -	depends on EFI_GET_TIME
> -	default y if ARCH_QEMU || SANDBOX
> -	help
> -	  Provide the SetTime() runtime service at boottime. This service
> -	  can be used by an EFI application to adjust the real time clock.
> +endmenu
>
> -config EFI_SCROLL_ON_CLEAR_SCREEN
> -	bool "Avoid overwriting previous output on clear screen"
> -	help
> -	  Instead of erasing the screen content when the console screen should
> -	  be cleared, emit blank new lines so that previous output is scrolled
> -	  out of sight rather than overwritten. On serial consoles this allows
> -	  to capture complete boot logs (except for interactive menus etc.)
> -	  and can ease debugging related issues.
> +menu "Capsule support"
>
>   config EFI_HAVE_CAPSULE_SUPPORT
>   	bool
> @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
>   	  embedded in the platform's device tree and used for capsule
>   	  authentication at the time of capsule update.
>
> +endmenu
> +
> +menu "UEFI protocol support"
> +
>   config EFI_DEVICE_PATH_TO_TEXT
>   	bool "Device path to text protocol"
>   	default y
> @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
>
>   endif
>
> -config EFI_LOADER_BOUNCE_BUFFER
> -	bool "EFI Applications use bounce buffers for DMA operations"
> -	help
> -	  Some hardware does not support DMA to full 64bit addresses. For this
> -	  hardware we can create a bounce buffer so that payloads don't have to
> -	  worry about platform details.
> -
> -config EFI_PLATFORM_LANG_CODES
> -	string "Language codes supported by firmware"
> -	default "en-US"
> -	help
> -	  This value is used to initialize the PlatformLangCodes variable. Its
> -	  value is a semicolon (;) separated list of language codes in native
> -	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> -	  to initialize the PlatformLang variable.
> -
> -config EFI_HAVE_RUNTIME_RESET
> -	# bool "Reset runtime service is available"
> -	bool
> -	default y
> -	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> -		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
> -
> -config EFI_GRUB_ARM32_WORKAROUND
> -	bool "Workaround for GRUB on 32bit ARM"
> -	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> -	default y
> -	depends on ARM && !ARM64
> -	help
> -	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
> -	  workaround currently is also needed on systems with caches that
> -	  cannot be managed via CP15.
> -
>   config EFI_RNG_PROTOCOL
>   	bool "EFI_RNG_PROTOCOL support"
>   	depends on DM_RNG
> @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
>   	  installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
>   	  argument.
>
> -config EFI_SECURE_BOOT
> -	bool "Enable EFI secure boot support"
> -	depends on EFI_LOADER && FIT_SIGNATURE
> -	select HASH
> -	select SHA256
> -	select RSA
> -	select RSA_VERIFY_WITH_PKEY
> -	select IMAGE_SIGN_INFO
> -	select ASYMMETRIC_KEY_TYPE
> -	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> -	select X509_CERTIFICATE_PARSER
> -	select PKCS7_MESSAGE_PARSER
> -	select PKCS7_VERIFY
> -	select MSCODE_PARSER
> -	select EFI_SIGNATURE_SUPPORT
> +config EFI_RISCV_BOOT_PROTOCOL
> +	bool "RISCV_EFI_BOOT_PROTOCOL support"
> +	default y
> +	depends on RISCV
>   	help
> -	  Select this option to enable EFI secure boot support.
> -	  Once SecureBoot mode is enforced, any EFI binary can run only if
> -	  it is signed with a trusted key. To do that, you need to install,
> -	  at least, PK, KEK and db.
> +	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> +	  to the next boot stage. It should be enabled as it is meant to
> +	  replace the transfer via the device-tree. The latter is not
> +	  possible on systems using ACPI.
>
> -config EFI_SIGNATURE_SUPPORT
> -	bool
> +endmenu
> +
> +menu "Misc options"
> +config EFI_LOADER_BOUNCE_BUFFER
> +	bool "EFI Applications use bounce buffers for DMA operations"
> +	depends on ARM64

Hello Ilias,

your merged patch revoked

dcd1b63b7072 ("efi_loader: allow EFI_LOADER_BOUNCE_BUFFER on all
architectures")

which we need to fix problems on JH7110 boards with more than 4 GiB.

We need to add the revoked patch again.

Best regards

Heinrich


> +	help
> +	  Some hardware does not support DMA to full 64bit addresses. For this
> +	  hardware we can create a bounce buffer so that payloads don't have to
> +	  worry about platform details.
> +
> +config EFI_GRUB_ARM32_WORKAROUND
> +	bool "Workaround for GRUB on 32bit ARM"
> +	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> +	default y
> +	depends on ARM && !ARM64
> +	help
> +	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
> +	  workaround currently is also needed on systems with caches that
> +	  cannot be managed via CP15.
>
>   config EFI_ESRT
>   	bool "Enable the UEFI ESRT generation"
> @@ -496,15 +509,26 @@ config EFI_EBBR_2_1_CONFORMANCE
>   	help
>   	  Enabling this option adds the EBBRv2.1 conformance entry to the ECPT UEFI table.
>
> -config EFI_RISCV_BOOT_PROTOCOL
> -	bool "RISCV_EFI_BOOT_PROTOCOL support"
> +config EFI_SCROLL_ON_CLEAR_SCREEN
> +	bool "Avoid overwriting previous output on clear screen"
> +	help
> +	  Instead of erasing the screen content when the console screen should
> +	  be cleared, emit blank new lines so that previous output is scrolled
> +	  out of sight rather than overwritten. On serial consoles this allows
> +	  to capture complete boot logs (except for interactive menus etc.)
> +	  and can ease debugging related issues.
> +
> +endmenu
> +
> +menu "EFI bootmanager"
> +
> +config EFI_BOOTMGR
> +	bool "UEFI Boot Manager"
>   	default y
> -	depends on RISCV
>   	help
> -	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> -	  to the next boot stage. It should be enabled as it is meant to
> -	  replace the transfer via the device-tree. The latter is not
> -	  possible on systems using ACPI.
> +	  Select this option if you want to select the UEFI binary to be booted
> +	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
> +	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
>
>   config EFI_HTTP_BOOT
>   	bool "EFI HTTP Boot support"
> @@ -514,5 +538,11 @@ config EFI_HTTP_BOOT
>   	help
>   	  Enabling this option adds EFI HTTP Boot support. It allows to
>   	  directly boot from network.
> +endmenu
>
>   endif
> +
> +source "lib/efi/Kconfig"
> +
> +endmenu
> +
> --
> 2.45.2
>
Tom Rini Nov. 21, 2024, 2:01 p.m. UTC | #5
On Thu, Nov 21, 2024 at 02:53:53PM +0100, Heinrich Schuchardt wrote:
> On 30.08.24 13:45, Ilias Apalodimas wrote:
> > The EFI_LOADER and EFI config options are randomly scattered under lib/
> > making it cumbersome to navigate and enable options, unless you really
> > know what you are doing. On top of that the existing options are in
> > random order instead of a logical one.
> > 
> > So let's move things around a bit and move them under boot/. Present a
> > generic UEFI entry where people can select Capsules, Protocols,
> > Services,  and an option to compile U-Boot as an EFI for X86
> > 
> > Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> > ---
> > Changes since v1:
> > - Move the EFI Loader under boot/ instead of having it on the main menu
> > - Fold in the U-Boot as an EFI app option under the new EFI menu
> >   boot/Kconfig           |   2 +
> >   lib/Kconfig            |   2 -
> >   lib/efi/Kconfig        |   5 +
> >   lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
> >   4 files changed, 124 insertions(+), 89 deletions(-)
> > 
> > diff --git a/boot/Kconfig b/boot/Kconfig
> > index 940389d4882f..a1477eb8c7e1 100644
> > --- a/boot/Kconfig
> > +++ b/boot/Kconfig
> > @@ -1,5 +1,7 @@
> >   menu "Boot options"
> > 
> > +source "lib/efi_loader/Kconfig"
> > +
> >   menu "Boot images"
> > 
> >   config ANDROID_BOOT_IMAGE
> > diff --git a/lib/Kconfig b/lib/Kconfig
> > index 2059219a1207..06b4e9a73135 100644
> > --- a/lib/Kconfig
> > +++ b/lib/Kconfig
> > @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
> >   	help
> >   	  A simple parser for SMBIOS data.
> > 
> > -source "lib/efi/Kconfig"
> > -source "lib/efi_loader/Kconfig"
> >   source "lib/optee/Kconfig"
> > 
> >   config TEST_FDTDEC
> > diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> > index c2b9bb73f718..81ed3e66b34d 100644
> > --- a/lib/efi/Kconfig
> > +++ b/lib/efi/Kconfig
> > @@ -1,3 +1,6 @@
> > +menu "U-Boot as UEFI application"
> > +	depends on X86
> > +
> >   config EFI
> >   	bool "Support running U-Boot from EFI"
> >   	depends on X86
> > @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
> >   	  use. U-Boot allocates this from EFI on start-up (along with a few
> >   	  other smaller amounts) and it can never be increased after that.
> >   	  It is used as the RAM size in with U-Boot.
> > +
> > +endmenu
> > diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> > index 6ffefa9103ff..0756be61d688 100644
> > --- a/lib/efi_loader/Kconfig
> > +++ b/lib/efi_loader/Kconfig
> > @@ -1,3 +1,5 @@
> > +menu "UEFI Support"
> > +
> >   config EFI_LOADER
> >   	bool "Support running UEFI applications"
> >   	depends on OF_LIBFDT && ( \
> > @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
> >   	  You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
> >   	  command to do that.
> > 
> > -config EFI_BOOTMGR
> > -	bool "UEFI Boot Manager"
> > +config EFI_SECURE_BOOT
> > +	bool "Enable EFI secure boot support"
> > +	depends on EFI_LOADER && FIT_SIGNATURE
> > +	select HASH
> > +	select SHA256
> > +	select RSA
> > +	select RSA_VERIFY_WITH_PKEY
> > +	select IMAGE_SIGN_INFO
> > +	select ASYMMETRIC_KEY_TYPE
> > +	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > +	select X509_CERTIFICATE_PARSER
> > +	select PKCS7_MESSAGE_PARSER
> > +	select PKCS7_VERIFY
> > +	select MSCODE_PARSER
> > +	select EFI_SIGNATURE_SUPPORT
> > +	help
> > +	  Select this option to enable EFI secure boot support.
> > +	  Once SecureBoot mode is enforced, any EFI binary can run only if
> > +	  it is signed with a trusted key. To do that, you need to install,
> > +	  at least, PK, KEK and db.
> > +
> > +config EFI_SIGNATURE_SUPPORT
> > +	bool
> > +
> > +menu "UEFI services"
> > +
> > +config EFI_GET_TIME
> > +	bool "GetTime() runtime service"
> > +	depends on DM_RTC
> >   	default y
> >   	help
> > -	  Select this option if you want to select the UEFI binary to be booted
> > -	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
> > -	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> > +	  Provide the GetTime() runtime service at boottime. This service
> > +	  can be used by an EFI application to read the real time clock.
> > +
> > +config EFI_SET_TIME
> > +	bool "SetTime() runtime service"
> > +	depends on EFI_GET_TIME
> > +	default y if ARCH_QEMU || SANDBOX
> > +	help
> > +	  Provide the SetTime() runtime service at boottime. This service
> > +	  can be used by an EFI application to adjust the real time clock.
> > +
> > +config EFI_HAVE_RUNTIME_RESET
> > +	# bool "Reset runtime service is available"
> > +	bool
> > +	default y
> > +	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > +		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > +
> > +endmenu
> > +
> > +menu "UEFI Variables"
> > 
> >   choice
> >   	prompt "Store for non-volatile UEFI variables"
> > @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
> > 
> >   	  Minimum 4096, default 131072
> > 
> > -config EFI_GET_TIME
> > -	bool "GetTime() runtime service"
> > -	depends on DM_RTC
> > -	default y
> > +config EFI_PLATFORM_LANG_CODES
> > +	string "Language codes supported by firmware"
> > +	default "en-US"
> >   	help
> > -	  Provide the GetTime() runtime service at boottime. This service
> > -	  can be used by an EFI application to read the real time clock.
> > +	  This value is used to initialize the PlatformLangCodes variable. Its
> > +	  value is a semicolon (;) separated list of language codes in native
> > +	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > +	  to initialize the PlatformLang variable.
> > 
> > -config EFI_SET_TIME
> > -	bool "SetTime() runtime service"
> > -	depends on EFI_GET_TIME
> > -	default y if ARCH_QEMU || SANDBOX
> > -	help
> > -	  Provide the SetTime() runtime service at boottime. This service
> > -	  can be used by an EFI application to adjust the real time clock.
> > +endmenu
> > 
> > -config EFI_SCROLL_ON_CLEAR_SCREEN
> > -	bool "Avoid overwriting previous output on clear screen"
> > -	help
> > -	  Instead of erasing the screen content when the console screen should
> > -	  be cleared, emit blank new lines so that previous output is scrolled
> > -	  out of sight rather than overwritten. On serial consoles this allows
> > -	  to capture complete boot logs (except for interactive menus etc.)
> > -	  and can ease debugging related issues.
> > +menu "Capsule support"
> > 
> >   config EFI_HAVE_CAPSULE_SUPPORT
> >   	bool
> > @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
> >   	  embedded in the platform's device tree and used for capsule
> >   	  authentication at the time of capsule update.
> > 
> > +endmenu
> > +
> > +menu "UEFI protocol support"
> > +
> >   config EFI_DEVICE_PATH_TO_TEXT
> >   	bool "Device path to text protocol"
> >   	default y
> > @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
> > 
> >   endif
> > 
> > -config EFI_LOADER_BOUNCE_BUFFER
> > -	bool "EFI Applications use bounce buffers for DMA operations"
> > -	help
> > -	  Some hardware does not support DMA to full 64bit addresses. For this
> > -	  hardware we can create a bounce buffer so that payloads don't have to
> > -	  worry about platform details.
> > -
> > -config EFI_PLATFORM_LANG_CODES
> > -	string "Language codes supported by firmware"
> > -	default "en-US"
> > -	help
> > -	  This value is used to initialize the PlatformLangCodes variable. Its
> > -	  value is a semicolon (;) separated list of language codes in native
> > -	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > -	  to initialize the PlatformLang variable.
> > -
> > -config EFI_HAVE_RUNTIME_RESET
> > -	# bool "Reset runtime service is available"
> > -	bool
> > -	default y
> > -	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > -		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > -
> > -config EFI_GRUB_ARM32_WORKAROUND
> > -	bool "Workaround for GRUB on 32bit ARM"
> > -	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> > -	default y
> > -	depends on ARM && !ARM64
> > -	help
> > -	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
> > -	  workaround currently is also needed on systems with caches that
> > -	  cannot be managed via CP15.
> > -
> >   config EFI_RNG_PROTOCOL
> >   	bool "EFI_RNG_PROTOCOL support"
> >   	depends on DM_RNG
> > @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
> >   	  installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
> >   	  argument.
> > 
> > -config EFI_SECURE_BOOT
> > -	bool "Enable EFI secure boot support"
> > -	depends on EFI_LOADER && FIT_SIGNATURE
> > -	select HASH
> > -	select SHA256
> > -	select RSA
> > -	select RSA_VERIFY_WITH_PKEY
> > -	select IMAGE_SIGN_INFO
> > -	select ASYMMETRIC_KEY_TYPE
> > -	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > -	select X509_CERTIFICATE_PARSER
> > -	select PKCS7_MESSAGE_PARSER
> > -	select PKCS7_VERIFY
> > -	select MSCODE_PARSER
> > -	select EFI_SIGNATURE_SUPPORT
> > +config EFI_RISCV_BOOT_PROTOCOL
> > +	bool "RISCV_EFI_BOOT_PROTOCOL support"
> > +	default y
> > +	depends on RISCV
> >   	help
> > -	  Select this option to enable EFI secure boot support.
> > -	  Once SecureBoot mode is enforced, any EFI binary can run only if
> > -	  it is signed with a trusted key. To do that, you need to install,
> > -	  at least, PK, KEK and db.
> > +	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> > +	  to the next boot stage. It should be enabled as it is meant to
> > +	  replace the transfer via the device-tree. The latter is not
> > +	  possible on systems using ACPI.
> > 
> > -config EFI_SIGNATURE_SUPPORT
> > -	bool
> > +endmenu
> > +
> > +menu "Misc options"
> > +config EFI_LOADER_BOUNCE_BUFFER
> > +	bool "EFI Applications use bounce buffers for DMA operations"
> > +	depends on ARM64
> 
> Hello Ilias,
> 
> your merged patch revoked
> 
> dcd1b63b7072 ("efi_loader: allow EFI_LOADER_BOUNCE_BUFFER on all
> architectures")
> 
> which we need to fix problems on JH7110 boards with more than 4 GiB.
> 
> We need to add the revoked patch again.
> 

Can we do that as a "today" solution, and make EFI_LOADER_BOUNCE_BUFFER
disappear and just be enabled by BOUNCE_BUFFER for v2025.04 please?
Ilias Apalodimas Nov. 21, 2024, 2:05 p.m. UTC | #6
On Thu, 21 Nov 2024 at 16:02, Tom Rini <trini@konsulko.com> wrote:
>
> On Thu, Nov 21, 2024 at 02:53:53PM +0100, Heinrich Schuchardt wrote:
> > On 30.08.24 13:45, Ilias Apalodimas wrote:
> > > The EFI_LOADER and EFI config options are randomly scattered under lib/
> > > making it cumbersome to navigate and enable options, unless you really
> > > know what you are doing. On top of that the existing options are in
> > > random order instead of a logical one.
> > >
> > > So let's move things around a bit and move them under boot/. Present a
> > > generic UEFI entry where people can select Capsules, Protocols,
> > > Services,  and an option to compile U-Boot as an EFI for X86
> > >
> > > Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> > > ---
> > > Changes since v1:
> > > - Move the EFI Loader under boot/ instead of having it on the main menu
> > > - Fold in the U-Boot as an EFI app option under the new EFI menu
> > >   boot/Kconfig           |   2 +
> > >   lib/Kconfig            |   2 -
> > >   lib/efi/Kconfig        |   5 +
> > >   lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
> > >   4 files changed, 124 insertions(+), 89 deletions(-)
> > >
> > > diff --git a/boot/Kconfig b/boot/Kconfig
> > > index 940389d4882f..a1477eb8c7e1 100644
> > > --- a/boot/Kconfig
> > > +++ b/boot/Kconfig
> > > @@ -1,5 +1,7 @@
> > >   menu "Boot options"
> > >
> > > +source "lib/efi_loader/Kconfig"
> > > +
> > >   menu "Boot images"
> > >
> > >   config ANDROID_BOOT_IMAGE
> > > diff --git a/lib/Kconfig b/lib/Kconfig
> > > index 2059219a1207..06b4e9a73135 100644
> > > --- a/lib/Kconfig
> > > +++ b/lib/Kconfig
> > > @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
> > >     help
> > >       A simple parser for SMBIOS data.
> > >
> > > -source "lib/efi/Kconfig"
> > > -source "lib/efi_loader/Kconfig"
> > >   source "lib/optee/Kconfig"
> > >
> > >   config TEST_FDTDEC
> > > diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> > > index c2b9bb73f718..81ed3e66b34d 100644
> > > --- a/lib/efi/Kconfig
> > > +++ b/lib/efi/Kconfig
> > > @@ -1,3 +1,6 @@
> > > +menu "U-Boot as UEFI application"
> > > +   depends on X86
> > > +
> > >   config EFI
> > >     bool "Support running U-Boot from EFI"
> > >     depends on X86
> > > @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
> > >       use. U-Boot allocates this from EFI on start-up (along with a few
> > >       other smaller amounts) and it can never be increased after that.
> > >       It is used as the RAM size in with U-Boot.
> > > +
> > > +endmenu
> > > diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> > > index 6ffefa9103ff..0756be61d688 100644
> > > --- a/lib/efi_loader/Kconfig
> > > +++ b/lib/efi_loader/Kconfig
> > > @@ -1,3 +1,5 @@
> > > +menu "UEFI Support"
> > > +
> > >   config EFI_LOADER
> > >     bool "Support running UEFI applications"
> > >     depends on OF_LIBFDT && ( \
> > > @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
> > >       You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
> > >       command to do that.
> > >
> > > -config EFI_BOOTMGR
> > > -   bool "UEFI Boot Manager"
> > > +config EFI_SECURE_BOOT
> > > +   bool "Enable EFI secure boot support"
> > > +   depends on EFI_LOADER && FIT_SIGNATURE
> > > +   select HASH
> > > +   select SHA256
> > > +   select RSA
> > > +   select RSA_VERIFY_WITH_PKEY
> > > +   select IMAGE_SIGN_INFO
> > > +   select ASYMMETRIC_KEY_TYPE
> > > +   select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > > +   select X509_CERTIFICATE_PARSER
> > > +   select PKCS7_MESSAGE_PARSER
> > > +   select PKCS7_VERIFY
> > > +   select MSCODE_PARSER
> > > +   select EFI_SIGNATURE_SUPPORT
> > > +   help
> > > +     Select this option to enable EFI secure boot support.
> > > +     Once SecureBoot mode is enforced, any EFI binary can run only if
> > > +     it is signed with a trusted key. To do that, you need to install,
> > > +     at least, PK, KEK and db.
> > > +
> > > +config EFI_SIGNATURE_SUPPORT
> > > +   bool
> > > +
> > > +menu "UEFI services"
> > > +
> > > +config EFI_GET_TIME
> > > +   bool "GetTime() runtime service"
> > > +   depends on DM_RTC
> > >     default y
> > >     help
> > > -     Select this option if you want to select the UEFI binary to be booted
> > > -     via UEFI variables Boot####, BootOrder, and BootNext. You should also
> > > -     normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> > > +     Provide the GetTime() runtime service at boottime. This service
> > > +     can be used by an EFI application to read the real time clock.
> > > +
> > > +config EFI_SET_TIME
> > > +   bool "SetTime() runtime service"
> > > +   depends on EFI_GET_TIME
> > > +   default y if ARCH_QEMU || SANDBOX
> > > +   help
> > > +     Provide the SetTime() runtime service at boottime. This service
> > > +     can be used by an EFI application to adjust the real time clock.
> > > +
> > > +config EFI_HAVE_RUNTIME_RESET
> > > +   # bool "Reset runtime service is available"
> > > +   bool
> > > +   default y
> > > +   depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > > +              SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > > +
> > > +endmenu
> > > +
> > > +menu "UEFI Variables"
> > >
> > >   choice
> > >     prompt "Store for non-volatile UEFI variables"
> > > @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
> > >
> > >       Minimum 4096, default 131072
> > >
> > > -config EFI_GET_TIME
> > > -   bool "GetTime() runtime service"
> > > -   depends on DM_RTC
> > > -   default y
> > > +config EFI_PLATFORM_LANG_CODES
> > > +   string "Language codes supported by firmware"
> > > +   default "en-US"
> > >     help
> > > -     Provide the GetTime() runtime service at boottime. This service
> > > -     can be used by an EFI application to read the real time clock.
> > > +     This value is used to initialize the PlatformLangCodes variable. Its
> > > +     value is a semicolon (;) separated list of language codes in native
> > > +     RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > > +     to initialize the PlatformLang variable.
> > >
> > > -config EFI_SET_TIME
> > > -   bool "SetTime() runtime service"
> > > -   depends on EFI_GET_TIME
> > > -   default y if ARCH_QEMU || SANDBOX
> > > -   help
> > > -     Provide the SetTime() runtime service at boottime. This service
> > > -     can be used by an EFI application to adjust the real time clock.
> > > +endmenu
> > >
> > > -config EFI_SCROLL_ON_CLEAR_SCREEN
> > > -   bool "Avoid overwriting previous output on clear screen"
> > > -   help
> > > -     Instead of erasing the screen content when the console screen should
> > > -     be cleared, emit blank new lines so that previous output is scrolled
> > > -     out of sight rather than overwritten. On serial consoles this allows
> > > -     to capture complete boot logs (except for interactive menus etc.)
> > > -     and can ease debugging related issues.
> > > +menu "Capsule support"
> > >
> > >   config EFI_HAVE_CAPSULE_SUPPORT
> > >     bool
> > > @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
> > >       embedded in the platform's device tree and used for capsule
> > >       authentication at the time of capsule update.
> > >
> > > +endmenu
> > > +
> > > +menu "UEFI protocol support"
> > > +
> > >   config EFI_DEVICE_PATH_TO_TEXT
> > >     bool "Device path to text protocol"
> > >     default y
> > > @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
> > >
> > >   endif
> > >
> > > -config EFI_LOADER_BOUNCE_BUFFER
> > > -   bool "EFI Applications use bounce buffers for DMA operations"
> > > -   help
> > > -     Some hardware does not support DMA to full 64bit addresses. For this
> > > -     hardware we can create a bounce buffer so that payloads don't have to
> > > -     worry about platform details.
> > > -
> > > -config EFI_PLATFORM_LANG_CODES
> > > -   string "Language codes supported by firmware"
> > > -   default "en-US"
> > > -   help
> > > -     This value is used to initialize the PlatformLangCodes variable. Its
> > > -     value is a semicolon (;) separated list of language codes in native
> > > -     RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> > > -     to initialize the PlatformLang variable.
> > > -
> > > -config EFI_HAVE_RUNTIME_RESET
> > > -   # bool "Reset runtime service is available"
> > > -   bool
> > > -   default y
> > > -   depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> > > -              SANDBOX || SYSRESET_SBI || SYSRESET_X86
> > > -
> > > -config EFI_GRUB_ARM32_WORKAROUND
> > > -   bool "Workaround for GRUB on 32bit ARM"
> > > -   default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> > > -   default y
> > > -   depends on ARM && !ARM64
> > > -   help
> > > -     GRUB prior to version 2.04 requires U-Boot to disable caches. This
> > > -     workaround currently is also needed on systems with caches that
> > > -     cannot be managed via CP15.
> > > -
> > >   config EFI_RNG_PROTOCOL
> > >     bool "EFI_RNG_PROTOCOL support"
> > >     depends on DM_RNG
> > > @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
> > >       installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
> > >       argument.
> > >
> > > -config EFI_SECURE_BOOT
> > > -   bool "Enable EFI secure boot support"
> > > -   depends on EFI_LOADER && FIT_SIGNATURE
> > > -   select HASH
> > > -   select SHA256
> > > -   select RSA
> > > -   select RSA_VERIFY_WITH_PKEY
> > > -   select IMAGE_SIGN_INFO
> > > -   select ASYMMETRIC_KEY_TYPE
> > > -   select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> > > -   select X509_CERTIFICATE_PARSER
> > > -   select PKCS7_MESSAGE_PARSER
> > > -   select PKCS7_VERIFY
> > > -   select MSCODE_PARSER
> > > -   select EFI_SIGNATURE_SUPPORT
> > > +config EFI_RISCV_BOOT_PROTOCOL
> > > +   bool "RISCV_EFI_BOOT_PROTOCOL support"
> > > +   default y
> > > +   depends on RISCV
> > >     help
> > > -     Select this option to enable EFI secure boot support.
> > > -     Once SecureBoot mode is enforced, any EFI binary can run only if
> > > -     it is signed with a trusted key. To do that, you need to install,
> > > -     at least, PK, KEK and db.
> > > +     The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> > > +     to the next boot stage. It should be enabled as it is meant to
> > > +     replace the transfer via the device-tree. The latter is not
> > > +     possible on systems using ACPI.
> > >
> > > -config EFI_SIGNATURE_SUPPORT
> > > -   bool
> > > +endmenu
> > > +
> > > +menu "Misc options"
> > > +config EFI_LOADER_BOUNCE_BUFFER
> > > +   bool "EFI Applications use bounce buffers for DMA operations"
> > > +   depends on ARM64
> >
> > Hello Ilias,
> >
> > your merged patch revoked
> >
> > dcd1b63b7072 ("efi_loader: allow EFI_LOADER_BOUNCE_BUFFER on all
> > architectures")
> >
> > which we need to fix problems on JH7110 boards with more than 4 GiB.
> >
> > We need to add the revoked patch again.
> >
>
> Can we do that as a "today" solution, and make EFI_LOADER_BOUNCE_BUFFER
> disappear and just be enabled by BOUNCE_BUFFER for v2025.04 please?

Sure I'll send the patch in a bit

Thanks
/Ilias
>
> --
> Tom
Heinrich Schuchardt Nov. 21, 2024, 2:14 p.m. UTC | #7
On 21.11.24 15:01, Tom Rini wrote:
> On Thu, Nov 21, 2024 at 02:53:53PM +0100, Heinrich Schuchardt wrote:
>> On 30.08.24 13:45, Ilias Apalodimas wrote:
>>> The EFI_LOADER and EFI config options are randomly scattered under lib/
>>> making it cumbersome to navigate and enable options, unless you really
>>> know what you are doing. On top of that the existing options are in
>>> random order instead of a logical one.
>>>
>>> So let's move things around a bit and move them under boot/. Present a
>>> generic UEFI entry where people can select Capsules, Protocols,
>>> Services,  and an option to compile U-Boot as an EFI for X86
>>>
>>> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>>> ---
>>> Changes since v1:
>>> - Move the EFI Loader under boot/ instead of having it on the main menu
>>> - Fold in the U-Boot as an EFI app option under the new EFI menu
>>>    boot/Kconfig           |   2 +
>>>    lib/Kconfig            |   2 -
>>>    lib/efi/Kconfig        |   5 +
>>>    lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
>>>    4 files changed, 124 insertions(+), 89 deletions(-)
>>>
>>> diff --git a/boot/Kconfig b/boot/Kconfig
>>> index 940389d4882f..a1477eb8c7e1 100644
>>> --- a/boot/Kconfig
>>> +++ b/boot/Kconfig
>>> @@ -1,5 +1,7 @@
>>>    menu "Boot options"
>>>
>>> +source "lib/efi_loader/Kconfig"
>>> +
>>>    menu "Boot images"
>>>
>>>    config ANDROID_BOOT_IMAGE
>>> diff --git a/lib/Kconfig b/lib/Kconfig
>>> index 2059219a1207..06b4e9a73135 100644
>>> --- a/lib/Kconfig
>>> +++ b/lib/Kconfig
>>> @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
>>>    	help
>>>    	  A simple parser for SMBIOS data.
>>>
>>> -source "lib/efi/Kconfig"
>>> -source "lib/efi_loader/Kconfig"
>>>    source "lib/optee/Kconfig"
>>>
>>>    config TEST_FDTDEC
>>> diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
>>> index c2b9bb73f718..81ed3e66b34d 100644
>>> --- a/lib/efi/Kconfig
>>> +++ b/lib/efi/Kconfig
>>> @@ -1,3 +1,6 @@
>>> +menu "U-Boot as UEFI application"
>>> +	depends on X86
>>> +
>>>    config EFI
>>>    	bool "Support running U-Boot from EFI"
>>>    	depends on X86
>>> @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
>>>    	  use. U-Boot allocates this from EFI on start-up (along with a few
>>>    	  other smaller amounts) and it can never be increased after that.
>>>    	  It is used as the RAM size in with U-Boot.
>>> +
>>> +endmenu
>>> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
>>> index 6ffefa9103ff..0756be61d688 100644
>>> --- a/lib/efi_loader/Kconfig
>>> +++ b/lib/efi_loader/Kconfig
>>> @@ -1,3 +1,5 @@
>>> +menu "UEFI Support"
>>> +
>>>    config EFI_LOADER
>>>    	bool "Support running UEFI applications"
>>>    	depends on OF_LIBFDT && ( \
>>> @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
>>>    	  You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
>>>    	  command to do that.
>>>
>>> -config EFI_BOOTMGR
>>> -	bool "UEFI Boot Manager"
>>> +config EFI_SECURE_BOOT
>>> +	bool "Enable EFI secure boot support"
>>> +	depends on EFI_LOADER && FIT_SIGNATURE
>>> +	select HASH
>>> +	select SHA256
>>> +	select RSA
>>> +	select RSA_VERIFY_WITH_PKEY
>>> +	select IMAGE_SIGN_INFO
>>> +	select ASYMMETRIC_KEY_TYPE
>>> +	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
>>> +	select X509_CERTIFICATE_PARSER
>>> +	select PKCS7_MESSAGE_PARSER
>>> +	select PKCS7_VERIFY
>>> +	select MSCODE_PARSER
>>> +	select EFI_SIGNATURE_SUPPORT
>>> +	help
>>> +	  Select this option to enable EFI secure boot support.
>>> +	  Once SecureBoot mode is enforced, any EFI binary can run only if
>>> +	  it is signed with a trusted key. To do that, you need to install,
>>> +	  at least, PK, KEK and db.
>>> +
>>> +config EFI_SIGNATURE_SUPPORT
>>> +	bool
>>> +
>>> +menu "UEFI services"
>>> +
>>> +config EFI_GET_TIME
>>> +	bool "GetTime() runtime service"
>>> +	depends on DM_RTC
>>>    	default y
>>>    	help
>>> -	  Select this option if you want to select the UEFI binary to be booted
>>> -	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
>>> -	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
>>> +	  Provide the GetTime() runtime service at boottime. This service
>>> +	  can be used by an EFI application to read the real time clock.
>>> +
>>> +config EFI_SET_TIME
>>> +	bool "SetTime() runtime service"
>>> +	depends on EFI_GET_TIME
>>> +	default y if ARCH_QEMU || SANDBOX
>>> +	help
>>> +	  Provide the SetTime() runtime service at boottime. This service
>>> +	  can be used by an EFI application to adjust the real time clock.
>>> +
>>> +config EFI_HAVE_RUNTIME_RESET
>>> +	# bool "Reset runtime service is available"
>>> +	bool
>>> +	default y
>>> +	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
>>> +		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
>>> +
>>> +endmenu
>>> +
>>> +menu "UEFI Variables"
>>>
>>>    choice
>>>    	prompt "Store for non-volatile UEFI variables"
>>> @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
>>>
>>>    	  Minimum 4096, default 131072
>>>
>>> -config EFI_GET_TIME
>>> -	bool "GetTime() runtime service"
>>> -	depends on DM_RTC
>>> -	default y
>>> +config EFI_PLATFORM_LANG_CODES
>>> +	string "Language codes supported by firmware"
>>> +	default "en-US"
>>>    	help
>>> -	  Provide the GetTime() runtime service at boottime. This service
>>> -	  can be used by an EFI application to read the real time clock.
>>> +	  This value is used to initialize the PlatformLangCodes variable. Its
>>> +	  value is a semicolon (;) separated list of language codes in native
>>> +	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
>>> +	  to initialize the PlatformLang variable.
>>>
>>> -config EFI_SET_TIME
>>> -	bool "SetTime() runtime service"
>>> -	depends on EFI_GET_TIME
>>> -	default y if ARCH_QEMU || SANDBOX
>>> -	help
>>> -	  Provide the SetTime() runtime service at boottime. This service
>>> -	  can be used by an EFI application to adjust the real time clock.
>>> +endmenu
>>>
>>> -config EFI_SCROLL_ON_CLEAR_SCREEN
>>> -	bool "Avoid overwriting previous output on clear screen"
>>> -	help
>>> -	  Instead of erasing the screen content when the console screen should
>>> -	  be cleared, emit blank new lines so that previous output is scrolled
>>> -	  out of sight rather than overwritten. On serial consoles this allows
>>> -	  to capture complete boot logs (except for interactive menus etc.)
>>> -	  and can ease debugging related issues.
>>> +menu "Capsule support"
>>>
>>>    config EFI_HAVE_CAPSULE_SUPPORT
>>>    	bool
>>> @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
>>>    	  embedded in the platform's device tree and used for capsule
>>>    	  authentication at the time of capsule update.
>>>
>>> +endmenu
>>> +
>>> +menu "UEFI protocol support"
>>> +
>>>    config EFI_DEVICE_PATH_TO_TEXT
>>>    	bool "Device path to text protocol"
>>>    	default y
>>> @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
>>>
>>>    endif
>>>
>>> -config EFI_LOADER_BOUNCE_BUFFER
>>> -	bool "EFI Applications use bounce buffers for DMA operations"
>>> -	help
>>> -	  Some hardware does not support DMA to full 64bit addresses. For this
>>> -	  hardware we can create a bounce buffer so that payloads don't have to
>>> -	  worry about platform details.
>>> -
>>> -config EFI_PLATFORM_LANG_CODES
>>> -	string "Language codes supported by firmware"
>>> -	default "en-US"
>>> -	help
>>> -	  This value is used to initialize the PlatformLangCodes variable. Its
>>> -	  value is a semicolon (;) separated list of language codes in native
>>> -	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
>>> -	  to initialize the PlatformLang variable.
>>> -
>>> -config EFI_HAVE_RUNTIME_RESET
>>> -	# bool "Reset runtime service is available"
>>> -	bool
>>> -	default y
>>> -	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
>>> -		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
>>> -
>>> -config EFI_GRUB_ARM32_WORKAROUND
>>> -	bool "Workaround for GRUB on 32bit ARM"
>>> -	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
>>> -	default y
>>> -	depends on ARM && !ARM64
>>> -	help
>>> -	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
>>> -	  workaround currently is also needed on systems with caches that
>>> -	  cannot be managed via CP15.
>>> -
>>>    config EFI_RNG_PROTOCOL
>>>    	bool "EFI_RNG_PROTOCOL support"
>>>    	depends on DM_RNG
>>> @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
>>>    	  installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
>>>    	  argument.
>>>
>>> -config EFI_SECURE_BOOT
>>> -	bool "Enable EFI secure boot support"
>>> -	depends on EFI_LOADER && FIT_SIGNATURE
>>> -	select HASH
>>> -	select SHA256
>>> -	select RSA
>>> -	select RSA_VERIFY_WITH_PKEY
>>> -	select IMAGE_SIGN_INFO
>>> -	select ASYMMETRIC_KEY_TYPE
>>> -	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
>>> -	select X509_CERTIFICATE_PARSER
>>> -	select PKCS7_MESSAGE_PARSER
>>> -	select PKCS7_VERIFY
>>> -	select MSCODE_PARSER
>>> -	select EFI_SIGNATURE_SUPPORT
>>> +config EFI_RISCV_BOOT_PROTOCOL
>>> +	bool "RISCV_EFI_BOOT_PROTOCOL support"
>>> +	default y
>>> +	depends on RISCV
>>>    	help
>>> -	  Select this option to enable EFI secure boot support.
>>> -	  Once SecureBoot mode is enforced, any EFI binary can run only if
>>> -	  it is signed with a trusted key. To do that, you need to install,
>>> -	  at least, PK, KEK and db.
>>> +	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
>>> +	  to the next boot stage. It should be enabled as it is meant to
>>> +	  replace the transfer via the device-tree. The latter is not
>>> +	  possible on systems using ACPI.
>>>
>>> -config EFI_SIGNATURE_SUPPORT
>>> -	bool
>>> +endmenu
>>> +
>>> +menu "Misc options"
>>> +config EFI_LOADER_BOUNCE_BUFFER
>>> +	bool "EFI Applications use bounce buffers for DMA operations"
>>> +	depends on ARM64
>>
>> Hello Ilias,
>>
>> your merged patch revoked
>>
>> dcd1b63b7072 ("efi_loader: allow EFI_LOADER_BOUNCE_BUFFER on all
>> architectures")
>>
>> which we need to fix problems on JH7110 boards with more than 4 GiB.
>>
>> We need to add the revoked patch again.
>>
>
> Can we do that as a "today" solution, and make EFI_LOADER_BOUNCE_BUFFER
> disappear and just be enabled by BOUNCE_BUFFER for v2025.04 please?
>

As discussed with Simon the implementation of a bounce buffer should
only exist in the block device layer and not in the UEFI sub-system. We
should strive to make that change with the April release.

But as off today JH7110 board with more than 4 GiB fail to boot without
this setting.

Best regards

Heinrich
Sughosh Ganu Nov. 21, 2024, 6:47 p.m. UTC | #8
On Thu, 21 Nov 2024 at 19:44, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> On 21.11.24 15:01, Tom Rini wrote:
> > On Thu, Nov 21, 2024 at 02:53:53PM +0100, Heinrich Schuchardt wrote:
> >> On 30.08.24 13:45, Ilias Apalodimas wrote:
> >>> The EFI_LOADER and EFI config options are randomly scattered under lib/
> >>> making it cumbersome to navigate and enable options, unless you really
> >>> know what you are doing. On top of that the existing options are in
> >>> random order instead of a logical one.
> >>>
> >>> So let's move things around a bit and move them under boot/. Present a
> >>> generic UEFI entry where people can select Capsules, Protocols,
> >>> Services,  and an option to compile U-Boot as an EFI for X86
> >>>
> >>> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> >>> ---
> >>> Changes since v1:
> >>> - Move the EFI Loader under boot/ instead of having it on the main menu
> >>> - Fold in the U-Boot as an EFI app option under the new EFI menu
> >>>    boot/Kconfig           |   2 +
> >>>    lib/Kconfig            |   2 -
> >>>    lib/efi/Kconfig        |   5 +
> >>>    lib/efi_loader/Kconfig | 204 +++++++++++++++++++++++------------------
> >>>    4 files changed, 124 insertions(+), 89 deletions(-)
> >>>
> >>> diff --git a/boot/Kconfig b/boot/Kconfig
> >>> index 940389d4882f..a1477eb8c7e1 100644
> >>> --- a/boot/Kconfig
> >>> +++ b/boot/Kconfig
> >>> @@ -1,5 +1,7 @@
> >>>    menu "Boot options"
> >>>
> >>> +source "lib/efi_loader/Kconfig"
> >>> +
> >>>    menu "Boot images"
> >>>
> >>>    config ANDROID_BOOT_IMAGE
> >>> diff --git a/lib/Kconfig b/lib/Kconfig
> >>> index 2059219a1207..06b4e9a73135 100644
> >>> --- a/lib/Kconfig
> >>> +++ b/lib/Kconfig
> >>> @@ -1081,8 +1081,6 @@ config SMBIOS_PARSER
> >>>     help
> >>>       A simple parser for SMBIOS data.
> >>>
> >>> -source "lib/efi/Kconfig"
> >>> -source "lib/efi_loader/Kconfig"
> >>>    source "lib/optee/Kconfig"
> >>>
> >>>    config TEST_FDTDEC
> >>> diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
> >>> index c2b9bb73f718..81ed3e66b34d 100644
> >>> --- a/lib/efi/Kconfig
> >>> +++ b/lib/efi/Kconfig
> >>> @@ -1,3 +1,6 @@
> >>> +menu "U-Boot as UEFI application"
> >>> +   depends on X86
> >>> +
> >>>    config EFI
> >>>     bool "Support running U-Boot from EFI"
> >>>     depends on X86
> >>> @@ -72,3 +75,5 @@ config EFI_RAM_SIZE
> >>>       use. U-Boot allocates this from EFI on start-up (along with a few
> >>>       other smaller amounts) and it can never be increased after that.
> >>>       It is used as the RAM size in with U-Boot.
> >>> +
> >>> +endmenu
> >>> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> >>> index 6ffefa9103ff..0756be61d688 100644
> >>> --- a/lib/efi_loader/Kconfig
> >>> +++ b/lib/efi_loader/Kconfig
> >>> @@ -1,3 +1,5 @@
> >>> +menu "UEFI Support"
> >>> +
> >>>    config EFI_LOADER
> >>>     bool "Support running UEFI applications"
> >>>     depends on OF_LIBFDT && ( \
> >>> @@ -41,13 +43,58 @@ config EFI_BINARY_EXEC
> >>>       You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
> >>>       command to do that.
> >>>
> >>> -config EFI_BOOTMGR
> >>> -   bool "UEFI Boot Manager"
> >>> +config EFI_SECURE_BOOT
> >>> +   bool "Enable EFI secure boot support"
> >>> +   depends on EFI_LOADER && FIT_SIGNATURE
> >>> +   select HASH
> >>> +   select SHA256
> >>> +   select RSA
> >>> +   select RSA_VERIFY_WITH_PKEY
> >>> +   select IMAGE_SIGN_INFO
> >>> +   select ASYMMETRIC_KEY_TYPE
> >>> +   select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> >>> +   select X509_CERTIFICATE_PARSER
> >>> +   select PKCS7_MESSAGE_PARSER
> >>> +   select PKCS7_VERIFY
> >>> +   select MSCODE_PARSER
> >>> +   select EFI_SIGNATURE_SUPPORT
> >>> +   help
> >>> +     Select this option to enable EFI secure boot support.
> >>> +     Once SecureBoot mode is enforced, any EFI binary can run only if
> >>> +     it is signed with a trusted key. To do that, you need to install,
> >>> +     at least, PK, KEK and db.
> >>> +
> >>> +config EFI_SIGNATURE_SUPPORT
> >>> +   bool
> >>> +
> >>> +menu "UEFI services"
> >>> +
> >>> +config EFI_GET_TIME
> >>> +   bool "GetTime() runtime service"
> >>> +   depends on DM_RTC
> >>>     default y
> >>>     help
> >>> -     Select this option if you want to select the UEFI binary to be booted
> >>> -     via UEFI variables Boot####, BootOrder, and BootNext. You should also
> >>> -     normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
> >>> +     Provide the GetTime() runtime service at boottime. This service
> >>> +     can be used by an EFI application to read the real time clock.
> >>> +
> >>> +config EFI_SET_TIME
> >>> +   bool "SetTime() runtime service"
> >>> +   depends on EFI_GET_TIME
> >>> +   default y if ARCH_QEMU || SANDBOX
> >>> +   help
> >>> +     Provide the SetTime() runtime service at boottime. This service
> >>> +     can be used by an EFI application to adjust the real time clock.
> >>> +
> >>> +config EFI_HAVE_RUNTIME_RESET
> >>> +   # bool "Reset runtime service is available"
> >>> +   bool
> >>> +   default y
> >>> +   depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> >>> +              SANDBOX || SYSRESET_SBI || SYSRESET_X86
> >>> +
> >>> +endmenu
> >>> +
> >>> +menu "UEFI Variables"
> >>>
> >>>    choice
> >>>     prompt "Store for non-volatile UEFI variables"
> >>> @@ -172,30 +219,18 @@ config EFI_VAR_BUF_SIZE
> >>>
> >>>       Minimum 4096, default 131072
> >>>
> >>> -config EFI_GET_TIME
> >>> -   bool "GetTime() runtime service"
> >>> -   depends on DM_RTC
> >>> -   default y
> >>> +config EFI_PLATFORM_LANG_CODES
> >>> +   string "Language codes supported by firmware"
> >>> +   default "en-US"
> >>>     help
> >>> -     Provide the GetTime() runtime service at boottime. This service
> >>> -     can be used by an EFI application to read the real time clock.
> >>> +     This value is used to initialize the PlatformLangCodes variable. Its
> >>> +     value is a semicolon (;) separated list of language codes in native
> >>> +     RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> >>> +     to initialize the PlatformLang variable.
> >>>
> >>> -config EFI_SET_TIME
> >>> -   bool "SetTime() runtime service"
> >>> -   depends on EFI_GET_TIME
> >>> -   default y if ARCH_QEMU || SANDBOX
> >>> -   help
> >>> -     Provide the SetTime() runtime service at boottime. This service
> >>> -     can be used by an EFI application to adjust the real time clock.
> >>> +endmenu
> >>>
> >>> -config EFI_SCROLL_ON_CLEAR_SCREEN
> >>> -   bool "Avoid overwriting previous output on clear screen"
> >>> -   help
> >>> -     Instead of erasing the screen content when the console screen should
> >>> -     be cleared, emit blank new lines so that previous output is scrolled
> >>> -     out of sight rather than overwritten. On serial consoles this allows
> >>> -     to capture complete boot logs (except for interactive menus etc.)
> >>> -     and can ease debugging related issues.
> >>> +menu "Capsule support"
> >>>
> >>>    config EFI_HAVE_CAPSULE_SUPPORT
> >>>     bool
> >>> @@ -309,6 +344,10 @@ config EFI_CAPSULE_CRT_FILE
> >>>       embedded in the platform's device tree and used for capsule
> >>>       authentication at the time of capsule update.
> >>>
> >>> +endmenu
> >>> +
> >>> +menu "UEFI protocol support"
> >>> +
> >>>    config EFI_DEVICE_PATH_TO_TEXT
> >>>     bool "Device path to text protocol"
> >>>     default y
> >>> @@ -362,39 +401,6 @@ config EFI_UNICODE_CAPITALIZATION
> >>>
> >>>    endif
> >>>
> >>> -config EFI_LOADER_BOUNCE_BUFFER
> >>> -   bool "EFI Applications use bounce buffers for DMA operations"
> >>> -   help
> >>> -     Some hardware does not support DMA to full 64bit addresses. For this
> >>> -     hardware we can create a bounce buffer so that payloads don't have to
> >>> -     worry about platform details.
> >>> -
> >>> -config EFI_PLATFORM_LANG_CODES
> >>> -   string "Language codes supported by firmware"
> >>> -   default "en-US"
> >>> -   help
> >>> -     This value is used to initialize the PlatformLangCodes variable. Its
> >>> -     value is a semicolon (;) separated list of language codes in native
> >>> -     RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
> >>> -     to initialize the PlatformLang variable.
> >>> -
> >>> -config EFI_HAVE_RUNTIME_RESET
> >>> -   # bool "Reset runtime service is available"
> >>> -   bool
> >>> -   default y
> >>> -   depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
> >>> -              SANDBOX || SYSRESET_SBI || SYSRESET_X86
> >>> -
> >>> -config EFI_GRUB_ARM32_WORKAROUND
> >>> -   bool "Workaround for GRUB on 32bit ARM"
> >>> -   default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
> >>> -   default y
> >>> -   depends on ARM && !ARM64
> >>> -   help
> >>> -     GRUB prior to version 2.04 requires U-Boot to disable caches. This
> >>> -     workaround currently is also needed on systems with caches that
> >>> -     cannot be managed via CP15.
> >>> -
> >>>    config EFI_RNG_PROTOCOL
> >>>     bool "EFI_RNG_PROTOCOL support"
> >>>     depends on DM_RNG
> >>> @@ -447,29 +453,36 @@ config EFI_LOAD_FILE2_INITRD
> >>>       installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
> >>>       argument.
> >>>
> >>> -config EFI_SECURE_BOOT
> >>> -   bool "Enable EFI secure boot support"
> >>> -   depends on EFI_LOADER && FIT_SIGNATURE
> >>> -   select HASH
> >>> -   select SHA256
> >>> -   select RSA
> >>> -   select RSA_VERIFY_WITH_PKEY
> >>> -   select IMAGE_SIGN_INFO
> >>> -   select ASYMMETRIC_KEY_TYPE
> >>> -   select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
> >>> -   select X509_CERTIFICATE_PARSER
> >>> -   select PKCS7_MESSAGE_PARSER
> >>> -   select PKCS7_VERIFY
> >>> -   select MSCODE_PARSER
> >>> -   select EFI_SIGNATURE_SUPPORT
> >>> +config EFI_RISCV_BOOT_PROTOCOL
> >>> +   bool "RISCV_EFI_BOOT_PROTOCOL support"
> >>> +   default y
> >>> +   depends on RISCV
> >>>     help
> >>> -     Select this option to enable EFI secure boot support.
> >>> -     Once SecureBoot mode is enforced, any EFI binary can run only if
> >>> -     it is signed with a trusted key. To do that, you need to install,
> >>> -     at least, PK, KEK and db.
> >>> +     The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
> >>> +     to the next boot stage. It should be enabled as it is meant to
> >>> +     replace the transfer via the device-tree. The latter is not
> >>> +     possible on systems using ACPI.
> >>>
> >>> -config EFI_SIGNATURE_SUPPORT
> >>> -   bool
> >>> +endmenu
> >>> +
> >>> +menu "Misc options"
> >>> +config EFI_LOADER_BOUNCE_BUFFER
> >>> +   bool "EFI Applications use bounce buffers for DMA operations"
> >>> +   depends on ARM64
> >>
> >> Hello Ilias,
> >>
> >> your merged patch revoked
> >>
> >> dcd1b63b7072 ("efi_loader: allow EFI_LOADER_BOUNCE_BUFFER on all
> >> architectures")
> >>
> >> which we need to fix problems on JH7110 boards with more than 4 GiB.
> >>
> >> We need to add the revoked patch again.
> >>
> >
> > Can we do that as a "today" solution, and make EFI_LOADER_BOUNCE_BUFFER
> > disappear and just be enabled by BOUNCE_BUFFER for v2025.04 please?
> >
>
> As discussed with Simon the implementation of a bounce buffer should
> only exist in the block device layer and not in the UEFI sub-system. We
> should strive to make that change with the April release.
>
> But as off today JH7110 board with more than 4 GiB fail to boot without
> this setting.

Also, another thing to check (probably with respective board
maintainers) would be if we can remove the ram_top restriction on
jh7110 boards. There is a comment in arch/riscv/cpu/jh7110/dram.c that
the ram_top limit is to get 32 bit DMA capable devices to work. But
that should not be an issue with bounce buffers enabled?

-sughosh

>
> Best regards
>
> Heinrich
diff mbox series

Patch

diff --git a/boot/Kconfig b/boot/Kconfig
index 940389d4882f..a1477eb8c7e1 100644
--- a/boot/Kconfig
+++ b/boot/Kconfig
@@ -1,5 +1,7 @@ 
 menu "Boot options"

+source "lib/efi_loader/Kconfig"
+
 menu "Boot images"

 config ANDROID_BOOT_IMAGE
diff --git a/lib/Kconfig b/lib/Kconfig
index 2059219a1207..06b4e9a73135 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -1081,8 +1081,6 @@  config SMBIOS_PARSER
 	help
 	  A simple parser for SMBIOS data.

-source "lib/efi/Kconfig"
-source "lib/efi_loader/Kconfig"
 source "lib/optee/Kconfig"

 config TEST_FDTDEC
diff --git a/lib/efi/Kconfig b/lib/efi/Kconfig
index c2b9bb73f718..81ed3e66b34d 100644
--- a/lib/efi/Kconfig
+++ b/lib/efi/Kconfig
@@ -1,3 +1,6 @@ 
+menu "U-Boot as UEFI application"
+	depends on X86
+
 config EFI
 	bool "Support running U-Boot from EFI"
 	depends on X86
@@ -72,3 +75,5 @@  config EFI_RAM_SIZE
 	  use. U-Boot allocates this from EFI on start-up (along with a few
 	  other smaller amounts) and it can never be increased after that.
 	  It is used as the RAM size in with U-Boot.
+
+endmenu
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 6ffefa9103ff..0756be61d688 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -1,3 +1,5 @@ 
+menu "UEFI Support"
+
 config EFI_LOADER
 	bool "Support running UEFI applications"
 	depends on OF_LIBFDT && ( \
@@ -41,13 +43,58 @@  config EFI_BINARY_EXEC
 	  You may enable CMD_BOOTEFI_BINARY so that you can use bootefi
 	  command to do that.

-config EFI_BOOTMGR
-	bool "UEFI Boot Manager"
+config EFI_SECURE_BOOT
+	bool "Enable EFI secure boot support"
+	depends on EFI_LOADER && FIT_SIGNATURE
+	select HASH
+	select SHA256
+	select RSA
+	select RSA_VERIFY_WITH_PKEY
+	select IMAGE_SIGN_INFO
+	select ASYMMETRIC_KEY_TYPE
+	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+	select X509_CERTIFICATE_PARSER
+	select PKCS7_MESSAGE_PARSER
+	select PKCS7_VERIFY
+	select MSCODE_PARSER
+	select EFI_SIGNATURE_SUPPORT
+	help
+	  Select this option to enable EFI secure boot support.
+	  Once SecureBoot mode is enforced, any EFI binary can run only if
+	  it is signed with a trusted key. To do that, you need to install,
+	  at least, PK, KEK and db.
+
+config EFI_SIGNATURE_SUPPORT
+	bool
+
+menu "UEFI services"
+
+config EFI_GET_TIME
+	bool "GetTime() runtime service"
+	depends on DM_RTC
 	default y
 	help
-	  Select this option if you want to select the UEFI binary to be booted
-	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
-	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.
+	  Provide the GetTime() runtime service at boottime. This service
+	  can be used by an EFI application to read the real time clock.
+
+config EFI_SET_TIME
+	bool "SetTime() runtime service"
+	depends on EFI_GET_TIME
+	default y if ARCH_QEMU || SANDBOX
+	help
+	  Provide the SetTime() runtime service at boottime. This service
+	  can be used by an EFI application to adjust the real time clock.
+
+config EFI_HAVE_RUNTIME_RESET
+	# bool "Reset runtime service is available"
+	bool
+	default y
+	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
+		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
+
+endmenu
+
+menu "UEFI Variables"

 choice
 	prompt "Store for non-volatile UEFI variables"
@@ -172,30 +219,18 @@  config EFI_VAR_BUF_SIZE

 	  Minimum 4096, default 131072

-config EFI_GET_TIME
-	bool "GetTime() runtime service"
-	depends on DM_RTC
-	default y
+config EFI_PLATFORM_LANG_CODES
+	string "Language codes supported by firmware"
+	default "en-US"
 	help
-	  Provide the GetTime() runtime service at boottime. This service
-	  can be used by an EFI application to read the real time clock.
+	  This value is used to initialize the PlatformLangCodes variable. Its
+	  value is a semicolon (;) separated list of language codes in native
+	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
+	  to initialize the PlatformLang variable.

-config EFI_SET_TIME
-	bool "SetTime() runtime service"
-	depends on EFI_GET_TIME
-	default y if ARCH_QEMU || SANDBOX
-	help
-	  Provide the SetTime() runtime service at boottime. This service
-	  can be used by an EFI application to adjust the real time clock.
+endmenu

-config EFI_SCROLL_ON_CLEAR_SCREEN
-	bool "Avoid overwriting previous output on clear screen"
-	help
-	  Instead of erasing the screen content when the console screen should
-	  be cleared, emit blank new lines so that previous output is scrolled
-	  out of sight rather than overwritten. On serial consoles this allows
-	  to capture complete boot logs (except for interactive menus etc.)
-	  and can ease debugging related issues.
+menu "Capsule support"

 config EFI_HAVE_CAPSULE_SUPPORT
 	bool
@@ -309,6 +344,10 @@  config EFI_CAPSULE_CRT_FILE
 	  embedded in the platform's device tree and used for capsule
 	  authentication at the time of capsule update.

+endmenu
+
+menu "UEFI protocol support"
+
 config EFI_DEVICE_PATH_TO_TEXT
 	bool "Device path to text protocol"
 	default y
@@ -362,39 +401,6 @@  config EFI_UNICODE_CAPITALIZATION

 endif

-config EFI_LOADER_BOUNCE_BUFFER
-	bool "EFI Applications use bounce buffers for DMA operations"
-	help
-	  Some hardware does not support DMA to full 64bit addresses. For this
-	  hardware we can create a bounce buffer so that payloads don't have to
-	  worry about platform details.
-
-config EFI_PLATFORM_LANG_CODES
-	string "Language codes supported by firmware"
-	default "en-US"
-	help
-	  This value is used to initialize the PlatformLangCodes variable. Its
-	  value is a semicolon (;) separated list of language codes in native
-	  RFC 4646 format, e.g. "en-US;de-DE". The first language code is used
-	  to initialize the PlatformLang variable.
-
-config EFI_HAVE_RUNTIME_RESET
-	# bool "Reset runtime service is available"
-	bool
-	default y
-	depends on ARCH_BCM283X || FSL_LAYERSCAPE || PSCI_RESET || \
-		   SANDBOX || SYSRESET_SBI || SYSRESET_X86
-
-config EFI_GRUB_ARM32_WORKAROUND
-	bool "Workaround for GRUB on 32bit ARM"
-	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
-	default y
-	depends on ARM && !ARM64
-	help
-	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
-	  workaround currently is also needed on systems with caches that
-	  cannot be managed via CP15.
-
 config EFI_RNG_PROTOCOL
 	bool "EFI_RNG_PROTOCOL support"
 	depends on DM_RNG
@@ -447,29 +453,36 @@  config EFI_LOAD_FILE2_INITRD
 	  installed and Linux 5.7+ will ignore any initrd=<ramdisk> command line
 	  argument.

-config EFI_SECURE_BOOT
-	bool "Enable EFI secure boot support"
-	depends on EFI_LOADER && FIT_SIGNATURE
-	select HASH
-	select SHA256
-	select RSA
-	select RSA_VERIFY_WITH_PKEY
-	select IMAGE_SIGN_INFO
-	select ASYMMETRIC_KEY_TYPE
-	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
-	select X509_CERTIFICATE_PARSER
-	select PKCS7_MESSAGE_PARSER
-	select PKCS7_VERIFY
-	select MSCODE_PARSER
-	select EFI_SIGNATURE_SUPPORT
+config EFI_RISCV_BOOT_PROTOCOL
+	bool "RISCV_EFI_BOOT_PROTOCOL support"
+	default y
+	depends on RISCV
 	help
-	  Select this option to enable EFI secure boot support.
-	  Once SecureBoot mode is enforced, any EFI binary can run only if
-	  it is signed with a trusted key. To do that, you need to install,
-	  at least, PK, KEK and db.
+	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
+	  to the next boot stage. It should be enabled as it is meant to
+	  replace the transfer via the device-tree. The latter is not
+	  possible on systems using ACPI.

-config EFI_SIGNATURE_SUPPORT
-	bool
+endmenu
+
+menu "Misc options"
+config EFI_LOADER_BOUNCE_BUFFER
+	bool "EFI Applications use bounce buffers for DMA operations"
+	depends on ARM64
+	help
+	  Some hardware does not support DMA to full 64bit addresses. For this
+	  hardware we can create a bounce buffer so that payloads don't have to
+	  worry about platform details.
+
+config EFI_GRUB_ARM32_WORKAROUND
+	bool "Workaround for GRUB on 32bit ARM"
+	default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
+	default y
+	depends on ARM && !ARM64
+	help
+	  GRUB prior to version 2.04 requires U-Boot to disable caches. This
+	  workaround currently is also needed on systems with caches that
+	  cannot be managed via CP15.

 config EFI_ESRT
 	bool "Enable the UEFI ESRT generation"
@@ -496,15 +509,26 @@  config EFI_EBBR_2_1_CONFORMANCE
 	help
 	  Enabling this option adds the EBBRv2.1 conformance entry to the ECPT UEFI table.

-config EFI_RISCV_BOOT_PROTOCOL
-	bool "RISCV_EFI_BOOT_PROTOCOL support"
+config EFI_SCROLL_ON_CLEAR_SCREEN
+	bool "Avoid overwriting previous output on clear screen"
+	help
+	  Instead of erasing the screen content when the console screen should
+	  be cleared, emit blank new lines so that previous output is scrolled
+	  out of sight rather than overwritten. On serial consoles this allows
+	  to capture complete boot logs (except for interactive menus etc.)
+	  and can ease debugging related issues.
+
+endmenu
+
+menu "EFI bootmanager"
+
+config EFI_BOOTMGR
+	bool "UEFI Boot Manager"
 	default y
-	depends on RISCV
 	help
-	  The EFI_RISCV_BOOT_PROTOCOL is used to transfer the boot hart ID
-	  to the next boot stage. It should be enabled as it is meant to
-	  replace the transfer via the device-tree. The latter is not
-	  possible on systems using ACPI.
+	  Select this option if you want to select the UEFI binary to be booted
+	  via UEFI variables Boot####, BootOrder, and BootNext. You should also
+	  normally enable CMD_BOOTEFI_BOOTMGR so that the command is available.

 config EFI_HTTP_BOOT
 	bool "EFI HTTP Boot support"
@@ -514,5 +538,11 @@  config EFI_HTTP_BOOT
 	help
 	  Enabling this option adds EFI HTTP Boot support. It allows to
 	  directly boot from network.
+endmenu

 endif
+
+source "lib/efi/Kconfig"
+
+endmenu
+