| #include <linux/linkage.h> |
| |
| .text |
| .code 32 |
| .fpu neon |
| |
| ENTRY(neon_en_check) |
| mrc p15, 0, r1, c1, c0, 2 |
| tst r1, #(0x3 << 20) |
| beq no_neon |
| |
| fmrx r1, FPEXC |
| tst r1, #(1 << 30) |
| beq no_neon |
| |
| mov r0, #1 |
| b exit |
| |
| no_neon: |
| mov r0, #0 |
| |
| exit: |
| mov pc, lr |
| ENDPROC(neon_en_check) |
| |
| ENTRY(neon_enable) |
| /* Enable the the VFP */ |
| mrc p15, 0, r1, c1, c0, 2 |
| orr r1, r1, #(0x3 << 20) |
| mcr p15, 0, r1, c1, c0, 2 |
| isb |
| fmrx r1, FPEXC |
| orr r1, r1, #(1 << 30) |
| fmxr FPEXC, r1 |
| |
| /* Move back to caller */ |
| mov pc, lr |
| ENDPROC(neon_enable) |
| |
| ENTRY(neon_disable) |
| /* Enable the the VFP */ |
| fmrx r1, FPEXC |
| bic r1, r1, #(1 << 30) |
| fmxr FPEXC, r1 |
| |
| /* Move back to caller */ |
| mov pc, lr |
| ENDPROC(neon_disable) |