xref: /kvm-unit-tests/lib/riscv/sbi-sse-asm.S (revision 695740795adee59b48599e2f1a6bf19866a77779)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * RISC-V SSE events entry point.
4 *
5 * Copyright (C) 2025, Rivos Inc., Clément Léger <cleger@rivosinc.com>
6 */
7#include <asm/asm.h>
8#include <asm/asm-offsets.h>
9#include <asm/csr.h>
10#include <generated/sbi-asm-offsets.h>
11
12.section .text
13.global sbi_sse_entry
14sbi_sse_entry:
15	/* Save stack temporarily */
16	REG_S	sp, SBI_SSE_REG_TMP(a7)
17	/* Set entry stack */
18	REG_L	sp, SBI_SSE_HANDLER_STACK(a7)
19
20	addi	sp, sp, -(PT_SIZE)
21	REG_S	ra, PT_RA(sp)
22	REG_S	s0, PT_S0(sp)
23	REG_S	s1, PT_S1(sp)
24	REG_S	s2, PT_S2(sp)
25	REG_S	s3, PT_S3(sp)
26	REG_S	s4, PT_S4(sp)
27	REG_S	s5, PT_S5(sp)
28	REG_S	s6, PT_S6(sp)
29	REG_S	s7, PT_S7(sp)
30	REG_S	s8, PT_S8(sp)
31	REG_S	s9, PT_S9(sp)
32	REG_S	s10, PT_S10(sp)
33	REG_S	s11, PT_S11(sp)
34	REG_S	tp, PT_TP(sp)
35	REG_S	t0, PT_T0(sp)
36	REG_S	t1, PT_T1(sp)
37	REG_S	t2, PT_T2(sp)
38	REG_S	t3, PT_T3(sp)
39	REG_S	t4, PT_T4(sp)
40	REG_S	t5, PT_T5(sp)
41	REG_S	t6, PT_T6(sp)
42	REG_S	gp, PT_GP(sp)
43	REG_S	a0, PT_A0(sp)
44	REG_S	a1, PT_A1(sp)
45	REG_S	a2, PT_A2(sp)
46	REG_S	a3, PT_A3(sp)
47	REG_S	a4, PT_A4(sp)
48	REG_S	a5, PT_A5(sp)
49	csrr	a1, CSR_SEPC
50	REG_S	a1, PT_EPC(sp)
51	csrr	a2, CSR_SSTATUS
52	REG_S	a2, PT_STATUS(sp)
53
54	REG_L	a0, SBI_SSE_REG_TMP(a7)
55	REG_S	a0, PT_SP(sp)
56
57	REG_L	t0, SBI_SSE_HANDLER(a7)
58	REG_L	a0, SBI_SSE_HANDLER_DATA(a7)
59	mv	a1, sp
60	mv	a2, a6
61	jalr	t0
62
63	REG_L	a1, PT_EPC(sp)
64	REG_L	a2, PT_STATUS(sp)
65	csrw	CSR_SEPC, a1
66	csrw	CSR_SSTATUS, a2
67
68	REG_L	ra, PT_RA(sp)
69	REG_L	s0, PT_S0(sp)
70	REG_L	s1, PT_S1(sp)
71	REG_L	s2, PT_S2(sp)
72	REG_L	s3, PT_S3(sp)
73	REG_L	s4, PT_S4(sp)
74	REG_L	s5, PT_S5(sp)
75	REG_L	s6, PT_S6(sp)
76	REG_L	s7, PT_S7(sp)
77	REG_L	s8, PT_S8(sp)
78	REG_L	s9, PT_S9(sp)
79	REG_L	s10, PT_S10(sp)
80	REG_L	s11, PT_S11(sp)
81	REG_L	tp, PT_TP(sp)
82	REG_L	t0, PT_T0(sp)
83	REG_L	t1, PT_T1(sp)
84	REG_L	t2, PT_T2(sp)
85	REG_L	t3, PT_T3(sp)
86	REG_L	t4, PT_T4(sp)
87	REG_L	t5, PT_T5(sp)
88	REG_L	t6, PT_T6(sp)
89	REG_L	gp, PT_GP(sp)
90	REG_L	a0, PT_A0(sp)
91	REG_L	a1, PT_A1(sp)
92	REG_L	a2, PT_A2(sp)
93	REG_L	a3, PT_A3(sp)
94	REG_L	a4, PT_A4(sp)
95	REG_L	a5, PT_A5(sp)
96
97	REG_L	sp, PT_SP(sp)
98
99	li	a7, ASM_SBI_EXT_SSE
100	li	a6, ASM_SBI_EXT_SSE_COMPLETE
101	ecall
102
103