Commit 8cbd5ebf authored by Youling Tang's avatar Youling Tang Committed by Huacai Chen

LoongArch: Add JUMP_VIRT_ADDR macro implementation to avoid using la.abs

Add JUMP_VIRT_ADDR macro implementation to avoid using la.abs directly.
This is a preparation for subsequent patches.
Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent f733f119
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/threads.h> #include <linux/threads.h>
#include <asm/addrspace.h>
#include <asm/asm.h> #include <asm/asm.h>
#include <asm/asmmacro.h> #include <asm/asmmacro.h>
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
...@@ -36,6 +37,14 @@ ...@@ -36,6 +37,14 @@
cfi_restore \reg \offset \docfi cfi_restore \reg \offset \docfi
.endm .endm
/* Jump to the runtime virtual address. */
.macro JUMP_VIRT_ADDR temp1 temp2
li.d \temp1, CACHE_BASE
pcaddi \temp2, 0
or \temp1, \temp1, \temp2
jirl zero, \temp1, 0xc
.endm
.macro BACKUP_T0T1 .macro BACKUP_T0T1
csrwr t0, EXCEPTION_KS0 csrwr t0, EXCEPTION_KS0
csrwr t1, EXCEPTION_KS1 csrwr t1, EXCEPTION_KS1
......
...@@ -50,11 +50,8 @@ SYM_CODE_START(kernel_entry) # kernel entry point ...@@ -50,11 +50,8 @@ SYM_CODE_START(kernel_entry) # kernel entry point
li.d t0, CSR_DMW1_INIT # CA, PLV0, 0x9000 xxxx xxxx xxxx li.d t0, CSR_DMW1_INIT # CA, PLV0, 0x9000 xxxx xxxx xxxx
csrwr t0, LOONGARCH_CSR_DMWIN1 csrwr t0, LOONGARCH_CSR_DMWIN1
/* We might not get launched at the address the kernel is linked to, JUMP_VIRT_ADDR t0, t1
so we jump there. */
la.abs t0, 0f
jr t0
0:
/* Enable PG */ /* Enable PG */
li.w t0, 0xb0 # PLV=0, IE=0, PG=1 li.w t0, 0xb0 # PLV=0, IE=0, PG=1
csrwr t0, LOONGARCH_CSR_CRMD csrwr t0, LOONGARCH_CSR_CRMD
...@@ -106,9 +103,8 @@ SYM_CODE_START(smpboot_entry) ...@@ -106,9 +103,8 @@ SYM_CODE_START(smpboot_entry)
li.d t0, CSR_DMW1_INIT # CA, PLV0 li.d t0, CSR_DMW1_INIT # CA, PLV0
csrwr t0, LOONGARCH_CSR_DMWIN1 csrwr t0, LOONGARCH_CSR_DMWIN1
la.abs t0, 0f JUMP_VIRT_ADDR t0, t1
jr t0
0:
/* Enable PG */ /* Enable PG */
li.w t0, 0xb0 # PLV=0, IE=0, PG=1 li.w t0, 0xb0 # PLV=0, IE=0, PG=1
csrwr t0, LOONGARCH_CSR_CRMD csrwr t0, LOONGARCH_CSR_CRMD
......
...@@ -78,9 +78,8 @@ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL) ...@@ -78,9 +78,8 @@ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
li.d t0, CSR_DMW1_INIT # CA, PLV0 li.d t0, CSR_DMW1_INIT # CA, PLV0
csrwr t0, LOONGARCH_CSR_DMWIN1 csrwr t0, LOONGARCH_CSR_DMWIN1
la.abs t0, 0f JUMP_VIRT_ADDR t0, t1
jr t0
0:
la.pcrel t0, acpi_saved_sp la.pcrel t0, acpi_saved_sp
ld.d sp, t0, 0 ld.d sp, t0, 0
SETUP_WAKEUP SETUP_WAKEUP
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment