From 0e21943b94a86f8f9d7b95eecd18d18742296b3c Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 10 Sep 2022 09:16:37 +0200 Subject: [PATCH 1/3] doc: improve description of autostart Complete the list of commands influenced by the autostart environment variable. Make it clearer what values qualifies at 'yes'. Eventually the list of environment variables is to be alphabetically sorted. Move autostart up. Signed-off-by: Heinrich Schuchardt Reviewed-by: Simon Glass --- doc/usage/environment.rst | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/doc/usage/environment.rst b/doc/usage/environment.rst index 561076bac9..7906ace2af 100644 --- a/doc/usage/environment.rst +++ b/doc/usage/environment.rst @@ -106,6 +106,27 @@ many cases the value in the default environment comes from a CONFIG option - see This is most-likely not complete: +autostart + If set to "yes" (actually any string starting with 1, y, Y, t, or T) an + image loaded with one of the commands listed below will be automatically + started by internally invoking the bootm command. + + * bootelf - Boot from an ELF image in memory + * bootp - boot image via network using BOOTP/TFTP protocol + * dhcp - boot image via network using DHCP/TFTP protocol + * diskboot - boot from ide device + * nboot - boot from NAND device + * nfs - boot image via network using NFS protocol + * rarpboot - boot image via network using RARP/TFTP protocol + * scsiboot - boot from SCSI device + * tftpboot - boot image via network using TFTP protocol + * usbboot - boot from USB device + + If the environment variable autostart is not set to a value starting with + 1, y, Y, t, or T, an image passed to the "bootm" command will be copied to + the load address (and eventually uncompressed), but NOT be started. + This can be used to load and uncompress arbitrary data. + baudrate Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which defaults to 115200). @@ -174,19 +195,6 @@ autoload configuration from the BOOTP server, but not try to load any image. -autostart - if set to "yes", an image loaded using the "bootp", "dhcp", - "rarpboot", "tftpboot" or "diskboot" commands will - be automatically started (by internally calling - "bootm") - - If unset, or set to "1"/"yes"/"true" (case insensitive, just the first - character is enough), a standalone image - passed to the "bootm" command will be copied to the load address - (and eventually uncompressed), but NOT be started. - This can be used to load and uncompress arbitrary - data. - fdt_high if set this restricts the maximum address that the flattened device tree will be copied into upon boot. From 0dfc4c84d84bd4f8cfb7ecc18bc7958f20b99a6c Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 22 Sep 2022 15:16:30 +0200 Subject: [PATCH 2/3] efi_selftest: prefix test functions with efi_st_ An upcoming patch set creates a global function flush(). To make debugging easier we should not use the same name for a static function. Rename static functions in the LoadImage() unit test adding an efi_st_ prefix. Signed-off-by: Heinrich Schuchardt Reviewed-by: Ilias Apalodimas --- lib/efi_selftest/efi_selftest_loadimage.c | 87 ++++++++++++----------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/lib/efi_selftest/efi_selftest_loadimage.c b/lib/efi_selftest/efi_selftest_loadimage.c index d4c76f557c..24548f1ae6 100644 --- a/lib/efi_selftest/efi_selftest_loadimage.c +++ b/lib/efi_selftest/efi_selftest_loadimage.c @@ -142,38 +142,39 @@ static struct efi_file_system_info *file_system_info = &priv_file_system_info.info; /* Forward definitions of file and file system functions */ -static efi_status_t EFIAPI open_volume +static efi_status_t EFIAPI efi_st_open_volume (struct efi_simple_file_system_protocol *this, struct efi_file_handle **root); -static efi_status_t EFIAPI open +static efi_status_t EFIAPI efi_st_open (struct efi_file_handle *this, struct efi_file_handle **new_handle, u16 *file_name, u64 open_mode, u64 attributes); -static efi_status_t EFIAPI close(struct efi_file_handle *this); +static efi_status_t EFIAPI efi_st_close(struct efi_file_handle *this); -static efi_status_t EFIAPI delete(struct efi_file_handle *this); +static efi_status_t EFIAPI efi_st_delete(struct efi_file_handle *this); -static efi_status_t EFIAPI read +static efi_status_t EFIAPI efi_st_read (struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer); -static efi_status_t EFIAPI write +static efi_status_t EFIAPI efi_st_write (struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer); -static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos); +static efi_status_t EFIAPI efi_st_getpos(struct efi_file_handle *this, + u64 *pos); -static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos); +static efi_status_t EFIAPI efi_st_setpos(struct efi_file_handle *this, u64 pos); -static efi_status_t EFIAPI getinfo +static efi_status_t EFIAPI efi_st_getinfo (struct efi_file_handle *this, const efi_guid_t *info_type, efi_uintn_t *buffer_size, void *buffer); -static efi_status_t EFIAPI setinfo +static efi_status_t EFIAPI efi_st_setinfo (struct efi_file_handle *this, const efi_guid_t *info_type, efi_uintn_t buffer_size, void *buffer); -static efi_status_t EFIAPI flush(struct efi_file_handle *this); +static efi_status_t EFIAPI efi_st_flush(struct efi_file_handle *this); /* Internal information about status of file system */ static struct { @@ -190,40 +191,40 @@ static struct { /* EFI_FILE_PROTOCOL for file */ static struct efi_file_handle file = { .rev = 0x00010000, - .open = open, - .close = close, - .delete = delete, - .read = read, - .write = write, - .getpos = getpos, - .setpos = setpos, - .getinfo = getinfo, - .setinfo = setinfo, - .flush = flush, + .open = efi_st_open, + .close = efi_st_close, + .delete = efi_st_delete, + .read = efi_st_read, + .write = efi_st_write, + .getpos = efi_st_getpos, + .setpos = efi_st_setpos, + .getinfo = efi_st_getinfo, + .setinfo = efi_st_setinfo, + .flush = efi_st_flush, }; /* EFI_FILE_PROTOCOL for root directory */ static struct efi_file_handle volume = { .rev = 0x00010000, - .open = open, - .close = close, - .delete = delete, - .read = read, - .write = write, - .getpos = getpos, - .setpos = setpos, - .getinfo = getinfo, - .setinfo = setinfo, - .flush = flush, + .open = efi_st_open, + .close = efi_st_close, + .delete = efi_st_delete, + .read = efi_st_read, + .write = efi_st_write, + .getpos = efi_st_getpos, + .setpos = efi_st_setpos, + .getinfo = efi_st_getinfo, + .setinfo = efi_st_setinfo, + .flush = efi_st_flush, }; /* EFI_SIMPLE_FILE_SYSTEM_PROTOCOL of the block device */ struct efi_simple_file_system_protocol file_system = { .rev = 0x00010000, - .open_volume = open_volume, + .open_volume = efi_st_open_volume, }; -static efi_status_t EFIAPI open_volume +static efi_status_t EFIAPI efi_st_open_volume (struct efi_simple_file_system_protocol *this, struct efi_file_handle **root) { @@ -236,7 +237,7 @@ static efi_status_t EFIAPI open_volume return EFI_SUCCESS; } -static efi_status_t EFIAPI open +static efi_status_t EFIAPI efi_st_open (struct efi_file_handle *this, struct efi_file_handle **new_handle, u16 *file_name, u64 open_mode, u64 attributes) @@ -251,7 +252,7 @@ static efi_status_t EFIAPI open return EFI_SUCCESS; } -static efi_status_t EFIAPI close(struct efi_file_handle *this) +static efi_status_t EFIAPI efi_st_close(struct efi_file_handle *this) { if (this == &file) priv.file_open_count--; @@ -263,7 +264,7 @@ static efi_status_t EFIAPI close(struct efi_file_handle *this) return EFI_SUCCESS; } -static efi_status_t EFIAPI delete(struct efi_file_handle *this) +static efi_status_t EFIAPI efi_st_delete(struct efi_file_handle *this) { if (this != &file) return EFI_INVALID_PARAMETER; @@ -271,7 +272,7 @@ static efi_status_t EFIAPI delete(struct efi_file_handle *this) return EFI_UNSUPPORTED; } -static efi_status_t EFIAPI read +static efi_status_t EFIAPI efi_st_read (struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer) { if (this != &file) @@ -288,7 +289,7 @@ static efi_status_t EFIAPI read return EFI_SUCCESS; } -static efi_status_t EFIAPI write +static efi_status_t EFIAPI efi_st_write (struct efi_file_handle *this, efi_uintn_t *buffer_size, void *buffer) { if (this != &file) @@ -297,7 +298,7 @@ static efi_status_t EFIAPI write return EFI_UNSUPPORTED; } -static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos) +static efi_status_t EFIAPI efi_st_getpos(struct efi_file_handle *this, u64 *pos) { if (this != &file) return EFI_INVALID_PARAMETER; @@ -307,7 +308,7 @@ static efi_status_t EFIAPI getpos(struct efi_file_handle *this, u64 *pos) return EFI_SUCCESS; } -static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos) +static efi_status_t EFIAPI efi_st_setpos(struct efi_file_handle *this, u64 pos) { if (this != &file) return EFI_INVALID_PARAMETER; @@ -317,7 +318,7 @@ static efi_status_t EFIAPI setpos(struct efi_file_handle *this, u64 pos) return EFI_SUCCESS; } -static efi_status_t EFIAPI getinfo +static efi_status_t EFIAPI efi_st_getinfo (struct efi_file_handle *this, const efi_guid_t *info_type, efi_uintn_t *buffer_size, void *buffer) { @@ -348,7 +349,7 @@ static efi_status_t EFIAPI getinfo return EFI_SUCCESS; } -static efi_status_t EFIAPI setinfo +static efi_status_t EFIAPI efi_st_setinfo (struct efi_file_handle *this, const efi_guid_t *info_type, efi_uintn_t buffer_size, void *buffer) { @@ -358,7 +359,7 @@ static efi_status_t EFIAPI setinfo return EFI_UNSUPPORTED; } -static efi_status_t EFIAPI flush(struct efi_file_handle *this) +static efi_status_t EFIAPI efi_st_flush(struct efi_file_handle *this) { if (this != &file) return EFI_INVALID_PARAMETER; From 8d805929b1541a071048b55b22d110f166809939 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Fri, 30 Sep 2022 01:55:02 +0200 Subject: [PATCH 3/3] efi_loader: fix efi_initrd_deregister() Don't try to delete a non-existent handle. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_load_initrd.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/efi_loader/efi_load_initrd.c b/lib/efi_loader/efi_load_initrd.c index c5e6652e66..3d6044f760 100644 --- a/lib/efi_loader/efi_load_initrd.c +++ b/lib/efi_loader/efi_load_initrd.c @@ -230,6 +230,9 @@ efi_status_t efi_initrd_register(void) */ void efi_initrd_deregister(void) { + if (!efi_initrd_handle) + return; + efi_delete_handle(efi_initrd_handle); efi_initrd_handle = NULL; }