2022-05-31 18:04:11 +08:00
# SPDX-License-Identifier: GPL-2.0
#
# Author: Huacai Chen <chenhuacai@loongson.cn>
# Copyright (C) 2020-2022 Loongson Technology Corporation Limited
boot := arch/loongarch/boot
2022-05-31 18:04:12 +08:00
KBUILD_DEFCONFIG := loongson3_defconfig
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
i f n d e f C O N F I G _ E F I _ S T U B
KBUILD_IMAGE := $( boot) /vmlinux.elf
e l s e
KBUILD_IMAGE := $( boot) /vmlinux.efi
e n d i f
2022-05-31 18:04:11 +08:00
#
# Select the object file format to substitute into the linker script.
#
64bit-tool-archpref = loongarch64
32bit-bfd = elf32-loongarch
64bit-bfd = elf64-loongarch
32bit-emul = elf32loongarch
64bit-emul = elf64loongarch
i f d e f C O N F I G _ 6 4 B I T
tool-archpref = $( 64bit-tool-archpref)
UTS_MACHINE := loongarch64
e n d i f
i f n e q ( $( SUBARCH ) , $( ARCH ) )
ifeq ( $( CROSS_COMPILE) ,)
CROSS_COMPILE := $( call cc-cross-prefix, $( tool-archpref) -linux- $( tool-archpref) -linux-gnu- $( tool-archpref) -unknown-linux-gnu-)
endif
e n d i f
i f d e f C O N F I G _ 6 4 B I T
ld-emul = $( 64bit-emul)
cflags-y += -mabi= lp64s
e n d i f
cflags-y += -G0 -pipe -msoft-float
LDFLAGS_vmlinux += -G0 -static -n -nostdlib
KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
KBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel
KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
cflags-y += -ffreestanding
cflags-y += $( call cc-option, -mno-check-zero-division)
load-y = 0x9000000000200000
bootvars-y = VMLINUX_LOAD_ADDRESS = $( load-y)
2022-08-06 15:19:33 +08:00
drivers-$(CONFIG_PCI) += arch/loongarch/pci/
2022-05-31 18:04:11 +08:00
KBUILD_AFLAGS += $( cflags-y)
KBUILD_CFLAGS += $( cflags-y)
KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS= $( load-y)
# This is required to get dwarf unwinding tables into .debug_frame
# instead of .eh_frame so we don't discard them.
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
# Don't emit unaligned accesses.
# Not all LoongArch cores support unaligned access, and as kernel we can't
# rely on others to provide emulation for these accesses.
KBUILD_CFLAGS += $( call cc-option,-mstrict-align)
KBUILD_CFLAGS += -isystem $( shell $( CC) -print-file-name= include)
KBUILD_LDFLAGS += -m $( ld-emul)
i f d e f C O N F I G _ L O O N G A R C H
CHECKFLAGS += $( shell $( CC) $( KBUILD_CFLAGS) -dM -E -x c /dev/null | \
egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e " s/ $$ /'/ " -e 's/\$$/&&/g' )
e n d i f
head-y := arch/loongarch/kernel/head.o
libs-y += arch/loongarch/lib/
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
libs-$(CONFIG_EFI_STUB) += $( objtree) /drivers/firmware/efi/libstub/lib.a
2022-05-31 18:04:11 +08:00
i f e q ( $( KBUILD_EXTMOD ) , )
prepare : vdso_prepare
vdso_prepare : prepare 0
$( Q) $( MAKE) $( build) = arch/loongarch/vdso include/generated/vdso-offsets.h
e n d i f
PHONY += vdso_install
vdso_install :
$( Q) $( MAKE) $( build) = arch/loongarch/vdso $@
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
all : $( notdir $ ( KBUILD_IMAGE ) )
2022-05-31 18:04:11 +08:00
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
vmlinux.elf vmlinux.efi : vmlinux
$( Q) $( MAKE) $( build) = $( boot) $( bootvars-y) $( boot) /$@
2022-05-31 18:04:11 +08:00
install :
$( Q) install -D -m 755 $( KBUILD_IMAGE) $( INSTALL_PATH) /vmlinux-$( KERNELRELEASE)
$( Q) install -D -m 644 .config $( INSTALL_PATH) /config-$( KERNELRELEASE)
$( Q) install -D -m 644 System.map $( INSTALL_PATH) /System.map-$( KERNELRELEASE)
d e f i n e a r c h h e l p
echo ' install - install kernel into $(INSTALL_PATH)'
echo
e n d e f