arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / arch / loongarch / kernel / rethook_trampoline.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 #include <linux/linkage.h>
3 #include <asm/stackframe.h>
4
5         .text
6
7         .macro save_all_base_regs
8         cfi_st  ra, PT_R1
9         cfi_st  tp, PT_R2
10         cfi_st  a0, PT_R4
11         cfi_st  a1, PT_R5
12         cfi_st  a2, PT_R6
13         cfi_st  a3, PT_R7
14         cfi_st  a4, PT_R8
15         cfi_st  a5, PT_R9
16         cfi_st  a6, PT_R10
17         cfi_st  a7, PT_R11
18         cfi_st  t0, PT_R12
19         cfi_st  t1, PT_R13
20         cfi_st  t2, PT_R14
21         cfi_st  t3, PT_R15
22         cfi_st  t4, PT_R16
23         cfi_st  t5, PT_R17
24         cfi_st  t6, PT_R18
25         cfi_st  t7, PT_R19
26         cfi_st  t8, PT_R20
27         cfi_st  u0, PT_R21
28         cfi_st  fp, PT_R22
29         cfi_st  s0, PT_R23
30         cfi_st  s1, PT_R24
31         cfi_st  s2, PT_R25
32         cfi_st  s3, PT_R26
33         cfi_st  s4, PT_R27
34         cfi_st  s5, PT_R28
35         cfi_st  s6, PT_R29
36         cfi_st  s7, PT_R30
37         cfi_st  s8, PT_R31
38         csrrd   t0, LOONGARCH_CSR_CRMD
39         andi    t0, t0, 0x7 /* extract bit[1:0] PLV, bit[2] IE */
40         LONG_S  t0, sp, PT_CRMD
41         .endm
42
43         .macro restore_all_base_regs
44         cfi_ld  tp, PT_R2
45         cfi_ld  a0, PT_R4
46         cfi_ld  a1, PT_R5
47         cfi_ld  a2, PT_R6
48         cfi_ld  a3, PT_R7
49         cfi_ld  a4, PT_R8
50         cfi_ld  a5, PT_R9
51         cfi_ld  a6, PT_R10
52         cfi_ld  a7, PT_R11
53         cfi_ld  t0, PT_R12
54         cfi_ld  t1, PT_R13
55         cfi_ld  t2, PT_R14
56         cfi_ld  t3, PT_R15
57         cfi_ld  t4, PT_R16
58         cfi_ld  t5, PT_R17
59         cfi_ld  t6, PT_R18
60         cfi_ld  t7, PT_R19
61         cfi_ld  t8, PT_R20
62         cfi_ld  u0, PT_R21
63         cfi_ld  fp, PT_R22
64         cfi_ld  s0, PT_R23
65         cfi_ld  s1, PT_R24
66         cfi_ld  s2, PT_R25
67         cfi_ld  s3, PT_R26
68         cfi_ld  s4, PT_R27
69         cfi_ld  s5, PT_R28
70         cfi_ld  s6, PT_R29
71         cfi_ld  s7, PT_R30
72         cfi_ld  s8, PT_R31
73         LONG_L  t0, sp, PT_CRMD
74         li.d    t1, 0x7 /* mask bit[1:0] PLV, bit[2] IE */
75         csrxchg t0, t1, LOONGARCH_CSR_CRMD
76         .endm
77
78 SYM_CODE_START(arch_rethook_trampoline)
79         addi.d  sp, sp, -PT_SIZE
80         save_all_base_regs
81
82         addi.d  t0, sp, PT_SIZE
83         LONG_S  t0, sp, PT_R3
84
85         move a0, sp /* pt_regs */
86
87         bl arch_rethook_trampoline_callback
88
89         /* use the result as the return-address */
90         move ra, a0
91
92         restore_all_base_regs
93         addi.d  sp, sp, PT_SIZE
94
95         jr ra
96 SYM_CODE_END(arch_rethook_trampoline)