blob: ab13f3e50ae0d813c438fd2be29c3673948c9fe1 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#include <linux/linkage.h>
2
3.text
4.code 32
5.fpu neon
6
7ENTRY(neon_en_check)
8 mrc p15, 0, r1, c1, c0, 2
9 tst r1, #(0x3 << 20)
10 beq no_neon
11
12 fmrx r1, FPEXC
13 tst r1, #(1 << 30)
14 beq no_neon
15
16 mov r0, #1
17 b exit
18
19no_neon:
20 mov r0, #0
21
22exit:
23 mov pc, lr
24ENDPROC(neon_en_check)
25
26ENTRY(neon_enable)
27 /* Enable the the VFP */
28 mrc p15, 0, r1, c1, c0, 2
29 orr r1, r1, #(0x3 << 20)
30 mcr p15, 0, r1, c1, c0, 2
31 isb
32 fmrx r1, FPEXC
33 orr r1, r1, #(1 << 30)
34 fmxr FPEXC, r1
35
36 /* Move back to caller */
37 mov pc, lr
38ENDPROC(neon_enable)
39
40ENTRY(neon_disable)
41 /* Enable the the VFP */
42 fmrx r1, FPEXC
43 bic r1, r1, #(1 << 30)
44 fmxr FPEXC, r1
45
46 /* Move back to caller */
47 mov pc, lr
48ENDPROC(neon_disable)