summaryrefslogtreecommitdiff
path: root/lib/efi_loader
AgeCommit message (Collapse)Author
2018-07-02efi_loader: helloworld: Output ACPI configuration tableBin Meng
Output ACPI configuration table if it exists. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2018-07-02efi_loader: Install ACPI configuration tablesBin Meng
ACPI tables can be passed via EFI configuration table to an EFI application. This is only supported on x86 so far. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2018-07-02efi_loader: Increase number of configuration tables to 16Bin Meng
At present the number of configuration tables is set to 2. By looking at which tables the Linux EFI stub or iPXE can process, it looks 16 is a reasonable number. Signed-off-by: Bin Meng <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
2018-06-21efi_loader: Fix GOP 32bpp exposureAlexander Graf
We store pixels as BGRA in memory, as can be seen from struct efi_gop_pixel. So we need to expose the same format to UEFI payloads to actually have them use the correct colors. Reported-by: Fabian Vogt <[email protected]> Tested-by: Peter Robinson <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-14efi: Add a comment about duplicated ELF constantsSimon Glass
These constants are defined in arch-specific code but redefined here. Add a TODO to clean this up. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-14riscv: Add support for HI20 PE relocationsAlexander Graf
The PE standard allows for HI20/LOW12 relocations. Within the efi_loader target we always know that our relocation target is 4k aligned, so we don't need to worry about the LOW12 part. This patch adds support for the respective relocations. With this and a few grub patches I have cooking in parallel I'm able to run grub on RISC-V. Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: Fix warning in raw/cols queryAlexander Graf
The code to determine rows / cols on the screen could potentially run into a case where it doesn't know how big the screen is. In that case, assume 80x25. Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: create handles from normal memoryHeinrich Schuchardt
Handles are not used at runtime. They are freed by the firmware when the last protocol interface is uninstalled. So there is no reason to use EFI memory when creating handles. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: efi_mem_carve_out should return s64Heinrich Schuchardt
efi_mem_carve_out() is used to remove memory pages from a mapping. As the number of pages to be removed is a 64bit type the return type should be 64bit too. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: avoid anonymous constants for AllocatePagesHeinrich Schuchardt
Do not use anonymous constants when calling efi_allocage_pages. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: DocBook comments for boot servicesHeinrich Schuchardt
With 'make htmldocs' we can generate a documentation if the function comments follow the DocBook conventions. This patch adjusts the comments for EFI boot services and provides the DocBook template for the EFI subsystem. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi: Update some comments related to smbios tablesSimon Glass
Clarify the operation of this code with some additional comments. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: implement ReinstallProtocolInterfaceHeinrich Schuchardt
The ReinstallProtocolInterface boot time service is implemented. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: check interface when uninstalling protocolHeinrich Schuchardt
The interface has to be checked in UninstallProtocolInterface. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: fix off-by-one bug in efi_get_variableIvan Gorinov
efi_get_variable() always stores an extra zero byte after the output data. When the returned data size matches the output buffer size, the extra zero byte is stored past the end of the output buffer. Signed-off-by: Ivan Gorinov <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: avoid using unitialized values as console sizeHeinrich Schuchardt
If a request for the console size would be answered with a response with less then three values, uninitialized stack memory would be copied to the number of rows and columns of the terminal. Signed-off-by: Heinrich Schuchardt <[email protected]> Reviewed-by: Simon Glass <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: adjust definitions of variable servicesHeinrich Schuchardt
The definitons of the variable services are adjusted: - use efi_uintn_t instead of unsigned long - use u16 * instead of s16 * for Unicode strings - correct definition of QueryVariableInfo - rename efi_get_next_variable to efi_get_next_variable_name Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: always check parameters in efi_cout_query_mode()Heinrich Schuchardt
If we cannot determine the size of the serial terminal we still have to check the parameters of efi_cout_query_mode(). Querying the size of the serial terminal drains the keyboard buffer. So make sure we do this during the initialization and not in the midst of an EFI application. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: updating the cursor positionHeinrich Schuchardt
The current coding advances the column by the number of UTF-8 bytes. The column should be increased by one per unicode character. The UEFI spec provides advance rules for U+0000, U+0008, U+000A, and U000D. All other characters, including control characters U+0007 (bel) and U+0009 (tab), have to increase the column by one. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: remove unnecessary includeHeinrich Schuchardt
asm/global_data.h is already included via common.h. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: if EFI_LOADER is enabled, enable CFB_CONSOLE_ANSIHeinrich Schuchardt
EFI applications like GRUB issue ANSI sequences for setting colors and for positioning. So if the EFI subsystem is enabled, we should also enable ANSI control sequences by default. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-06-03efi_loader: correctly apply relocations from the .reloc sectionIvan Gorinov
Instead of difference between preferred and actual image base, the actual base is added to the fields specified in the .reloc section. Use ImageBase from PE optional header to compute the delta, exit early if the image is loaded at the preferred address. Signed-off-by: Ivan Gorinov <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-05-29efi_loader: Enable RISC-V supportRick Chen
We have almost all pieces needed to support RISC-V UEFI binaries in place already. The only missing piece are ELF relocations for runtime code and data. This patch adds respective support in the linker script and the runtime relocation code. It also allows users to enable the EFI_LOADER configuration switch on RISC-V platforms. Signed-off-by: Alexander Graf <[email protected]>
2018-05-29efi_loader: Use EFI_CACHELINE_SIZE in the image loader tooAlexander Graf
We were using our EFI_CACHELINE_SIZE define only in the runtime service code, but left the image loader to use plain CONFIG_SYS_CACHELINE_SIZE. This patch moves EFI_CACHELINE_SIZE into efi_loader.h and converts the image loader to use it. Signed-off-by: Alexander Graf <[email protected]>
2018-05-10SPDX: Convert a few files that were missed beforeTom Rini
As part of the main conversion a few files were missed. These files had additional whitespace after the '*' and before the SPDX tag and my previous regex was too strict. This time I did a grep for all SPDX tags and then filtered out anything that matched the correct styles. Fixes: 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style") Reported-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Tom Rini <[email protected]>
2018-05-07SPDX: Convert all of our single license tags to Linux Kernel styleTom Rini
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <[email protected]>
2018-04-27Remove unnecessary instances of DECLARE_GLOBAL_DATA_PTRTom Rini
We have a large number of places where while we historically referenced gd in the code we no longer do, as well as cases where the code added that line "just in case" during development and never dropped it. Signed-off-by: Tom Rini <[email protected]>
2018-04-23efi_loader: complete EFI_DEVICE_PATH_UTILITIES_PROTOCOLHeinrich Schuchardt
The missing services of the EFI_DEVICE_PATH_UTILITIES_PROTOCOL are implemented. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-23efi_loader: correcty determine total device path lengthHeinrich Schuchardt
Device paths may consist of multiple instances. Up to now we have only considered the size of the first instance. For the services of the EFI_DEVICE_PATH_UTILITIES_PROTOCOL in most cases the total length of the device path is relevant. So let's rename efi_dp_size() to efi_dp_instance_size() and create a new function efi_dp_size() that calculates the total device path length. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-23efi_loader: correctly determine length of empty device pathHeinrich Schuchardt
efi_dp_size() is meant to return the device path length without the end node. The length of a device path containing only an end node was incorrectly reported as 4. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-23efi_loader: fix AppendDevicePathHeinrich Schuchardt
The logic of the AppendDevicePath service of the EFI_DEVICE_PATH_UTILITIES_PROTOCOL is incorrectly implemented: * if both paths are NULL an end node has to be returned * if both paths are not NULL the end node of the second device path has to be kept Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-23efi_loader: implement CreateDeviceNodeHeinrich Schuchardt
Implement the CreateDeviceNode service of the device path utility protocol. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-23efi_loader: no support for ARMV7_NONSEC=yHeinrich Schuchardt
We do not support bootefi booting ARMv7 in non-secure mode. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-13Revert "Kconfig: cmd: Make networking command dependent on NET"Joe Hershberger
This reverts the parts of commit 3b3ea2c56ec4bc5588281fd103c744e608f8b25c where it changed the EFI dependency on NET. Signed-off-by: Joe Hershberger <[email protected]> Reviewed-by: Duncan Hare <[email protected]>
2018-04-06efi_loader: Check machine type in the image headerIvan Gorinov
Check FileHeader.Machine to make sure the EFI executable image is built for the same architecture. For example, 32-bit U-Boot on x86 will print an error message instead of loading an x86_64 image and crashing. Signed-off-by: Ivan Gorinov <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-05efi_loader: completely initialize networkHeinrich Schuchardt
Add missing network initialization code. Before the patch the network was only usable if a network command like dhcp or tftp had beed executed. This was visible when interrupting the console countdown and executing bootefi selftest for vexpress_ca15_tc2_defconfig. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-05efi_loader: new functions to print loaded image informationHeinrich Schuchardt
Introduce functions to print information about loaded images. If we want to analyze an exception in an EFI image we need the offset between the PC and the start of the loaded image. With efi_print_image_info() we can print the necessary information for a single image, e.g. UEFI image [0xbffe6000:0xbffe631f] pc=0x138 '/\snp.efi' efi_print_image_infos() provides output for all loaded images. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-05efi_loader: implement EFI_FILE_SYSTEM_INFOHeinrich Schuchardt
Implement the information type EFI_FILE_SYSTEM_INFO in the service GetInfo() of the EFI_FILE_PROTOCOL. The volume label is not available in U-Boot. As a work-around use the partition name instead. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-05efi_loader: use const for GUIDs in the EFI_FILE_PROTOCOLHeinrich Schuchardt
Use const efi_guid_t* when passing GUIDs. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: use correct types in EFI_FILE_PROTOCOLHeinrich Schuchardt
In the EFI_FILE_PROTOCOL buffer sizes and positions are passed as UINTN and not as u64. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: ImageSize must be multiple of SectionAlignmentHeinrich Schuchardt
According to the Portable Executable and Common Object File Format Specification the image size must be a multiple of the alignment of sections. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: save image relocation address and sizeHeinrich Schuchardt
For analyzing crash output the relocation address and size are needed. Save them in the loaded image info. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: use efi_uintn_t for LoadImageHeinrich Schuchardt
We generally use efi_uintn_t where the UEFI spec uses UINTN. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: initialize device path on allocPatrick Wildt
Since the backing memory for a new device path can contain stale data we have to make sure that we zero the buffer. Otherwise some code paths that don't set all fields in a structure backed by this device path might contain unwanted stale data. Signed-off-by: Patrick Wildt <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: Fix network DP with DM_ETHAlexander Graf
When CONFIG_DM_ETH is set, we assemble the device path properly with a full device hierarchy. Our helper function dp_fill() even put the MAC node itself in it for us. However, for non-DM compatibility we also have code in that added the MAC node manually. That code now runs on top of the existing MAC node: Handle 0x3db2f6b0 /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ] /USBClass(0,0,9,0,0)/USBClass(424,9514,9,0,2)/MacAddr(b8:27:eb:e1:81:47,1) /MacAddr(b8:27:eb:e1:81:47,57)/EndEntire We obviously don't need the additional node and in fact, grub chokes on it and fails to match the DP against the ethernet device node. So this patch moves the additional MAC node into the non-DM code path: Handle 0x3db3fde0 /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ] /USBClass(0,0,9,0,0)/USBClass(424,9514,9,0,2)/MacAddr(b8:27:eb:e1:81:47,1) /EndEntire While at it, we also mark the non-DM MAC node as ethernet. Fixes: b66c60dde9d ("efi_loader: add device-path utils") Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: Fix return value for efi_add_runtime_mmioAlexander Graf
The efi_add_runtime_mmio function incorrectly returned the added address as return value rather than EFI_SUCCESS. Fix it by checking the return value of efi_add_memory_map properly. Fixes: f057cfef5dc ("efi_loader: exit status for efi_reset_system_init") Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: Optimize GOP moreAlexander Graf
The GOP path was optimized, but still not as fast as it should be. Let's push it even further by trimming the hot path into simple 32bit load/store operations for buf->vid 32bpp operations. Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: Optimize GOP switchAlexander Graf
We usually try to compile for size, not for speed. Unfortunately with the more powerful GOP infrastructure to handle all sorts of GOP operations, we end up slowing down our copying hot path quite a lot. So this patch moves the 4 possible GOP operation modes into separate functions which call a common function again. The end result of that is more optimized code that can properly do constant propagation throughout its switch() statements and thus removes compares in the hot path. Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: use __always_inline for pixel conversionHeinrich Schuchardt
We optimize for size using -Os so gcc might ignore 'inline'. Pixel conversions are called so often that we always want to inline them. Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>
2018-04-04efi_loader: RestoreTPL should execute queued eventsHeinrich Schuchardt
When the TPL is lowered queued events may become eligible for execution. iPXE uses the following pattern to request event execution: bs->RestoreTPL ( TPL_APPLICATION ); bs->RaiseTPL ( TPL_CALLBACK ); Signed-off-by: Heinrich Schuchardt <[email protected]> Signed-off-by: Alexander Graf <[email protected]>