| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: cpufunc_asm.S,v 1.16 2013/08/18 06:28:18 matt Exp $ */ | | 1 | /* $NetBSD: cpufunc_asm.S,v 1.17 2021/11/11 07:26:41 skrll Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1997,1998 Mark Brinicombe. | | 4 | * Copyright (c) 1997,1998 Mark Brinicombe. |
5 | * Copyright (c) 1997 Causality Limited | | 5 | * Copyright (c) 1997 Causality Limited |
6 | * All rights reserved. | | 6 | * All rights reserved. |
7 | * | | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | | 9 | * modification, are permitted provided that the following conditions |
10 | * are met: | | 10 | * are met: |
11 | * 1. Redistributions of source code must retain the above copyright | | 11 | * 1. Redistributions of source code must retain the above copyright |
12 | * notice, this list of conditions and the following disclaimer. | | 12 | * notice, this list of conditions and the following disclaimer. |
13 | * 2. Redistributions in binary form must reproduce the above copyright | | 13 | * 2. Redistributions in binary form must reproduce the above copyright |
14 | * notice, this list of conditions and the following disclaimer in the | | 14 | * notice, this list of conditions and the following disclaimer in the |
| @@ -24,33 +24,33 @@ | | | @@ -24,33 +24,33 @@ |
24 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | | 24 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | | 25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
26 | * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT, | | 26 | * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT, |
27 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | | 27 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | 28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
29 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 29 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
30 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 30 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
31 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 31 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
32 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 32 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
33 | * SUCH DAMAGE. | | 33 | * SUCH DAMAGE. |
34 | * | | 34 | * |
35 | * RiscBSD kernel project | | 35 | * RiscBSD kernel project |
36 | * | | 36 | * |
37 | * cpufunc.S | | 37 | * cpufunc.S |
38 | * | | 38 | * |
39 | * Assembly functions for CPU / MMU / TLB specific operations | | 39 | * Assembly functions for CPU / MMU / TLB specific operations |
40 | * | | 40 | * |
41 | * Created : 30/01/97 | | 41 | * Created : 30/01/97 |
42 | */ | | 42 | */ |
43 | | | 43 | |
44 | #include <arm/armreg.h> | | 44 | #include <arm/armreg.h> |
45 | #include <machine/asm.h> | | 45 | #include <machine/asm.h> |
46 | | | 46 | |
47 | .text | | 47 | .text |
48 | .align 0 | | 48 | .align 0 |
49 | | | 49 | |
50 | ENTRY(cpufunc_nullop) | | 50 | ENTRY(cpufunc_nullop) |
51 | RET | | 51 | RET |
52 | END(cpufunc_nullop) | | 52 | END(cpufunc_nullop) |
53 | | | 53 | |
54 | /* | | 54 | /* |
55 | * Generic functions to read the internal coprocessor registers | | 55 | * Generic functions to read the internal coprocessor registers |
56 | * | | 56 | * |
| @@ -81,54 +81,54 @@ ENTRY(cpufunc_faultstatus) | | | @@ -81,54 +81,54 @@ ENTRY(cpufunc_faultstatus) |
81 | RET | | 81 | RET |
82 | END(cpufunc_faultstatus) | | 82 | END(cpufunc_faultstatus) |
83 | | | 83 | |
84 | ENTRY(cpufunc_faultaddress) | | 84 | ENTRY(cpufunc_faultaddress) |
85 | mrc p15, 0, r0, c6, c0, 0 | | 85 | mrc p15, 0, r0, c6, c0, 0 |
86 | RET | | 86 | RET |
87 | END(cpufunc_faultaddress) | | 87 | END(cpufunc_faultaddress) |
88 | | | 88 | |
89 | | | 89 | |
90 | /* | | 90 | /* |
91 | * Generic functions to write the internal coprocessor registers | | 91 | * Generic functions to write the internal coprocessor registers |
92 | * | | 92 | * |
93 | * | | 93 | * |
94 | * Currently these registers are | | 94 | * Currently these registers are |
95 | * c1 - CPU Control | | 95 | * c1 - CPU Control |
96 | * c3 - Domain Access Control | | 96 | * c3 - Domain Access Control |
97 | * | | 97 | * |
98 | * All other registers are CPU architecture specific | | 98 | * All other registers are CPU architecture specific |
99 | */ | | 99 | */ |
100 | | | 100 | |
101 | #if 0 /* See below. */ | | 101 | #if 0 /* See below. */ |
102 | ENTRY(cpufunc_control) | | 102 | ENTRY(cpufunc_control) |
103 | mcr p15, 0, r0, c1, c0, 0 | | 103 | mcr p15, 0, r0, c1, c0, 0 |
104 | RET | | 104 | RET |
105 | #endif | | 105 | #endif |
106 | | | 106 | |
107 | ENTRY(cpufunc_domains) | | 107 | ENTRY(cpufunc_domains) |
108 | mcr p15, 0, r0, c3, c0, 0 | | 108 | mcr p15, 0, r0, c3, c0, 0 |
109 | RET | | 109 | RET |
110 | END(cpufunc_domains) | | 110 | END(cpufunc_domains) |
111 | | | 111 | |
112 | /* | | 112 | /* |
113 | * Generic functions to read/modify/write the internal coprocessor registers | | 113 | * Generic functions to read/modify/write the internal coprocessor registers |
114 | * | | 114 | * |
115 | * | | 115 | * |
116 | * Currently these registers are | | 116 | * Currently these registers are |
117 | * c1 - CPU Control | | 117 | * c1 - CPU Control |
118 | * | | 118 | * |
119 | * All other registers are CPU architecture specific | | 119 | * All other registers are CPU architecture specific |
120 | */ | | 120 | */ |
121 | | | 121 | |
122 | ENTRY(cpufunc_control) | | 122 | ENTRY(cpufunc_control) |
123 | mrc p15, 0, r3, c1, c0, 0 /* Read the control register */ | | 123 | mrc p15, 0, r3, c1, c0, 0 /* Read the control register */ |
124 | bics r2, r3, r0 /* Clear bits */ | | 124 | bics r2, r3, r0 /* Clear bits */ |
125 | eors r2, r2, r1 /* XOR bits */ | | 125 | eors r2, r2, r1 /* XOR bits */ |
126 | | | 126 | |
127 | teq r2, r3 /* Only write if there is a change */ | | 127 | teq r2, r3 /* Only write if there is a change */ |
128 | #ifdef __thumb__ | | 128 | #ifdef __thumb__ |
129 | it ne | | 129 | it ne |
130 | #endif | | 130 | #endif |
131 | mcrne p15, 0, r2, c1, c0, 0 /* Write new control register */ | | 131 | mcrne p15, 0, r2, c1, c0, 0 /* Write new control register */ |
132 | movs r0, r3 /* Return old value */ | | 132 | movs r0, r3 /* Return old value */ |
133 | RET | | 133 | RET |
134 | END(cpufunc_control) | | 134 | END(cpufunc_control) |