Skip to content

Commit 2ebf31d

Browse files
bibo-maochenhuacai
authored andcommitted
KVM: selftests: Add core KVM selftests support for LoongArch
Add core KVM selftests support for LoongArch, it includes exception handler, mmu page table setup and vCPU startup entry support. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
1 parent 21872c7 commit 2ebf31d

File tree

2 files changed

+405
-0
lines changed

2 files changed

+405
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
#include "processor.h"
4+
5+
/* address of refill exception should be 4K aligned */
6+
.balign 4096
7+
.global handle_tlb_refill
8+
handle_tlb_refill:
9+
csrwr t0, LOONGARCH_CSR_TLBRSAVE
10+
csrrd t0, LOONGARCH_CSR_PGD
11+
lddir t0, t0, 3
12+
lddir t0, t0, 1
13+
ldpte t0, 0
14+
ldpte t0, 1
15+
tlbfill
16+
csrrd t0, LOONGARCH_CSR_TLBRSAVE
17+
ertn
18+
19+
/*
20+
* save and restore all gprs except base register,
21+
* and default value of base register is sp ($r3).
22+
*/
23+
.macro save_gprs base
24+
.irp n,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
25+
st.d $r\n, \base, 8 * \n
26+
.endr
27+
.endm
28+
29+
.macro restore_gprs base
30+
.irp n,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
31+
ld.d $r\n, \base, 8 * \n
32+
.endr
33+
.endm
34+
35+
/* address of general exception should be 4K aligned */
36+
.balign 4096
37+
.global handle_exception
38+
handle_exception:
39+
csrwr sp, LOONGARCH_CSR_KS0
40+
csrrd sp, LOONGARCH_CSR_KS1
41+
addi.d sp, sp, -EXREGS_SIZE
42+
43+
save_gprs sp
44+
/* save sp register to stack */
45+
csrrd t0, LOONGARCH_CSR_KS0
46+
st.d t0, sp, 3 * 8
47+
48+
csrrd t0, LOONGARCH_CSR_ERA
49+
st.d t0, sp, PC_OFFSET_EXREGS
50+
csrrd t0, LOONGARCH_CSR_ESTAT
51+
st.d t0, sp, ESTAT_OFFSET_EXREGS
52+
csrrd t0, LOONGARCH_CSR_BADV
53+
st.d t0, sp, BADV_OFFSET_EXREGS
54+
55+
or a0, sp, zero
56+
bl route_exception
57+
restore_gprs sp
58+
csrrd sp, LOONGARCH_CSR_KS0
59+
ertn

0 commit comments

Comments
 (0)