summaryrefslogtreecommitdiff
path: root/lib/efi_loader
AgeCommit message (Collapse)Author
2023-03-14Merge tag 'v2023.04-rc4' into nextTom Rini
Prepare v2023.04-rc4 Signed-off-by: Tom Rini <[email protected]>
2023-03-13efi_loader: describe term_get_char()Heinrich Schuchardt
Add a function description. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-03-13efi_loader: update SetVariable attribute checkMasahisa Kojima
UEFI specification v2.10 says that EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated and EFI_UNSUPPORTED should be returned in SetVariable variable service. Current implementation returns EFI_INVALID_PARAMETER, let's fix the return value. Together with above change, this commit also updates the SetVariable attribute check to be aligned with the EDK2 reference implementation. Signed-off-by: Masahisa Kojima <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2023-02-28efi_loader: use tpm_auto_start for the tpm deviceIlias Apalodimas
A previous commit is adding a new tpm startup functions which initializes the TPMv2 and performs all the needed selftests. Since the TPM selftests might be needed depending on the requested algorithm or functional module use that instead. Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]>
2023-02-19efi_loader: set CapsuleMax from CONFIG_EFI_CAPSULE_MAXEtienne Carriere
Adds CONFIG_EFI_CAPSULE_MAX to configure the max index value used in EFI capsule reports. Prior to this change is the hard coded value was 65535 which would exceed available storage for variables. Now the default value is 15 which should work fine with most systems. Signed-off-by: Etienne Carriere <[email protected]>
2023-02-19efi_loader: Measure the loaded DTBEtienne Carriere
Measures the DTB passed to the EFI application upon new boolean config switch CONFIG_EFI_TCG2_PROTOCOL_MEASURE_DTB. For platforms where the content of the DTB passed to the OS can change across reboots, there is not point measuring it hence the config switch to allow platform to not embed this feature. Co-developed-by: Ilias Apalodimas <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]> Signed-off-by: Etienne Carriere <[email protected]> Tested-by: Ilias Apalodimas <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-02-19efi_loader: fix wrong attribute check for QueryVariableInfoMasahisa Kojima
QueryVariableInfo with EFI_VARIABLE_HARDWARE_ERROR_RECORD is accepted, remove wrong attribute check. Fixes: 454a9442fbce ("efi_loader: update attribute check for QueryVariableInfo()") Signed-off-by: Masahisa Kojima <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2023-02-19efi_loader: avoid buffer overrun in efi_var_mem_compareHeinrich Schuchardt
We should not scan beyond the end of string name. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10Merge tag 'efi-2023-04-rc2' of ↵Tom Rini
https://source.denx.de/u-boot/custodians/u-boot-efi Pull request for efi-2023-04-rc2 Documentation: * Provide page with links to talks on U-Boot UEFI: * Enable CTRL+S to save the boot order in eficonfig command * Run attribute check for QueryVariableInfo() only for the file store * Bug fixes Others: * Improve output formatting of the coninfo command # -----END PGP SIGNATURE----- # gpg: Signature made Fri 10 Feb 2023 12:15:45 PM EST # gpg: using RSA key 6DC4F9C71F29A6FA06B76D33C481DBBC2C051AC4 # gpg: Good signature from "Heinrich Schuchardt <[email protected]>" [unknown] # gpg: aka "[jpeg image of size 1389]" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6DC4 F9C7 1F29 A6FA 06B7 6D33 C481 DBBC 2C05 1AC4
2023-02-10efi_loader: static efi_query_variable_info_runtime()Heinrich Schuchardt
This function is not used externally and hence should be static. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: make gop_blt() staticHeinrich Schuchardt
This function is not used externally. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: include definition of allow_unaligned()Heinrich Schuchardt
Add missing include. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: static functions in efi_runtime.cHeinrich Schuchardt
Functions that are not used externally should be static. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: static functions in efi_console.cHeinrich Schuchardt
Define function set_shift_mask() as static as it is not used externally. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: static functions in efi_boottime.cHeinrich Schuchardt
Make functions that are no used externally static. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: static functions in helloworld.cHeinrich Schuchardt
Make functions that are not used externally static. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: fix efi_ecpt_register()Heinrich Schuchardt
num_entries should be unsigned to avoid warnings. As the target field is u16 we should use this type. lib/efi_loader/efi_conformance.c: In function ‘efi_ecpt_register’: lib/efi_loader/efi_conformance.c:30:33: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] 30 | ecpt_size = num_entries * sizeof(efi_guid_t) | ^ lib/efi_loader/efi_conformance.c:46:36: warning: conversion from ‘int’ to ‘u16’ {aka ‘short unsigned int’} may change value [-Wconversion] 46 | ecpt->number_of_profiles = num_entries; | ^~~~~~~~~~~ Fixes: 6b92c1735205 ("efi: Create ECPT table") Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: make get_load_options() staticHeinrich Schuchardt
In program initrddump.efi function get_load_options() can be static. This avoids a warning when building with 'make W=1': lib/efi_loader/initrddump.c:442:6: warning: no previous prototype for ‘get_load_options’ [-Wmissing-prototypes] 442 | u16 *get_load_options(void) | ^~~~~~~~~~~~~~~~ Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-10efi_loader: update attribute check for QueryVariableInfo()Masahisa Kojima
Current U-Boot supports two EFI variable service, U-Boot own implementation and op-tee based StMM variable service. With ACS Security Interface Extension(SIE) v22.10_SIE_REL1.1.0, there are several failure items of QueryVariableInfo(). Current attribute check for QueryVariableInfo() was implemented based on the Self Certification Test (SCT) II Case Specification, June 2017, chapter 4.1.4 QueryVariableInfo(). This test case specification is outdated and don't align at all with the SCT test case code, and UEFI specification v2.10 does not clearly define the priority of the attribute check. For U-Boot standard case that EFI variables are stored in a file in the ESP, this commit modifies the attribute check to get align to the EDK2 implementation. For latter case(op-tee based StMM variable service), parameter check should be delegated to StMM. Now all ACS SIE QueryVariableInfo() test cases passed both EFI variable storage implementations. Signed-off-by: Masahisa Kojima <[email protected]> Acked-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-02-09Correct SPL use of EFI_UNICODE_COLLATION_PROTOCOL2Simon Glass
This converts 1 usage of this option to the non-SPL form, since there is no SPL_EFI_UNICODE_COLLATION_PROTOCOL2 defined in Kconfig Signed-off-by: Simon Glass <[email protected]>
2023-02-09Correct SPL use of EFI_TCG2_PROTOCOLSimon Glass
This converts 1 usage of this option to the non-SPL form, since there is no SPL_EFI_TCG2_PROTOCOL defined in Kconfig Signed-off-by: Simon Glass <[email protected]>
2023-02-09Correct SPL use of EFI_LOADER_HIISimon Glass
This converts 1 usage of this option to the non-SPL form, since there is no SPL_EFI_LOADER_HII defined in Kconfig Signed-off-by: Simon Glass <[email protected]>
2023-02-09Correct SPL use of EFI_DEVICE_PATH_UTILSimon Glass
This converts 1 usage of this option to the non-SPL form, since there is no SPL_EFI_DEVICE_PATH_UTIL defined in Kconfig Signed-off-by: Simon Glass <[email protected]>
2023-01-27efi_loader: don't use HandleProtocolHeinrich Schuchardt
HandleProtocol() is deprecrated. According to the UEFI specification it should be implemented as a call to OpenProtocolInterface() with a hard coded agent handle. This implies that we would have to call CloseProtocolInterfaces() after usage with the same handle. Getting rid of an EFI_CALL() is also appreciated. Signed-off-by: Heinrich Schuchardt <[email protected]> Acked-by: Ilias Apalodimas <[email protected]>
2023-01-27efi_loader: fix comment in ESRT codeHeinrich Schuchardt
There is no variable num_pages in function efi_esrt_allocate_install(). Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-01-23efi: Improve logging in efi_diskSimon Glass
When this fails it can be time-consuming to debug. Add some debugging to help with this. Also try to return error codes instead of just using -1. Signed-off-by: Simon Glass <[email protected]>
2023-01-20efi_loader: fix CapsuleMax variable reportingIlias Apalodimas
Currently the code that adds the CapsuleMax variable is under a Kconfig named 'EFI_HAVE_CAPSULE_UPDATE. Git history only shows a single occurrence of that. The IS_ENABLED should be checking for EFI_HAVE_CAPSULE_SUPPORT Reported-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]>
2023-01-20efi_loader: update the error message of TCG protocol installationIlias Apalodimas
"Unable to find TPMv2 device" doesn't explain much with regards to the error origin. Update it to match what we have in the RNG protocol installation. Signed-off-by: Ilias Apalodimas <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2023-01-20efi_loader: ensure that file ubootefi.var is createdHeinrich Schuchardt
Currently file ubootefi.var is only created if the user sets a non-volatile EFI variable. If the file is missing, a warning is written. With the change PlatformLang is always persisted. So the file will exist on second boot. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-01-20efi_loader: Avoid overwriting previous outputs on console screen clearingJan Kiszka
Before clearing the screen, ensure that no previous output of firmware or UEFI programs will be overwritten on serial devices or other streaming consoles. This helps generating complete boot logs. Tested regarding multi-output against qemu-x86_defconfig. Still, there were remaining concerns about side effects, so this is provided as an opt-in feature. Signed-off-by: Jan Kiszka <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2023-01-20efi_loader: Set default console colors on efi_cout_clear_screen if neededJan Kiszka
Ensures a consistent background color of the whole screen for succeeding outputs as both demanded by the spec and implemented in EDK2 as well. Signed-off-by: Jan Kiszka <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2023-01-19Merge tag 'dm-pull-18jan23' of ↵Tom Rini
https://source.denx.de/u-boot/custodians/u-boot-dm convert rockchip to use binman patman fix for checkpatch binman optional entries, improved support for ELF symbols trace improvements minor fdt refactoring
2023-01-18trace: Use notrace for shortSimon Glass
The attribute syntax is quite verbose. Use the macro provided for this purpose. Signed-off-by: Simon Glass <[email protected]>
2023-01-18event: Correct dependencies on the EVENT frameworkTom Rini
The event framework is just that, a framework. Enabling it by itself does nothing, so we shouldn't ask the user about it. Reword (and correct typos) around this the option and help text. This also applies to DM_EVENT and EVENT_DYNAMIC. Only EVENT_DEBUG and CMD_EVENT should be visible to the user to select, when EVENT is selected. With this, it's time to address the larger problems. When functionality uses events, typically via EVENT_SPY, the appropriate framework then must be select'd and NOT imply'd. As the functionality will cease to work (and so, platforms will fail to boot) this is non-optional and where select is appropriate. Audit the current users of EVENT_SPY to have a more fine-grained approach to select'ing the framework where used. Also ensure the current users of event_register and also select EVENT_DYNAMIC. Cc: AKASHI Takahiro <[email protected]> Cc: Heinrich Schuchardt <[email protected]> Reported-by: Oliver Graute <[email protected]> Reported-by: Francesco Dolcini <[email protected]> Fixes: 7fe32b3442f0 ("event: Convert arch_cpu_init_dm() to use events") Fixes: 42fdcebf859f ("event: Convert misc_init_f() to use events") Fixes: c5ef2025579e ("dm: fix DM_EVENT dependencies") Signed-off-by: Tom Rini <[email protected]> Tested-by: Simon Glass <[email protected]> Reviewed-by: Simon Glass <[email protected]> Reviewed-by: Fabio Estevam <[email protected]>
2023-01-13efi_loader: provide agent_handle to efi_disk_add_dev()Heinrich Schuchardt
In efi_disk_add_dev() we have to open protocols with BY_DRIVER and BY_CHILD_CONTROLLER. Provide the handle of the EFI block driver. The actual usage of the value will follow in a later patch. Change function descriptions to Sphinx style. Remove a TODO: tag. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-01-13efi_loader: refine set_keyboard_layout() statusVincent Stehlé
As per the EFI specification, the HII database protocol function set_keyboard_layout() must return EFI_INVALID_PARAMETER when it is called with a NULL key_guid argument. Modify the function accordingly to improve conformance. Signed-off-by: Vincent Stehlé <[email protected]> Cc: Heinrich Schuchardt <[email protected]> Cc: Ilias Apalodimas <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-01-13efi_loader: use EFI_EXIT in efi_riscv_get_boot_hartidHeinrich Schuchardt
After calling EFI_ENTRY we have to call EFI_EXIT before returning. Add a missing EFI_EXIT(). Fixes: 1ccf87165e38 ("efi_loader: Enable RISCV_EFI_BOOT_PROTOCOL support") Reported-by: Dave Jones <[email protected]> Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]> Reviewed-by: Sunil V L <[email protected]>
2023-01-13efi_loader: fix description of memory functionsHeinrich Schuchardt
* Add missing function descriptions * Adjust to Sphinx style Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-01-06efi_loader: carve out efi_get_memory_map_alloc()Heinrich Schuchardt
Carve out code from efidebug command used to read the memory map. Signed-off-by: Heinrich Schuchardt <[email protected]>
2023-01-04efi_loader: populate console handles in system tableHeinrich Schuchardt
The fields ConsoleInHandle, ConsoleOutHandle, ConsoleErrHandle must point to the handles with the respective console protocols. Failure to do so leads to an error in the EFI Shell: No SimpleTextInputEx was found. CTRL-based features are not usable. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2023-01-04efi_loader: adjust sorting of capsulesHeinrich Schuchardt
Up to now we only compared the first letter of the capsule name to sort them alphabetically. Properly sort by the Unicode alphabet. Signed-off-by: Heinrich Schuchardt <[email protected]>
2022-12-29efi_loader: use u16_strlen() in efi_var_mem_ins()Heinrich Schuchardt
Don't duplicate library functionality. Signed-off-by: Heinrich Schuchardt <[email protected]>
2022-12-29efi_loader: avoid adding variables twiceIlias Apalodimas
When the efi subsystem starts we restore variables that are both in a file or stored into the .efi_runtime section of U-Boot. However once a variable gets created or changed the preseeded entries will end up in the file. As a consequence on the next boot we will end up adding identical variable entries twice. Fix this by checking if the to be inserted variable already exists. Also swap the restoration order and start with the file instead of the builtin variables, so a user can replace the preseeded ones if needed. Tested-by: Leo Yan <[email protected]> Signed-off-by: Ilias Apalodimas <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2022-12-29efi_loader: typo non-volatile in efi_var_restoreHeinrich Schuchardt
It is volatile variables that we do not allow to be restored from file. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2022-12-29efi_loader: fix get_package_list_handle() statusVincent Stehlé
When the HII protocol function get_package_list_handle() is called with an invalid package list handle, it returns EFI_NOT_FOUND but this is not in its list of possible status codes as per the EFI specification. Return EFI_INVALID_PARAMETER instead to fix conformance. Signed-off-by: Vincent Stehlé <[email protected]> Cc: Heinrich Schuchardt <[email protected]> Cc: Ilias Apalodimas <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2022-12-20efi_loader: fix efi_get_next_variable_name_mem()Heinrich Schuchardt
The VariableNameSize parameter is in bytes but u16_strnlen() counts u16. Fix the parameter check for null termination. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2022-12-20eficonfig: carve out efi_get_next_variable_name_int callsMasahisa Kojima
To retrieve the EFI variable name by efi_get_next_variable_name_int(), the sequence of alloc -> efi_get_next_variable_name_int -> realloc -> efi_get_next_variable_name_int is required. In current code, this sequence repeatedly appears in the several functions. It should be curved out a common function. This commit also fixes the missing free() of var_name16 in eficonfig_delete_invalid_boot_option(). Signed-off-by: Masahisa Kojima <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2022-12-17efi: adjust ebbr to v2.1 in conformance profileVincent Stehlé
The EFI Conformance Profile Table entry for EBBR appears in v2.1.0 of the EBBR specification[1]. Update naming accordingly. While at it, update the EBBR version referenced in the documentation. [1]: https://github.com/ARM-software/ebbr/releases/tag/v2.1.0 Signed-off-by: Vincent Stehlé <[email protected]> Cc: Heinrich Schuchardt <[email protected]> Cc: Ilias Apalodimas <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2022-12-02efi_loader: utility function to check the variable name is "Boot####"Masahisa Kojima
Some commands need to enumerate the existing UEFI load option variable("Boot####"). This commit transfers some code from cmd/efidebug.c to lib/efi_loder/, then exposes efi_varname_is_load_option() function to check whether the UEFI variable name is "Boot####". Signed-off-by: Masahisa Kojima <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>
2022-12-02efi_loader: don't use EFI_LOADER_DATA internallyHeinrich Schuchardt
EFI_LOADER_DATA/CODE is reserved for EFI applications. Memory allocated by U-Boot for internal usage should be EFI_BOOT_SERVICES_DATA or _CODE or EFI_RUNTIME_SERVICES_DATA or _CODE. Reported-by: François-Frédéric Ozog <[email protected]> Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: François-Frédéric Ozog <[email protected]> Reviewed-by: Ilias Apalodimas <[email protected]>