efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
/*
|
|
|
|
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/pe.h>
|
|
|
|
#include <linux/sizes.h>
|
|
|
|
|
|
|
|
.macro __EFI_PE_HEADER
|
2025-05-04 20:22:44 +02:00
|
|
|
.long IMAGE_NT_SIGNATURE
|
efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
.Lcoff_header:
|
|
|
|
.short IMAGE_FILE_MACHINE_LOONGARCH64 /* Machine */
|
|
|
|
.short .Lsection_count /* NumberOfSections */
|
|
|
|
.long 0 /* TimeDateStamp */
|
|
|
|
.long 0 /* PointerToSymbolTable */
|
|
|
|
.long 0 /* NumberOfSymbols */
|
|
|
|
.short .Lsection_table - .Loptional_header /* SizeOfOptionalHeader */
|
|
|
|
.short IMAGE_FILE_DEBUG_STRIPPED | \
|
|
|
|
IMAGE_FILE_EXECUTABLE_IMAGE | \
|
|
|
|
IMAGE_FILE_LINE_NUMS_STRIPPED /* Characteristics */
|
|
|
|
|
|
|
|
.Loptional_header:
|
2025-05-04 20:22:44 +02:00
|
|
|
.short IMAGE_NT_OPTIONAL_HDR64_MAGIC /* PE32+ format */
|
efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
.byte 0x02 /* MajorLinkerVersion */
|
|
|
|
.byte 0x14 /* MinorLinkerVersion */
|
|
|
|
.long __inittext_end - .Lefi_header_end /* SizeOfCode */
|
2023-06-29 20:58:42 +08:00
|
|
|
.long _kernel_vsize /* SizeOfInitializedData */
|
efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
.long 0 /* SizeOfUninitializedData */
|
|
|
|
.long __efistub_efi_pe_entry - _head /* AddressOfEntryPoint */
|
|
|
|
.long .Lefi_header_end - _head /* BaseOfCode */
|
|
|
|
|
|
|
|
.Lextra_header_fields:
|
|
|
|
.quad 0 /* ImageBase */
|
|
|
|
.long PECOFF_SEGMENT_ALIGN /* SectionAlignment */
|
|
|
|
.long PECOFF_FILE_ALIGN /* FileAlignment */
|
|
|
|
.short 0 /* MajorOperatingSystemVersion */
|
|
|
|
.short 0 /* MinorOperatingSystemVersion */
|
|
|
|
.short LINUX_EFISTUB_MAJOR_VERSION /* MajorImageVersion */
|
|
|
|
.short LINUX_EFISTUB_MINOR_VERSION /* MinorImageVersion */
|
|
|
|
.short 0 /* MajorSubsystemVersion */
|
|
|
|
.short 0 /* MinorSubsystemVersion */
|
|
|
|
.long 0 /* Win32VersionValue */
|
|
|
|
|
|
|
|
.long _end - _head /* SizeOfImage */
|
|
|
|
|
|
|
|
/* Everything before the kernel image is considered part of the header */
|
|
|
|
.long .Lefi_header_end - _head /* SizeOfHeaders */
|
|
|
|
.long 0 /* CheckSum */
|
|
|
|
.short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
|
|
|
|
.short 0 /* DllCharacteristics */
|
|
|
|
.quad 0 /* SizeOfStackReserve */
|
|
|
|
.quad 0 /* SizeOfStackCommit */
|
|
|
|
.quad 0 /* SizeOfHeapReserve */
|
|
|
|
.quad 0 /* SizeOfHeapCommit */
|
|
|
|
.long 0 /* LoaderFlags */
|
|
|
|
.long (.Lsection_table - .) / 8 /* NumberOfRvaAndSizes */
|
|
|
|
|
|
|
|
.quad 0 /* ExportTable */
|
|
|
|
.quad 0 /* ImportTable */
|
|
|
|
.quad 0 /* ResourceTable */
|
|
|
|
.quad 0 /* ExceptionTable */
|
|
|
|
.quad 0 /* CertificationTable */
|
|
|
|
.quad 0 /* BaseRelocationTable */
|
|
|
|
|
|
|
|
/* Section table */
|
|
|
|
.Lsection_table:
|
|
|
|
.ascii ".text\0\0\0"
|
|
|
|
.long __inittext_end - .Lefi_header_end /* VirtualSize */
|
|
|
|
.long .Lefi_header_end - _head /* VirtualAddress */
|
|
|
|
.long __inittext_end - .Lefi_header_end /* SizeOfRawData */
|
|
|
|
.long .Lefi_header_end - _head /* PointerToRawData */
|
|
|
|
|
|
|
|
.long 0 /* PointerToRelocations */
|
|
|
|
.long 0 /* PointerToLineNumbers */
|
|
|
|
.short 0 /* NumberOfRelocations */
|
|
|
|
.short 0 /* NumberOfLineNumbers */
|
|
|
|
.long IMAGE_SCN_CNT_CODE | \
|
|
|
|
IMAGE_SCN_MEM_READ | \
|
|
|
|
IMAGE_SCN_MEM_EXECUTE /* Characteristics */
|
|
|
|
|
|
|
|
.ascii ".data\0\0\0"
|
2023-06-29 20:58:42 +08:00
|
|
|
.long _kernel_vsize /* VirtualSize */
|
efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
.long __initdata_begin - _head /* VirtualAddress */
|
2023-06-29 20:58:42 +08:00
|
|
|
.long _kernel_rsize /* SizeOfRawData */
|
efi/loongarch: Add efistub booting support
This patch adds efistub booting support, which is the standard UEFI boot
protocol for LoongArch to use.
We use generic efistub, which means we can pass boot information (i.e.,
system table, memory map, kernel command line, initrd) via a light FDT
and drop a lot of non-standard code.
We use a flat mapping to map the efi runtime in the kernel's address
space. In efi, VA = PA; in kernel, VA = PA + PAGE_OFFSET. As a result,
flat mapping is not identity mapping, SetVirtualAddressMap() is still
needed for the efi runtime.
Tested-by: Xi Ruoyao <xry111@xry111.site>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
[ardb: change fpic to fpie as suggested by Xi Ruoyao]
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2022-08-19 18:20:37 +08:00
|
|
|
.long __initdata_begin - _head /* PointerToRawData */
|
|
|
|
|
|
|
|
.long 0 /* PointerToRelocations */
|
|
|
|
.long 0 /* PointerToLineNumbers */
|
|
|
|
.short 0 /* NumberOfRelocations */
|
|
|
|
.short 0 /* NumberOfLineNumbers */
|
|
|
|
.long IMAGE_SCN_CNT_INITIALIZED_DATA | \
|
|
|
|
IMAGE_SCN_MEM_READ | \
|
|
|
|
IMAGE_SCN_MEM_WRITE /* Characteristics */
|
|
|
|
|
|
|
|
.set .Lsection_count, (. - .Lsection_table) / 40
|
|
|
|
|
|
|
|
.balign 0x10000 /* PECOFF_SEGMENT_ALIGN */
|
|
|
|
.Lefi_header_end:
|
|
|
|
.endm
|