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