C?sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget!/translations/zh_CN/arch/arm/uefimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/zh_TW/arch/arm/uefimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/it_IT/arch/arm/uefimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ja_JP/arch/arm/uefimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ko_KR/arch/arm/uefimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/sp_SP/arch/arm/uefimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h0The Unified Extensible Firmware Interface (UEFI)h]h0The Unified Extensible Firmware Interface (UEFI)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh;/var/lib/git/docbuild/linux/Documentation/arch/arm/uefi.rsthKubh paragraph)}(hUEFI, the Unified Extensible Firmware Interface, is a specification governing the behaviours of compatible firmware interfaces. It is maintained by the UEFI Forum - http://www.uefi.org/.h](hUEFI, the Unified Extensible Firmware Interface, is a specification governing the behaviours of compatible firmware interfaces. It is maintained by the UEFI Forum - }(hhhhhNhNubh reference)}(hhttp://www.uefi.org/h]hhttp://www.uefi.org/}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurihuh1hhhubh.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hUEFI is an evolution of its predecessor 'EFI', so the terms EFI and UEFI are used somewhat interchangeably in this document and associated source code. As a rule, anything new uses 'UEFI', whereas 'EFI' refers to legacy code or specifications.h]hUEFI is an evolution of its predecessor ‘EFI’, so the terms EFI and UEFI are used somewhat interchangeably in this document and associated source code. As a rule, anything new uses ‘UEFI’, whereas ‘EFI’ refers to legacy code or specifications.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hUEFI support in Linuxh]hUEFI support in Linux}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hBooting on a platform with firmware compliant with the UEFI specification makes it possible for the kernel to support additional features:h]hBooting on a platform with firmware compliant with the UEFI specification makes it possible for the kernel to support additional features:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh bullet_list)}(hhh](h list_item)}(hUEFI Runtime Servicesh]h)}(hjh]hUEFI Runtime Services}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hRetrieving various configuration information through the standardised interface of UEFI configuration tables. (ACPI, SMBIOS, ...) h]h)}(hRetrieving various configuration information through the standardised interface of UEFI configuration tables. (ACPI, SMBIOS, ...)h]hRetrieving various configuration information through the standardised interface of UEFI configuration tables. (ACPI, SMBIOS, ...)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1j hhhKhhhhubh)}(h-For actually enabling [U]EFI support, enable:h]h-For actually enabling [U]EFI support, enable:}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubj )}(hhh](j)}(h CONFIG_EFI=yh]h)}(hjZh]h CONFIG_EFI=y}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXubah}(h]h ]h"]h$]h&]uh1jhjUhhhhhNubj)}(hCONFIG_EFIVAR_FS=y or m h]h)}(hCONFIG_EFIVAR_FS=y or mh]hCONFIG_EFIVAR_FS=y or m}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjoubah}(h]h ]h"]h$]h&]uh1jhjUhhhhhNubeh}(h]h ]h"]h$]h&]jEjFuh1j hhhKhhhhubh)}(hThe implementation depends on receiving information about the UEFI environment in a Flattened Device Tree (FDT) - so is only available with CONFIG_OF.h]hThe implementation depends on receiving information about the UEFI environment in a Flattened Device Tree (FDT) - so is only available with CONFIG_OF.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]uefi-support-in-linuxah ]h"]uefi support in linuxah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h UEFI stubh]h UEFI stub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hX The "stub" is a feature that extends the Image/zImage into a valid UEFI PE/COFF executable, including a loader application that makes it possible to load the kernel directly from the UEFI shell, boot menu, or one of the lightweight bootloaders like Gummiboot or rEFInd.h]hXThe “stub” is a feature that extends the Image/zImage into a valid UEFI PE/COFF executable, including a loader application that makes it possible to load the kernel directly from the UEFI shell, boot menu, or one of the lightweight bootloaders like Gummiboot or rEFInd.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubh)}(hkThe kernel image built with stub support remains a valid kernel image for booting in non-UEFI environments.h]hkThe kernel image built with stub support remains a valid kernel image for booting in non-UEFI environments.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubeh}(h] uefi-stubah ]h"] uefi stubah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hUEFI kernel support on ARMh]hUEFI kernel support on ARM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK*ubh)}(hwUEFI kernel support on the ARM architectures (arm and arm64) is only available when boot is performed through the stub.h]hwUEFI kernel support on the ARM architectures (arm and arm64) is only available when boot is performed through the stub.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hjhhubh)}(hWhen booting in UEFI mode, the stub deletes any memory nodes from a provided DT. Instead, the kernel reads the UEFI memory map.h]hWhen booting in UEFI mode, the stub deletes any memory nodes from a provided DT. Instead, the kernel reads the UEFI memory map.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubh)}(haThe stub populates the FDT /chosen node with (and the kernel scans for) the following parameters:h]haThe stub populates the FDT /chosen node with (and the kernel scans for) the following parameters:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK+uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hNameh]hName}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjIubah}(h]h ]h"]h$]h&]uh1jGhjDubjH)}(hhh]h)}(hTypeh]hType}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hj`ubah}(h]h ]h"]h$]h&]uh1jGhjDubjH)}(hhh]h)}(h Descriptionh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjwubah}(h]h ]h"]h$]h&]uh1jGhjDubeh}(h]h ]h"]h$]h&]uh1jBhj?ubah}(h]h ]h"]h$]h&]uh1j=hjubhtbody)}(hhh](jC)}(hhh](jH)}(hhh]h)}(hlinux,uefi-system-tableh]hlinux,uefi-system-table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(hhh]h)}(h64-bith]h64-bit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(hhh]h)}(h*Physical address of the UEFI System Table.h]h*Physical address of the UEFI System Table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jGhjubeh}(h]h ]h"]h$]h&]uh1jBhjubjC)}(hhh](jH)}(hhh]h)}(hlinux,uefi-mmap-starth]hlinux,uefi-mmap-start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(hhh]h)}(h64-bith]h64-bit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jGhjubjH)}(hhh]h)}(hSPhysical address of the UEFI memory map, populated by the UEFI GetMemoryMap() call.h]hSPhysical address of the UEFI memory map, populated by the UEFI GetMemoryMap() call.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjubah}(h]h ]h"]h$]h&]uh1jGhjubeh}(h]h ]h"]h$]h&]uh1jBhjubjC)}(hhh](jH)}(hhh]h)}(hlinux,uefi-mmap-sizeh]hlinux,uefi-mmap-size}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKubah}(h]h ]h"]h$]h&]uh1jGhj;ubjH)}(hhh]h)}(h32-bith]h32-bit}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK