From 05a63c8b6d85d2de5d3f73ca4c08124767c78764 Mon Sep 17 00:00:00 2001 From: Youling Tang Date: Tue, 17 Jan 2023 19:32:55 +0800 Subject: [PATCH] LoongArch: efistub: Modify the address where efistub jumps to the main kernel LoongArch inclusion category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I736HO -------------------------------- Signed-off-by: Youling Tang Change-Id: I0c7f5360cea6837017de0bd5e3ec3220dfc68add --- arch/loongarch/kernel/head.S | 1 + arch/loongarch/kernel/image-vars.h | 2 +- drivers/firmware/efi/libstub/loongarch-stub.c | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/loongarch/kernel/head.S b/arch/loongarch/kernel/head.S index 5536ffc7825c..9bfdc718d9f7 100644 --- a/arch/loongarch/kernel/head.S +++ b/arch/loongarch/kernel/head.S @@ -30,6 +30,7 @@ _head: pe_header: __EFI_PE_HEADER +SYM_DATA(kernel_entry_rel, .quad kernel_entry); SYM_DATA(kernel_asize, .long _end - _text); SYM_DATA(kernel_fsize, .long _edata - _text); SYM_DATA(kernel_offset, .long kernel_offset - _text); diff --git a/arch/loongarch/kernel/image-vars.h b/arch/loongarch/kernel/image-vars.h index 88f5d81702df..e7e760a02687 100644 --- a/arch/loongarch/kernel/image-vars.h +++ b/arch/loongarch/kernel/image-vars.h @@ -16,7 +16,7 @@ __efistub_strncat = strncat; __efistub_strnstr = strnstr; __efistub_strnlen = strnlen; __efistub_strrchr = strrchr; -__efistub_kernel_entry = kernel_entry; +__efistub_kernel_entry = kernel_entry_rel; __efistub_kernel_asize = kernel_asize; __efistub_kernel_fsize = kernel_fsize; __efistub_kernel_offset = kernel_offset; diff --git a/drivers/firmware/efi/libstub/loongarch-stub.c b/drivers/firmware/efi/libstub/loongarch-stub.c index 8727daa90d64..481807fe2b29 100644 --- a/drivers/firmware/efi/libstub/loongarch-stub.c +++ b/drivers/firmware/efi/libstub/loongarch-stub.c @@ -49,8 +49,7 @@ void __noreturn efi_enter_kernel(unsigned long entrypoint, unsigned long fdt, un csr_write64(CSR_DMW0_INIT, LOONGARCH_CSR_DMWIN0); csr_write64(CSR_DMW1_INIT, LOONGARCH_CSR_DMWIN1); - real_kernel_entry = (kernel_entry_t) - ((unsigned long)&kernel_entry - entrypoint + VMLINUX_LOAD_ADDRESS); + real_kernel_entry = (kernel_entry_t) kernel_entry; real_kernel_entry(true, fdt, 0); } -- GitLab