Re: [PATCH 2/2] efi_loader: make the UEFI boot manager configurable

2021-01-18 Thread Tom Rini
On Fri, Jan 15, 2021 at 09:31:19PM +0100, Heinrich Schuchardt wrote:
> On 1/15/21 7:43 PM, Tom Rini wrote:
> > On Fri, Jan 15, 2021 at 07:02:50PM +0100, Heinrich Schuchardt wrote:
> > 
> > > Some boards are very tight on the binary size. Booting via UEFI is 
> > > possible
> > > without using the boot manager.
> > 
> > While I don't think we need to re-word this part, for the record my
> > concern is global, not specific platforms.  To re-iterate something we
> > talked about on IRC, I think it's important to be able to select and
> > have a default UEFI implementation that covers as many common use cases
> > as possible, while also being as small as possible.
> > 
> > > 
> > > Provide a configuration option to make the boot manager available.
> > > 
> > > Signed-off-by: Heinrich Schuchardt 
> > [snip]
> > > +config CMD_BOOTEFI_BOOTMGR
> > > + bool "UEFI Boot Manager"
> > > + default y
> > > + help
> > > +   Select this option if you want to select the UEFI binary to be booted
> > > +   via UEFI variables Boot, BootOrder, and BootNext. This enables the
> > > +   'bootefi bootmgr' command.
> > 
> > I'm not sure this should be default y.  My concern is that the default
> > set of options is growing so that every possible case has support in the
> > binary but the hardware and practical use means we don't need all of
> > that.  This should perhaps be "default y if DISTRO_DEFAULTS" at least.
> 
> If you want to default something to no, I think that
> EFI_UNICODE_CAPITALIZATION is a better candidate.
> 
> On wandboard_defconfig:
> 
> 683976 - 680228 = 3748 bytes saved.

OK, thanks.  Can you make up a patch with sufficient explanation of why
it's OK to not support this by default?

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH 2/2] efi_loader: make the UEFI boot manager configurable

2021-01-15 Thread Heinrich Schuchardt

On 1/15/21 7:43 PM, Tom Rini wrote:

On Fri, Jan 15, 2021 at 07:02:50PM +0100, Heinrich Schuchardt wrote:


Some boards are very tight on the binary size. Booting via UEFI is possible
without using the boot manager.


While I don't think we need to re-word this part, for the record my
concern is global, not specific platforms.  To re-iterate something we
talked about on IRC, I think it's important to be able to select and
have a default UEFI implementation that covers as many common use cases
as possible, while also being as small as possible.



Provide a configuration option to make the boot manager available.

Signed-off-by: Heinrich Schuchardt 

[snip]

+config CMD_BOOTEFI_BOOTMGR
+   bool "UEFI Boot Manager"
+   default y
+   help
+ Select this option if you want to select the UEFI binary to be booted
+ via UEFI variables Boot, BootOrder, and BootNext. This enables the
+ 'bootefi bootmgr' command.


I'm not sure this should be default y.  My concern is that the default
set of options is growing so that every possible case has support in the
binary but the hardware and practical use means we don't need all of
that.  This should perhaps be "default y if DISTRO_DEFAULTS" at least.


If you want to default something to no, I think that
EFI_UNICODE_CAPITALIZATION is a better candidate.

On wandboard_defconfig:

683976 - 680228 = 3748 bytes saved.

Best regards

Heinrich







Re: [PATCH 2/2] efi_loader: make the UEFI boot manager configurable

2021-01-15 Thread Tom Rini
On Fri, Jan 15, 2021 at 07:02:50PM +0100, Heinrich Schuchardt wrote:

> Some boards are very tight on the binary size. Booting via UEFI is possible
> without using the boot manager.

While I don't think we need to re-word this part, for the record my
concern is global, not specific platforms.  To re-iterate something we
talked about on IRC, I think it's important to be able to select and
have a default UEFI implementation that covers as many common use cases
as possible, while also being as small as possible.

> 
> Provide a configuration option to make the boot manager available.
> 
> Signed-off-by: Heinrich Schuchardt 
[snip]
> +config CMD_BOOTEFI_BOOTMGR
> + bool "UEFI Boot Manager"
> + default y
> + help
> +   Select this option if you want to select the UEFI binary to be booted
> +   via UEFI variables Boot, BootOrder, and BootNext. This enables the
> +   'bootefi bootmgr' command.

I'm not sure this should be default y.  My concern is that the default
set of options is growing so that every possible case has support in the
binary but the hardware and practical use means we don't need all of
that.  This should perhaps be "default y if DISTRO_DEFAULTS" at least.

-- 
Tom


signature.asc
Description: PGP signature


[PATCH 2/2] efi_loader: make the UEFI boot manager configurable

2021-01-15 Thread Heinrich Schuchardt
Some boards are very tight on the binary size. Booting via UEFI is possible
without using the boot manager.

Provide a configuration option to make the boot manager available.

Signed-off-by: Heinrich Schuchardt 
---
 cmd/bootefi.c|  13 ++--
 cmd/efidebug.c   |   8 ++-
 lib/efi_loader/Kconfig   |   8 +++
 lib/efi_loader/Makefile  |   3 +-
 lib/efi_loader/efi_bootmgr.c | 135 ---
 5 files changed, 25 insertions(+), 142 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index fe70eec625..c8eb5c32b0 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -631,10 +631,12 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, 
int argc,
else if (ret != EFI_SUCCESS)
return CMD_RET_FAILURE;

-   if (!strcmp(argv[1], "bootmgr"))
-   return do_efibootmgr();
+   if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) {
+   if (!strcmp(argv[1], "bootmgr"))
+   return do_efibootmgr();
+   }
 #ifdef CONFIG_CMD_BOOTEFI_SELFTEST
-   else if (!strcmp(argv[1], "selftest"))
+   if (!strcmp(argv[1], "selftest"))
return do_efi_selftest();
 #endif

@@ -657,11 +659,14 @@ static char bootefi_help_text[] =
"Use environment variable efi_selftest to select a single test.\n"
"Use 'setenv efi_selftest list' to enumerate all tests.\n"
 #endif
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
"bootefi bootmgr [fdt address]\n"
"  - load and boot EFI payload based on BootOrder/Boot variables.\n"
"\n"
"If specified, the device tree located at  gets\n"
-   "exposed as EFI configuration table.\n";
+   "exposed as EFI configuration table.\n"
+#endif
+   ;
 #endif

 U_BOOT_CMD(
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index 6de81cab00..9a2d4ddd5e 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -1367,8 +1367,8 @@ static int do_efi_boot_opt(struct cmd_tbl *cmdtp, int 
flag,
  *
  * efidebug test bootmgr
  */
-static int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, int flag,
-  int argc, char * const argv[])
+static __maybe_unused int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, int flag,
+ int argc, char * const argv[])
 {
efi_handle_t image;
efi_uintn_t exit_data_size = 0;
@@ -1392,8 +1392,10 @@ static int do_efi_test_bootmgr(struct cmd_tbl *cmdtp, 
int flag,
 }

 static struct cmd_tbl cmd_efidebug_test_sub[] = {
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
U_BOOT_CMD_MKENT(bootmgr, CONFIG_SYS_MAXARGS, 1, do_efi_test_bootmgr,
 "", ""),
+#endif
 };

 /**
@@ -1581,8 +1583,10 @@ static char efidebug_help_text[] =
"  - show UEFI memory map\n"
"efidebug tables\n"
"  - show UEFI configuration tables\n"
+#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
"efidebug test bootmgr\n"
"  - run simple bootmgr for test\n"
+#endif
"efidebug query [-nv][-bs][-rt][-at]\n"
"  - show size of UEFI variables store\n";
 #endif
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index fdf245dea3..106f789b4d 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -27,6 +27,14 @@ config EFI_LOADER

 if EFI_LOADER

+config CMD_BOOTEFI_BOOTMGR
+   bool "UEFI Boot Manager"
+   default y
+   help
+ Select this option if you want to select the UEFI binary to be booted
+ via UEFI variables Boot, BootOrder, and BootNext. This enables the
+ 'bootefi bootmgr' command.
+
 config EFI_SETUP_EARLY
bool
default n
diff --git a/lib/efi_loader/Makefile b/lib/efi_loader/Makefile
index 412fa88245..a6355d240a 100644
--- a/lib/efi_loader/Makefile
+++ b/lib/efi_loader/Makefile
@@ -21,7 +21,7 @@ targets += helloworld.o
 endif

 obj-$(CONFIG_CMD_BOOTEFI_HELLO) += helloworld_efi.o
-obj-y += efi_bootmgr.o
+obj-$(CONFIG_CMD_BOOTEFI_BOOTMGR) += efi_bootmgr.o
 obj-y += efi_boottime.o
 obj-$(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) += efi_capsule.o
 obj-$(CONFIG_EFI_CAPSULE_FIRMWARE) += efi_firmware.o
@@ -35,6 +35,7 @@ endif
 obj-y += efi_file.o
 obj-$(CONFIG_EFI_LOADER_HII) += efi_hii.o
 obj-y += efi_image_loader.o
+obj-y += efi_load_options.o
 obj-y += efi_memory.o
 obj-y += efi_root_node.o
 obj-y += efi_runtime.o
diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
index d3be2f94c6..25f5cebfdb 100644
--- a/lib/efi_loader/efi_bootmgr.c
+++ b/lib/efi_loader/efi_bootmgr.c
@@ -30,141 +30,6 @@ static const struct efi_runtime_services *rs;
  * should do normal or recovery boot.
  */

-/**
- * efi_set_load_options() - set the load options of a loaded image
- *
- * @handle:the image handle
- * @load_options_size: size of load options
- * @load_options:  pointer to load options
- * Return: status code
- */
-efi_status_t efi_set_load_options(efi_handle_t handle,
- efi_uintn_t