diff --git a/arch/loongarch/kernel/head.S b/arch/loongarch/kernel/head.S index 5536ffc7825c4fb0c9b1749aa97a03d65ce19711..9bfdc718d9f7971148bdb4a7b9a6abb442c2a624 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 88f5d81702dfcf688dd44defac9a1ebd194a6c66..e7e760a02687b26e8ebacdad541703917c0856db 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 8727daa90d649ca198ff946689250f78946eb0da..481807fe2b2967d97fa8dd6b23bda0d9d38fc919 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); }