| @@ -1,776 +1,776 @@ | | | @@ -1,776 +1,776 @@ |
1 | /* $NetBSD: armreg.h,v 1.77 2013/06/12 02:08:02 matt Exp $ */ | | 1 | /* $NetBSD: armreg.h,v 1.78 2013/06/12 05:25:58 matt Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1998, 2001 Ben Harris | | 4 | * Copyright (c) 1998, 2001 Ben Harris |
5 | * Copyright (c) 1994-1996 Mark Brinicombe. | | 5 | * Copyright (c) 1994-1996 Mark Brinicombe. |
6 | * Copyright (c) 1994 Brini. | | 6 | * Copyright (c) 1994 Brini. |
7 | * All rights reserved. | | 7 | * All rights reserved. |
8 | * | | 8 | * |
9 | * This code is derived from software written for Brini by Mark Brinicombe | | 9 | * This code is derived from software written for Brini by Mark Brinicombe |
10 | * | | 10 | * |
11 | * Redistribution and use in source and binary forms, with or without | | 11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions | | 12 | * modification, are permitted provided that the following conditions |
13 | * are met: | | 13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright | | 14 | * 1. Redistributions of source code must retain the above copyright |
15 | * notice, this list of conditions and the following disclaimer. | | 15 | * notice, this list of conditions and the following disclaimer. |
16 | * 2. Redistributions in binary form must reproduce the above copyright | | 16 | * 2. Redistributions in binary form must reproduce the above copyright |
17 | * notice, this list of conditions and the following disclaimer in the | | 17 | * notice, this list of conditions and the following disclaimer in the |
18 | * documentation and/or other materials provided with the distribution. | | 18 | * documentation and/or other materials provided with the distribution. |
19 | * 3. All advertising materials mentioning features or use of this software | | 19 | * 3. All advertising materials mentioning features or use of this software |
20 | * must display the following acknowledgement: | | 20 | * must display the following acknowledgement: |
21 | * This product includes software developed by Brini. | | 21 | * This product includes software developed by Brini. |
22 | * 4. The name of the company nor the name of the author may be used to | | 22 | * 4. The name of the company nor the name of the author may be used to |
23 | * endorse or promote products derived from this software without specific | | 23 | * endorse or promote products derived from this software without specific |
24 | * prior written permission. | | 24 | * prior written permission. |
25 | * | | 25 | * |
26 | * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED | | 26 | * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED |
27 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | | 27 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
28 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | | 28 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
29 | * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | | 29 | * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
30 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | | 30 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
31 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | 31 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
32 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 32 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
33 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 33 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
34 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 34 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
35 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 35 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
36 | * SUCH DAMAGE. | | 36 | * SUCH DAMAGE. |
37 | */ | | 37 | */ |
38 | | | 38 | |
39 | #ifndef _ARM_ARMREG_H | | 39 | #ifndef _ARM_ARMREG_H |
40 | #define _ARM_ARMREG_H | | 40 | #define _ARM_ARMREG_H |
41 | | | 41 | |
42 | /* | | 42 | /* |
43 | * ARM Process Status Register | | 43 | * ARM Process Status Register |
44 | * | | 44 | * |
45 | * The picture in the ARM manuals looks like this: | | 45 | * The picture in the ARM manuals looks like this: |
46 | * 3 3 2 2 2 2 | | 46 | * 3 3 2 2 2 2 |
47 | * 1 0 9 8 7 6 8 7 6 5 4 0 | | 47 | * 1 0 9 8 7 6 8 7 6 5 4 0 |
48 | * +-+-+-+-+-+-------------------------------------+-+-+-+---------+ | | 48 | * +-+-+-+-+-+-------------------------------------+-+-+-+---------+ |
49 | * |N|Z|C|V|Q| reserved |I|F|T|M M M M M| | | 49 | * |N|Z|C|V|Q| reserved |I|F|T|M M M M M| |
50 | * | | | | | | | | | |4 3 2 1 0| | | 50 | * | | | | | | | | | |4 3 2 1 0| |
51 | * +-+-+-+-+-+-------------------------------------+-+-+-+---------+ | | 51 | * +-+-+-+-+-+-------------------------------------+-+-+-+---------+ |
52 | */ | | 52 | */ |
53 | | | 53 | |
54 | #define PSR_FLAGS 0xf0000000 /* flags */ | | 54 | #define PSR_FLAGS 0xf0000000 /* flags */ |
55 | #define PSR_N_bit (1 << 31) /* negative */ | | 55 | #define PSR_N_bit (1 << 31) /* negative */ |
56 | #define PSR_Z_bit (1 << 30) /* zero */ | | 56 | #define PSR_Z_bit (1 << 30) /* zero */ |
57 | #define PSR_C_bit (1 << 29) /* carry */ | | 57 | #define PSR_C_bit (1 << 29) /* carry */ |
58 | #define PSR_V_bit (1 << 28) /* overflow */ | | 58 | #define PSR_V_bit (1 << 28) /* overflow */ |
59 | | | 59 | |
60 | #define PSR_Q_bit (1 << 27) /* saturation */ | | 60 | #define PSR_Q_bit (1 << 27) /* saturation */ |
61 | | | 61 | |
62 | #define I32_bit (1 << 7) /* IRQ disable */ | | 62 | #define I32_bit (1 << 7) /* IRQ disable */ |
63 | #define F32_bit (1 << 6) /* FIQ disable */ | | 63 | #define F32_bit (1 << 6) /* FIQ disable */ |
64 | #define IF32_bits (3 << 6) /* IRQ/FIQ disable */ | | 64 | #define IF32_bits (3 << 6) /* IRQ/FIQ disable */ |
65 | | | 65 | |
66 | #define PSR_T_bit (1 << 5) /* Thumb state */ | | 66 | #define PSR_T_bit (1 << 5) /* Thumb state */ |
67 | #define PSR_J_bit (1 << 24) /* Java mode */ | | 67 | #define PSR_J_bit (1 << 24) /* Java mode */ |
68 | | | 68 | |
69 | #define PSR_MODE 0x0000001f /* mode mask */ | | 69 | #define PSR_MODE 0x0000001f /* mode mask */ |
70 | #define PSR_USR26_MODE 0x00000000 | | 70 | #define PSR_USR26_MODE 0x00000000 |
71 | #define PSR_FIQ26_MODE 0x00000001 | | 71 | #define PSR_FIQ26_MODE 0x00000001 |
72 | #define PSR_IRQ26_MODE 0x00000002 | | 72 | #define PSR_IRQ26_MODE 0x00000002 |
73 | #define PSR_SVC26_MODE 0x00000003 | | 73 | #define PSR_SVC26_MODE 0x00000003 |
74 | #define PSR_USR32_MODE 0x00000010 | | 74 | #define PSR_USR32_MODE 0x00000010 |
75 | #define PSR_FIQ32_MODE 0x00000011 | | 75 | #define PSR_FIQ32_MODE 0x00000011 |
76 | #define PSR_IRQ32_MODE 0x00000012 | | 76 | #define PSR_IRQ32_MODE 0x00000012 |
77 | #define PSR_SVC32_MODE 0x00000013 | | 77 | #define PSR_SVC32_MODE 0x00000013 |
78 | #define PSR_MON32_MODE 0x00000016 | | 78 | #define PSR_MON32_MODE 0x00000016 |
79 | #define PSR_ABT32_MODE 0x00000017 | | 79 | #define PSR_ABT32_MODE 0x00000017 |
80 | #define PSR_HYP32_MODE 0x0000001a | | 80 | #define PSR_HYP32_MODE 0x0000001a |
81 | #define PSR_UND32_MODE 0x0000001b | | 81 | #define PSR_UND32_MODE 0x0000001b |
82 | #define PSR_SYS32_MODE 0x0000001f | | 82 | #define PSR_SYS32_MODE 0x0000001f |
83 | #define PSR_32_MODE 0x00000010 | | 83 | #define PSR_32_MODE 0x00000010 |
84 | | | 84 | |
85 | #define PSR_IN_USR_MODE(psr) (!((psr) & 3)) /* XXX */ | | 85 | #define PSR_IN_USR_MODE(psr) (!((psr) & 3)) /* XXX */ |
86 | #define PSR_IN_32_MODE(psr) ((psr) & PSR_32_MODE) | | 86 | #define PSR_IN_32_MODE(psr) ((psr) & PSR_32_MODE) |
87 | | | 87 | |
88 | /* In 26-bit modes, the PSR is stuffed into R15 along with the PC. */ | | 88 | /* In 26-bit modes, the PSR is stuffed into R15 along with the PC. */ |
89 | | | 89 | |
90 | #define R15_MODE 0x00000003 | | 90 | #define R15_MODE 0x00000003 |
91 | #define R15_MODE_USR 0x00000000 | | 91 | #define R15_MODE_USR 0x00000000 |
92 | #define R15_MODE_FIQ 0x00000001 | | 92 | #define R15_MODE_FIQ 0x00000001 |
93 | #define R15_MODE_IRQ 0x00000002 | | 93 | #define R15_MODE_IRQ 0x00000002 |
94 | #define R15_MODE_SVC 0x00000003 | | 94 | #define R15_MODE_SVC 0x00000003 |
95 | | | 95 | |
96 | #define R15_PC 0x03fffffc | | 96 | #define R15_PC 0x03fffffc |
97 | | | 97 | |
98 | #define R15_FIQ_DISABLE 0x04000000 | | 98 | #define R15_FIQ_DISABLE 0x04000000 |
99 | #define R15_IRQ_DISABLE 0x08000000 | | 99 | #define R15_IRQ_DISABLE 0x08000000 |
100 | | | 100 | |
101 | #define R15_FLAGS 0xf0000000 | | 101 | #define R15_FLAGS 0xf0000000 |
102 | #define R15_FLAG_N 0x80000000 | | 102 | #define R15_FLAG_N 0x80000000 |
103 | #define R15_FLAG_Z 0x40000000 | | 103 | #define R15_FLAG_Z 0x40000000 |
104 | #define R15_FLAG_C 0x20000000 | | 104 | #define R15_FLAG_C 0x20000000 |
105 | #define R15_FLAG_V 0x10000000 | | 105 | #define R15_FLAG_V 0x10000000 |
106 | | | 106 | |
107 | /* | | 107 | /* |
108 | * Co-processor 15: The system control co-processor. | | 108 | * Co-processor 15: The system control co-processor. |
109 | */ | | 109 | */ |
110 | | | 110 | |
111 | #define ARM_CP15_CPU_ID 0 | | 111 | #define ARM_CP15_CPU_ID 0 |
112 | | | 112 | |
113 | /* | | 113 | /* |
114 | * The CPU ID register is theoretically structured, but the definitions of | | 114 | * The CPU ID register is theoretically structured, but the definitions of |
115 | * the fields keep changing. | | 115 | * the fields keep changing. |
116 | */ | | 116 | */ |
117 | | | 117 | |
118 | /* The high-order byte is always the implementor */ | | 118 | /* The high-order byte is always the implementor */ |
119 | #define CPU_ID_IMPLEMENTOR_MASK 0xff000000 | | 119 | #define CPU_ID_IMPLEMENTOR_MASK 0xff000000 |
120 | #define CPU_ID_ARM_LTD 0x41000000 /* 'A' */ | | 120 | #define CPU_ID_ARM_LTD 0x41000000 /* 'A' */ |
121 | #define CPU_ID_DEC 0x44000000 /* 'D' */ | | 121 | #define CPU_ID_DEC 0x44000000 /* 'D' */ |
122 | #define CPU_ID_INTEL 0x69000000 /* 'i' */ | | 122 | #define CPU_ID_INTEL 0x69000000 /* 'i' */ |
123 | #define CPU_ID_TI 0x54000000 /* 'T' */ | | 123 | #define CPU_ID_TI 0x54000000 /* 'T' */ |
124 | #define CPU_ID_MARVELL 0x56000000 /* 'V' */ | | 124 | #define CPU_ID_MARVELL 0x56000000 /* 'V' */ |
125 | #define CPU_ID_FARADAY 0x66000000 /* 'f' */ | | 125 | #define CPU_ID_FARADAY 0x66000000 /* 'f' */ |
126 | | | 126 | |
127 | /* How to decide what format the CPUID is in. */ | | 127 | /* How to decide what format the CPUID is in. */ |
128 | #define CPU_ID_ISOLD(x) (((x) & 0x0000f000) == 0x00000000) | | 128 | #define CPU_ID_ISOLD(x) (((x) & 0x0000f000) == 0x00000000) |
129 | #define CPU_ID_IS7(x) (((x) & 0x0000f000) == 0x00007000) | | 129 | #define CPU_ID_IS7(x) (((x) & 0x0000f000) == 0x00007000) |
130 | #define CPU_ID_ISNEW(x) (!CPU_ID_ISOLD(x) && !CPU_ID_IS7(x)) | | 130 | #define CPU_ID_ISNEW(x) (!CPU_ID_ISOLD(x) && !CPU_ID_IS7(x)) |
131 | | | 131 | |
132 | /* On ARM3 and ARM6, this byte holds the foundry ID. */ | | 132 | /* On ARM3 and ARM6, this byte holds the foundry ID. */ |
133 | #define CPU_ID_FOUNDRY_MASK 0x00ff0000 | | 133 | #define CPU_ID_FOUNDRY_MASK 0x00ff0000 |
134 | #define CPU_ID_FOUNDRY_VLSI 0x00560000 | | 134 | #define CPU_ID_FOUNDRY_VLSI 0x00560000 |
135 | | | 135 | |
136 | /* On ARM7 it holds the architecture and variant (sub-model) */ | | 136 | /* On ARM7 it holds the architecture and variant (sub-model) */ |
137 | #define CPU_ID_7ARCH_MASK 0x00800000 | | 137 | #define CPU_ID_7ARCH_MASK 0x00800000 |
138 | #define CPU_ID_7ARCH_V3 0x00000000 | | 138 | #define CPU_ID_7ARCH_V3 0x00000000 |
139 | #define CPU_ID_7ARCH_V4T 0x00800000 | | 139 | #define CPU_ID_7ARCH_V4T 0x00800000 |
140 | #define CPU_ID_7VARIANT_MASK 0x007f0000 | | 140 | #define CPU_ID_7VARIANT_MASK 0x007f0000 |
141 | | | 141 | |
142 | /* On more recent ARMs, it does the same, but in a different format */ | | 142 | /* On more recent ARMs, it does the same, but in a different format */ |
143 | #define CPU_ID_ARCH_MASK 0x000f0000 | | 143 | #define CPU_ID_ARCH_MASK 0x000f0000 |
144 | #define CPU_ID_ARCH_V3 0x00000000 | | 144 | #define CPU_ID_ARCH_V3 0x00000000 |
145 | #define CPU_ID_ARCH_V4 0x00010000 | | 145 | #define CPU_ID_ARCH_V4 0x00010000 |
146 | #define CPU_ID_ARCH_V4T 0x00020000 | | 146 | #define CPU_ID_ARCH_V4T 0x00020000 |
147 | #define CPU_ID_ARCH_V5 0x00030000 | | 147 | #define CPU_ID_ARCH_V5 0x00030000 |
148 | #define CPU_ID_ARCH_V5T 0x00040000 | | 148 | #define CPU_ID_ARCH_V5T 0x00040000 |
149 | #define CPU_ID_ARCH_V5TE 0x00050000 | | 149 | #define CPU_ID_ARCH_V5TE 0x00050000 |
150 | #define CPU_ID_ARCH_V5TEJ 0x00060000 | | 150 | #define CPU_ID_ARCH_V5TEJ 0x00060000 |
151 | #define CPU_ID_ARCH_V6 0x00070000 | | 151 | #define CPU_ID_ARCH_V6 0x00070000 |
152 | #define CPU_ID_VARIANT_MASK 0x00f00000 | | 152 | #define CPU_ID_VARIANT_MASK 0x00f00000 |
153 | | | 153 | |
154 | /* Next three nybbles are part number */ | | 154 | /* Next three nybbles are part number */ |
155 | #define CPU_ID_PARTNO_MASK 0x0000fff0 | | 155 | #define CPU_ID_PARTNO_MASK 0x0000fff0 |
156 | | | 156 | |
157 | /* Intel XScale has sub fields in part number */ | | 157 | /* Intel XScale has sub fields in part number */ |
158 | #define CPU_ID_XSCALE_COREGEN_MASK 0x0000e000 /* core generation */ | | 158 | #define CPU_ID_XSCALE_COREGEN_MASK 0x0000e000 /* core generation */ |
159 | #define CPU_ID_XSCALE_COREREV_MASK 0x00001c00 /* core revision */ | | 159 | #define CPU_ID_XSCALE_COREREV_MASK 0x00001c00 /* core revision */ |
160 | #define CPU_ID_XSCALE_PRODUCT_MASK 0x000003f0 /* product number */ | | 160 | #define CPU_ID_XSCALE_PRODUCT_MASK 0x000003f0 /* product number */ |
161 | | | 161 | |
162 | /* And finally, the revision number. */ | | 162 | /* And finally, the revision number. */ |
163 | #define CPU_ID_REVISION_MASK 0x0000000f | | 163 | #define CPU_ID_REVISION_MASK 0x0000000f |
164 | | | 164 | |
165 | /* Individual CPUs are probably best IDed by everything but the revision. */ | | 165 | /* Individual CPUs are probably best IDed by everything but the revision. */ |
166 | #define CPU_ID_CPU_MASK 0xfffffff0 | | 166 | #define CPU_ID_CPU_MASK 0xfffffff0 |
167 | | | 167 | |
168 | /* Fake CPU IDs for ARMs without CP15 */ | | 168 | /* Fake CPU IDs for ARMs without CP15 */ |
169 | #define CPU_ID_ARM2 0x41560200 | | 169 | #define CPU_ID_ARM2 0x41560200 |
170 | #define CPU_ID_ARM250 0x41560250 | | 170 | #define CPU_ID_ARM250 0x41560250 |
171 | | | 171 | |
172 | /* Pre-ARM7 CPUs -- [15:12] == 0 */ | | 172 | /* Pre-ARM7 CPUs -- [15:12] == 0 */ |
173 | #define CPU_ID_ARM3 0x41560300 | | 173 | #define CPU_ID_ARM3 0x41560300 |
174 | #define CPU_ID_ARM600 0x41560600 | | 174 | #define CPU_ID_ARM600 0x41560600 |
175 | #define CPU_ID_ARM610 0x41560610 | | 175 | #define CPU_ID_ARM610 0x41560610 |
176 | #define CPU_ID_ARM620 0x41560620 | | 176 | #define CPU_ID_ARM620 0x41560620 |
177 | | | 177 | |
178 | /* ARM7 CPUs -- [15:12] == 7 */ | | 178 | /* ARM7 CPUs -- [15:12] == 7 */ |
179 | #define CPU_ID_ARM700 0x41007000 /* XXX This is a guess. */ | | 179 | #define CPU_ID_ARM700 0x41007000 /* XXX This is a guess. */ |
180 | #define CPU_ID_ARM710 0x41007100 | | 180 | #define CPU_ID_ARM710 0x41007100 |
181 | #define CPU_ID_ARM7500 0x41027100 | | 181 | #define CPU_ID_ARM7500 0x41027100 |
182 | #define CPU_ID_ARM710A 0x41067100 | | 182 | #define CPU_ID_ARM710A 0x41067100 |
183 | #define CPU_ID_ARM7500FE 0x41077100 | | 183 | #define CPU_ID_ARM7500FE 0x41077100 |
184 | #define CPU_ID_ARM710T 0x41807100 | | 184 | #define CPU_ID_ARM710T 0x41807100 |
185 | #define CPU_ID_ARM720T 0x41807200 | | 185 | #define CPU_ID_ARM720T 0x41807200 |
186 | #define CPU_ID_ARM740T8K 0x41807400 /* XXX no MMU, 8KB cache */ | | 186 | #define CPU_ID_ARM740T8K 0x41807400 /* XXX no MMU, 8KB cache */ |
187 | #define CPU_ID_ARM740T4K 0x41817400 /* XXX no MMU, 4KB cache */ | | 187 | #define CPU_ID_ARM740T4K 0x41817400 /* XXX no MMU, 4KB cache */ |
188 | | | 188 | |
189 | /* Post-ARM7 CPUs */ | | 189 | /* Post-ARM7 CPUs */ |
190 | #define CPU_ID_ARM810 0x41018100 | | 190 | #define CPU_ID_ARM810 0x41018100 |
191 | #define CPU_ID_ARM920T 0x41129200 | | 191 | #define CPU_ID_ARM920T 0x41129200 |
192 | #define CPU_ID_ARM922T 0x41029220 | | 192 | #define CPU_ID_ARM922T 0x41029220 |
193 | #define CPU_ID_ARM926EJS 0x41069260 | | 193 | #define CPU_ID_ARM926EJS 0x41069260 |
194 | #define CPU_ID_ARM940T 0x41029400 /* XXX no MMU */ | | 194 | #define CPU_ID_ARM940T 0x41029400 /* XXX no MMU */ |
195 | #define CPU_ID_ARM946ES 0x41049460 /* XXX no MMU */ | | 195 | #define CPU_ID_ARM946ES 0x41049460 /* XXX no MMU */ |
196 | #define CPU_ID_ARM966ES 0x41049660 /* XXX no MMU */ | | 196 | #define CPU_ID_ARM966ES 0x41049660 /* XXX no MMU */ |
197 | #define CPU_ID_ARM966ESR1 0x41059660 /* XXX no MMU */ | | 197 | #define CPU_ID_ARM966ESR1 0x41059660 /* XXX no MMU */ |
198 | #define CPU_ID_ARM1020E 0x4115a200 /* (AKA arm10 rev 1) */ | | 198 | #define CPU_ID_ARM1020E 0x4115a200 /* (AKA arm10 rev 1) */ |
199 | #define CPU_ID_ARM1022ES 0x4105a220 | | 199 | #define CPU_ID_ARM1022ES 0x4105a220 |
200 | #define CPU_ID_ARM1026EJS 0x4106a260 | | 200 | #define CPU_ID_ARM1026EJS 0x4106a260 |
201 | #define CPU_ID_ARM11MPCORE 0x410fb020 | | 201 | #define CPU_ID_ARM11MPCORE 0x410fb020 |
202 | #define CPU_ID_ARM1136JS 0x4107b360 | | 202 | #define CPU_ID_ARM1136JS 0x4107b360 |
203 | #define CPU_ID_ARM1136JSR1 0x4117b360 | | 203 | #define CPU_ID_ARM1136JSR1 0x4117b360 |
204 | #define CPU_ID_ARM1156T2S 0x4107b560 /* MPU only */ | | 204 | #define CPU_ID_ARM1156T2S 0x4107b560 /* MPU only */ |
205 | #define CPU_ID_ARM1176JZS 0x410fb760 | | 205 | #define CPU_ID_ARM1176JZS 0x410fb760 |
206 | #define CPU_ID_ARM11_P(n) ((n & 0xff07f000) == 0x4107b000) | | 206 | #define CPU_ID_ARM11_P(n) ((n & 0xff07f000) == 0x4107b000) |
207 | #define CPU_ID_CORTEXA5R0 0x410fc050 | | 207 | #define CPU_ID_CORTEXA5R0 0x410fc050 |
208 | #define CPU_ID_CORTEXA7R0 0x411fc070 | | 208 | #define CPU_ID_CORTEXA7R0 0x411fc070 |
209 | #define CPU_ID_CORTEXA8R1 0x411fc080 | | 209 | #define CPU_ID_CORTEXA8R1 0x411fc080 |
210 | #define CPU_ID_CORTEXA8R2 0x412fc080 | | 210 | #define CPU_ID_CORTEXA8R2 0x412fc080 |
211 | #define CPU_ID_CORTEXA8R3 0x413fc080 | | 211 | #define CPU_ID_CORTEXA8R3 0x413fc080 |
212 | #define CPU_ID_CORTEXA9R2 0x411fc090 | | 212 | #define CPU_ID_CORTEXA9R2 0x411fc090 |
213 | #define CPU_ID_CORTEXA9R3 0x412fc090 | | 213 | #define CPU_ID_CORTEXA9R3 0x412fc090 |
214 | #define CPU_ID_CORTEXA9R4 0x413fc090 | | 214 | #define CPU_ID_CORTEXA9R4 0x413fc090 |
215 | #define CPU_ID_CORTEXA15R2 0x412fc0f0 | | 215 | #define CPU_ID_CORTEXA15R2 0x412fc0f0 |
216 | #define CPU_ID_CORTEXA15R3 0x413fc0f0 | | 216 | #define CPU_ID_CORTEXA15R3 0x413fc0f0 |
217 | #define CPU_ID_CORTEX_P(n) ((n & 0xff0ff000) == 0x410fc000) | | 217 | #define CPU_ID_CORTEX_P(n) ((n & 0xff0ff000) == 0x410fc000) |
218 | #define CPU_ID_CORTEX_A5_P(n) ((n & 0xff0ff0f0) == 0x410fc050) | | 218 | #define CPU_ID_CORTEX_A5_P(n) ((n & 0xff0ff0f0) == 0x410fc050) |
219 | #define CPU_ID_CORTEX_A7_P(n) ((n & 0xff0ff0f0) == 0x410fc070) | | 219 | #define CPU_ID_CORTEX_A7_P(n) ((n & 0xff0ff0f0) == 0x410fc070) |
220 | #define CPU_ID_CORTEX_A8_P(n) ((n & 0xff0ff0f0) == 0x410fc080) | | 220 | #define CPU_ID_CORTEX_A8_P(n) ((n & 0xff0ff0f0) == 0x410fc080) |
221 | #define CPU_ID_CORTEX_A9_P(n) ((n & 0xff0ff0f0) == 0x410fc090) | | 221 | #define CPU_ID_CORTEX_A9_P(n) ((n & 0xff0ff0f0) == 0x410fc090) |
222 | #define CPU_ID_CORTEX_A15_P(n) ((n & 0xff0ff0f0) == 0x410fc0f0) | | 222 | #define CPU_ID_CORTEX_A15_P(n) ((n & 0xff0ff0f0) == 0x410fc0f0) |
223 | #define CPU_ID_SA110 0x4401a100 | | 223 | #define CPU_ID_SA110 0x4401a100 |
224 | #define CPU_ID_SA1100 0x4401a110 | | 224 | #define CPU_ID_SA1100 0x4401a110 |
225 | #define CPU_ID_TI925T 0x54029250 | | 225 | #define CPU_ID_TI925T 0x54029250 |
226 | #define CPU_ID_MV88FR571_VD 0x56155710 | | 226 | #define CPU_ID_MV88FR571_VD 0x56155710 |
227 | #define CPU_ID_MV88SV131 0x56251310 | | 227 | #define CPU_ID_MV88SV131 0x56251310 |
228 | #define CPU_ID_FA526 0x66015260 | | 228 | #define CPU_ID_FA526 0x66015260 |
229 | #define CPU_ID_SA1110 0x6901b110 | | 229 | #define CPU_ID_SA1110 0x6901b110 |
230 | #define CPU_ID_IXP1200 0x6901c120 | | 230 | #define CPU_ID_IXP1200 0x6901c120 |
231 | #define CPU_ID_80200 0x69052000 | | 231 | #define CPU_ID_80200 0x69052000 |
232 | #define CPU_ID_PXA250 0x69052100 /* sans core revision */ | | 232 | #define CPU_ID_PXA250 0x69052100 /* sans core revision */ |
233 | #define CPU_ID_PXA210 0x69052120 | | 233 | #define CPU_ID_PXA210 0x69052120 |
234 | #define CPU_ID_PXA250A 0x69052100 /* 1st version Core */ | | 234 | #define CPU_ID_PXA250A 0x69052100 /* 1st version Core */ |
235 | #define CPU_ID_PXA210A 0x69052120 /* 1st version Core */ | | 235 | #define CPU_ID_PXA210A 0x69052120 /* 1st version Core */ |
236 | #define CPU_ID_PXA250B 0x69052900 /* 3rd version Core */ | | 236 | #define CPU_ID_PXA250B 0x69052900 /* 3rd version Core */ |
237 | #define CPU_ID_PXA210B 0x69052920 /* 3rd version Core */ | | 237 | #define CPU_ID_PXA210B 0x69052920 /* 3rd version Core */ |
238 | #define CPU_ID_PXA250C 0x69052d00 /* 4th version Core */ | | 238 | #define CPU_ID_PXA250C 0x69052d00 /* 4th version Core */ |
239 | #define CPU_ID_PXA210C 0x69052d20 /* 4th version Core */ | | 239 | #define CPU_ID_PXA210C 0x69052d20 /* 4th version Core */ |
240 | #define CPU_ID_PXA27X 0x69054110 | | 240 | #define CPU_ID_PXA27X 0x69054110 |
241 | #define CPU_ID_80321_400 0x69052420 | | 241 | #define CPU_ID_80321_400 0x69052420 |
242 | #define CPU_ID_80321_600 0x69052430 | | 242 | #define CPU_ID_80321_600 0x69052430 |
243 | #define CPU_ID_80321_400_B0 0x69052c20 | | 243 | #define CPU_ID_80321_400_B0 0x69052c20 |
244 | #define CPU_ID_80321_600_B0 0x69052c30 | | 244 | #define CPU_ID_80321_600_B0 0x69052c30 |
245 | #define CPU_ID_80219_400 0x69052e20 | | 245 | #define CPU_ID_80219_400 0x69052e20 |
246 | #define CPU_ID_80219_600 0x69052e30 | | 246 | #define CPU_ID_80219_600 0x69052e30 |
247 | #define CPU_ID_IXP425_533 0x690541c0 | | 247 | #define CPU_ID_IXP425_533 0x690541c0 |
248 | #define CPU_ID_IXP425_400 0x690541d0 | | 248 | #define CPU_ID_IXP425_400 0x690541d0 |
249 | #define CPU_ID_IXP425_266 0x690541f0 | | 249 | #define CPU_ID_IXP425_266 0x690541f0 |
250 | #define CPU_ID_MV88SV58XX_P(n) ((n & 0xff0fff00) == 0x560f5800) | | 250 | #define CPU_ID_MV88SV58XX_P(n) ((n & 0xff0fff00) == 0x560f5800) |
251 | #define CPU_ID_MV88SV581X_V6 0x560f5810 /* Marvell Sheeva 88SV581x v6 Core */ | | 251 | #define CPU_ID_MV88SV581X_V6 0x560f5810 /* Marvell Sheeva 88SV581x v6 Core */ |
252 | #define CPU_ID_MV88SV581X_V7 0x561f5810 /* Marvell Sheeva 88SV581x v7 Core */ | | 252 | #define CPU_ID_MV88SV581X_V7 0x561f5810 /* Marvell Sheeva 88SV581x v7 Core */ |
253 | #define CPU_ID_MV88SV584X_V6 0x561f5840 /* Marvell Sheeva 88SV584x v6 Core */ | | 253 | #define CPU_ID_MV88SV584X_V6 0x561f5840 /* Marvell Sheeva 88SV584x v6 Core */ |
254 | #define CPU_ID_MV88SV584X_V7 0x562f5840 /* Marvell Sheeva 88SV584x v7 Core */ | | 254 | #define CPU_ID_MV88SV584X_V7 0x562f5840 /* Marvell Sheeva 88SV584x v7 Core */ |
255 | /* Marvell's CPUIDs with ARM ID in implementor field */ | | 255 | /* Marvell's CPUIDs with ARM ID in implementor field */ |
256 | #define CPU_ID_ARM_88SV581X_V6 0x410fb760 /* Marvell Sheeva 88SV581x v6 Core */ | | 256 | #define CPU_ID_ARM_88SV581X_V6 0x410fb760 /* Marvell Sheeva 88SV581x v6 Core */ |
257 | #define CPU_ID_ARM_88SV581X_V7 0x413fc080 /* Marvell Sheeva 88SV581x v7 Core */ | | 257 | #define CPU_ID_ARM_88SV581X_V7 0x413fc080 /* Marvell Sheeva 88SV581x v7 Core */ |
258 | #define CPU_ID_ARM_88SV584X_V6 0x410fb020 /* Marvell Sheeva 88SV584x v6 Core */ | | 258 | #define CPU_ID_ARM_88SV584X_V6 0x410fb020 /* Marvell Sheeva 88SV584x v6 Core */ |
259 | | | 259 | |
260 | /* CPUID registers */ | | 260 | /* CPUID registers */ |
261 | #define ARM_PFR0_THUMBEE_MASK 0x0000f000 | | 261 | #define ARM_PFR0_THUMBEE_MASK 0x0000f000 |
262 | #define ARM_PFR1_GTIMER_MASK 0x000f0000 | | 262 | #define ARM_PFR1_GTIMER_MASK 0x000f0000 |
263 | #define ARM_PFR1_VIRT_MASK 0x0000f000 | | 263 | #define ARM_PFR1_VIRT_MASK 0x0000f000 |
264 | #define ARM_PFR1_SEC_MASK 0x00000f00 | | 264 | #define ARM_PFR1_SEC_MASK 0x000000f0 |
265 | | | 265 | |
266 | /* ARM3-specific coprocessor 15 registers */ | | 266 | /* ARM3-specific coprocessor 15 registers */ |
267 | #define ARM3_CP15_FLUSH 1 | | 267 | #define ARM3_CP15_FLUSH 1 |
268 | #define ARM3_CP15_CONTROL 2 | | 268 | #define ARM3_CP15_CONTROL 2 |
269 | #define ARM3_CP15_CACHEABLE 3 | | 269 | #define ARM3_CP15_CACHEABLE 3 |
270 | #define ARM3_CP15_UPDATEABLE 4 | | 270 | #define ARM3_CP15_UPDATEABLE 4 |
271 | #define ARM3_CP15_DISRUPTIVE 5 | | 271 | #define ARM3_CP15_DISRUPTIVE 5 |
272 | | | 272 | |
273 | /* ARM3 Control register bits */ | | 273 | /* ARM3 Control register bits */ |
274 | #define ARM3_CTL_CACHE_ON 0x00000001 | | 274 | #define ARM3_CTL_CACHE_ON 0x00000001 |
275 | #define ARM3_CTL_SHARED 0x00000002 | | 275 | #define ARM3_CTL_SHARED 0x00000002 |
276 | #define ARM3_CTL_MONITOR 0x00000004 | | 276 | #define ARM3_CTL_MONITOR 0x00000004 |
277 | | | 277 | |
278 | /* | | 278 | /* |
279 | * Post-ARM3 CP15 registers: | | 279 | * Post-ARM3 CP15 registers: |
280 | * | | 280 | * |
281 | * 1 Control register | | 281 | * 1 Control register |
282 | * | | 282 | * |
283 | * 2 Translation Table Base | | 283 | * 2 Translation Table Base |
284 | * | | 284 | * |
285 | * 3 Domain Access Control | | 285 | * 3 Domain Access Control |
286 | * | | 286 | * |
287 | * 4 Reserved | | 287 | * 4 Reserved |
288 | * | | 288 | * |
289 | * 5 Fault Status | | 289 | * 5 Fault Status |
290 | * | | 290 | * |
291 | * 6 Fault Address | | 291 | * 6 Fault Address |
292 | * | | 292 | * |
293 | * 7 Cache/write-buffer Control | | 293 | * 7 Cache/write-buffer Control |
294 | * | | 294 | * |
295 | * 8 TLB Control | | 295 | * 8 TLB Control |
296 | * | | 296 | * |
297 | * 9 Cache Lockdown | | 297 | * 9 Cache Lockdown |
298 | * | | 298 | * |
299 | * 10 TLB Lockdown | | 299 | * 10 TLB Lockdown |
300 | * | | 300 | * |
301 | * 11 Reserved | | 301 | * 11 Reserved |
302 | * | | 302 | * |
303 | * 12 Reserved | | 303 | * 12 Reserved |
304 | * | | 304 | * |
305 | * 13 Process ID (for FCSE) | | 305 | * 13 Process ID (for FCSE) |
306 | * | | 306 | * |
307 | * 14 Reserved | | 307 | * 14 Reserved |
308 | * | | 308 | * |
309 | * 15 Implementation Dependent | | 309 | * 15 Implementation Dependent |
310 | */ | | 310 | */ |
311 | | | 311 | |
312 | /* Some of the definitions below need cleaning up for V3/V4 architectures */ | | 312 | /* Some of the definitions below need cleaning up for V3/V4 architectures */ |
313 | | | 313 | |
314 | /* CPU control register (CP15 register 1) */ | | 314 | /* CPU control register (CP15 register 1) */ |
315 | #define CPU_CONTROL_MMU_ENABLE 0x00000001 /* M: MMU/Protection unit enable */ | | 315 | #define CPU_CONTROL_MMU_ENABLE 0x00000001 /* M: MMU/Protection unit enable */ |
316 | #define CPU_CONTROL_AFLT_ENABLE 0x00000002 /* A: Alignment fault enable */ | | 316 | #define CPU_CONTROL_AFLT_ENABLE 0x00000002 /* A: Alignment fault enable */ |
317 | #define CPU_CONTROL_DC_ENABLE 0x00000004 /* C: IDC/DC enable */ | | 317 | #define CPU_CONTROL_DC_ENABLE 0x00000004 /* C: IDC/DC enable */ |
318 | #define CPU_CONTROL_WBUF_ENABLE 0x00000008 /* W: Write buffer enable */ | | 318 | #define CPU_CONTROL_WBUF_ENABLE 0x00000008 /* W: Write buffer enable */ |
319 | #define CPU_CONTROL_32BP_ENABLE 0x00000010 /* P: 32-bit exception handlers */ | | 319 | #define CPU_CONTROL_32BP_ENABLE 0x00000010 /* P: 32-bit exception handlers */ |
320 | #define CPU_CONTROL_32BD_ENABLE 0x00000020 /* D: 32-bit addressing */ | | 320 | #define CPU_CONTROL_32BD_ENABLE 0x00000020 /* D: 32-bit addressing */ |
321 | #define CPU_CONTROL_LABT_ENABLE 0x00000040 /* L: Late abort enable */ | | 321 | #define CPU_CONTROL_LABT_ENABLE 0x00000040 /* L: Late abort enable */ |
322 | #define CPU_CONTROL_BEND_ENABLE 0x00000080 /* B: Big-endian mode */ | | 322 | #define CPU_CONTROL_BEND_ENABLE 0x00000080 /* B: Big-endian mode */ |
323 | #define CPU_CONTROL_SYST_ENABLE 0x00000100 /* S: System protection bit */ | | 323 | #define CPU_CONTROL_SYST_ENABLE 0x00000100 /* S: System protection bit */ |
324 | #define CPU_CONTROL_ROM_ENABLE 0x00000200 /* R: ROM protection bit */ | | 324 | #define CPU_CONTROL_ROM_ENABLE 0x00000200 /* R: ROM protection bit */ |
325 | #define CPU_CONTROL_CPCLK 0x00000400 /* F: Implementation defined */ | | 325 | #define CPU_CONTROL_CPCLK 0x00000400 /* F: Implementation defined */ |
326 | #define CPU_CONTROL_SWP_ENABLE 0x00000400 /* SW: SWP{B} perform normally. */ | | 326 | #define CPU_CONTROL_SWP_ENABLE 0x00000400 /* SW: SWP{B} perform normally. */ |
327 | #define CPU_CONTROL_BPRD_ENABLE 0x00000800 /* Z: Branch prediction enable */ | | 327 | #define CPU_CONTROL_BPRD_ENABLE 0x00000800 /* Z: Branch prediction enable */ |
328 | #define CPU_CONTROL_IC_ENABLE 0x00001000 /* I: IC enable */ | | 328 | #define CPU_CONTROL_IC_ENABLE 0x00001000 /* I: IC enable */ |
329 | #define CPU_CONTROL_VECRELOC 0x00002000 /* V: Vector relocation */ | | 329 | #define CPU_CONTROL_VECRELOC 0x00002000 /* V: Vector relocation */ |
330 | #define CPU_CONTROL_ROUNDROBIN 0x00004000 /* RR: Predictable replacement */ | | 330 | #define CPU_CONTROL_ROUNDROBIN 0x00004000 /* RR: Predictable replacement */ |
331 | #define CPU_CONTROL_V4COMPAT 0x00008000 /* L4: ARMv4 compat LDR R15 etc */ | | 331 | #define CPU_CONTROL_V4COMPAT 0x00008000 /* L4: ARMv4 compat LDR R15 etc */ |
332 | #define CPU_CONTROL_FI_ENABLE 0x00200000 /* FI: Low interrupt latency */ | | 332 | #define CPU_CONTROL_FI_ENABLE 0x00200000 /* FI: Low interrupt latency */ |
333 | #define CPU_CONTROL_UNAL_ENABLE 0x00400000 /* U: unaligned data access */ | | 333 | #define CPU_CONTROL_UNAL_ENABLE 0x00400000 /* U: unaligned data access */ |
334 | #define CPU_CONTROL_XP_ENABLE 0x00800000 /* XP: extended page table */ | | 334 | #define CPU_CONTROL_XP_ENABLE 0x00800000 /* XP: extended page table */ |
335 | #define CPU_CONTROL_V_ENABLE 0x01000000 /* VE: Interrupt vectors enable */ | | 335 | #define CPU_CONTROL_V_ENABLE 0x01000000 /* VE: Interrupt vectors enable */ |
336 | #define CPU_CONTROL_EX_BEND 0x02000000 /* EE: exception endianness */ | | 336 | #define CPU_CONTROL_EX_BEND 0x02000000 /* EE: exception endianness */ |
337 | #define CPU_CONTROL_NMFI 0x08000000 /* NMFI: Non maskable FIQ */ | | 337 | #define CPU_CONTROL_NMFI 0x08000000 /* NMFI: Non maskable FIQ */ |
338 | #define CPU_CONTROL_TR_ENABLE 0x10000000 /* TRE: */ | | 338 | #define CPU_CONTROL_TR_ENABLE 0x10000000 /* TRE: */ |
339 | #define CPU_CONTROL_AF_ENABLE 0x20000000 /* AFE: Access flag enable */ | | 339 | #define CPU_CONTROL_AF_ENABLE 0x20000000 /* AFE: Access flag enable */ |
340 | #define CPU_CONTROL_TE_ENABLE 0x40000000 /* TE: Thumb Exception enable */ | | 340 | #define CPU_CONTROL_TE_ENABLE 0x40000000 /* TE: Thumb Exception enable */ |
341 | | | 341 | |
342 | #define CPU_CONTROL_IDC_ENABLE CPU_CONTROL_DC_ENABLE | | 342 | #define CPU_CONTROL_IDC_ENABLE CPU_CONTROL_DC_ENABLE |
343 | | | 343 | |
344 | /* ARMv6/ARMv7 Co-Processor Access Control Register (CP15, 0, c1, c0, 2) */ | | 344 | /* ARMv6/ARMv7 Co-Processor Access Control Register (CP15, 0, c1, c0, 2) */ |
345 | #define CPACR_V7_ASEDIS 0x80000000 /* Disable Advanced SIMD Ext. */ | | 345 | #define CPACR_V7_ASEDIS 0x80000000 /* Disable Advanced SIMD Ext. */ |
346 | #define CPACR_V7_D32DIS 0x40000000 /* Disable VFP regs 15-31 */ | | 346 | #define CPACR_V7_D32DIS 0x40000000 /* Disable VFP regs 15-31 */ |
347 | #define CPACR_CPn(n) (3 << (2*n)) | | 347 | #define CPACR_CPn(n) (3 << (2*n)) |
348 | #define CPACR_NOACCESS 0 /* reset value */ | | 348 | #define CPACR_NOACCESS 0 /* reset value */ |
349 | #define CPACR_PRIVED 1 /* Privileged mode access */ | | 349 | #define CPACR_PRIVED 1 /* Privileged mode access */ |
350 | #define CPACR_RESERVED 2 | | 350 | #define CPACR_RESERVED 2 |
351 | #define CPACR_ALL 3 /* Privileged and User mode access */ | | 351 | #define CPACR_ALL 3 /* Privileged and User mode access */ |
352 | | | 352 | |
353 | /* ARM11x6 Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 353 | /* ARM11x6 Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
354 | #define ARM11X6_AUXCTL_RS 0x00000001 /* return stack */ | | 354 | #define ARM11X6_AUXCTL_RS 0x00000001 /* return stack */ |
355 | #define ARM11X6_AUXCTL_DB 0x00000002 /* dynamic branch prediction */ | | 355 | #define ARM11X6_AUXCTL_DB 0x00000002 /* dynamic branch prediction */ |
356 | #define ARM11X6_AUXCTL_SB 0x00000004 /* static branch prediction */ | | 356 | #define ARM11X6_AUXCTL_SB 0x00000004 /* static branch prediction */ |
357 | #define ARM11X6_AUXCTL_TR 0x00000008 /* MicroTLB replacement strat. */ | | 357 | #define ARM11X6_AUXCTL_TR 0x00000008 /* MicroTLB replacement strat. */ |
358 | #define ARM11X6_AUXCTL_EX 0x00000010 /* exclusive L1/L2 cache */ | | 358 | #define ARM11X6_AUXCTL_EX 0x00000010 /* exclusive L1/L2 cache */ |
359 | #define ARM11X6_AUXCTL_RA 0x00000020 /* clean entire cache disable */ | | 359 | #define ARM11X6_AUXCTL_RA 0x00000020 /* clean entire cache disable */ |
360 | #define ARM11X6_AUXCTL_RV 0x00000040 /* block transfer cache disable */ | | 360 | #define ARM11X6_AUXCTL_RV 0x00000040 /* block transfer cache disable */ |
361 | #define ARM11X6_AUXCTL_CZ 0x00000080 /* restrict cache size */ | | 361 | #define ARM11X6_AUXCTL_CZ 0x00000080 /* restrict cache size */ |
362 | | | 362 | |
363 | /* ARM1136 Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 363 | /* ARM1136 Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
364 | #define ARM1136_AUXCTL_PFI 0x80000000 /* PFI: partial FI mode. */ | | 364 | #define ARM1136_AUXCTL_PFI 0x80000000 /* PFI: partial FI mode. */ |
365 | /* This is an undocumented flag | | 365 | /* This is an undocumented flag |
366 | * used to work around a cache bug | | 366 | * used to work around a cache bug |
367 | * in r0 steppings. See errata | | 367 | * in r0 steppings. See errata |
368 | * 364296. | | 368 | * 364296. |
369 | */ | | 369 | */ |
370 | /* ARM1176 Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 370 | /* ARM1176 Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
371 | #define ARM1176_AUXCTL_PHD 0x10000000 /* inst. prefetch halting disable */ | | 371 | #define ARM1176_AUXCTL_PHD 0x10000000 /* inst. prefetch halting disable */ |
372 | #define ARM1176_AUXCTL_BFD 0x20000000 /* branch folding disable */ | | 372 | #define ARM1176_AUXCTL_BFD 0x20000000 /* branch folding disable */ |
373 | #define ARM1176_AUXCTL_FSD 0x40000000 /* force speculative ops disable */ | | 373 | #define ARM1176_AUXCTL_FSD 0x40000000 /* force speculative ops disable */ |
374 | #define ARM1176_AUXCTL_FIO 0x80000000 /* low intr latency override */ | | 374 | #define ARM1176_AUXCTL_FIO 0x80000000 /* low intr latency override */ |
375 | | | 375 | |
376 | /* Cortex-A9 Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 376 | /* Cortex-A9 Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
377 | #define CORTEXA9_AUXCTL_PARITY 0x00000200 /* Enable parity */ | | 377 | #define CORTEXA9_AUXCTL_PARITY 0x00000200 /* Enable parity */ |
378 | #define CORTEXA9_AUXCTL_1WAY 0x00000100 /* Alloc in one way only */ | | 378 | #define CORTEXA9_AUXCTL_1WAY 0x00000100 /* Alloc in one way only */ |
379 | #define CORTEXA9_AUXCTL_EXCL 0x00000080 /* Exclusive cache */ | | 379 | #define CORTEXA9_AUXCTL_EXCL 0x00000080 /* Exclusive cache */ |
380 | #define CORTEXA9_AUXCTL_SMP 0x00000040 /* CPU is in SMP mode */ | | 380 | #define CORTEXA9_AUXCTL_SMP 0x00000040 /* CPU is in SMP mode */ |
381 | #define CORTEXA9_AUXCTL_WRZERO 0x00000008 /* Write full line of zeroes */ | | 381 | #define CORTEXA9_AUXCTL_WRZERO 0x00000008 /* Write full line of zeroes */ |
382 | #define CORTEXA9_AUXCTL_L1PLD 0x00000004 /* L1 Dside prefetch */ | | 382 | #define CORTEXA9_AUXCTL_L1PLD 0x00000004 /* L1 Dside prefetch */ |
383 | #define CORTEXA9_AUXCTL_L2PLD 0x00000002 /* L2 Dside prefetch */ | | 383 | #define CORTEXA9_AUXCTL_L2PLD 0x00000002 /* L2 Dside prefetch */ |
384 | #define CORTEXA9_AUXCTL_FW 0x00000001 /* Forward Cache/TLB ops */ | | 384 | #define CORTEXA9_AUXCTL_FW 0x00000001 /* Forward Cache/TLB ops */ |
385 | | | 385 | |
386 | /* XScale Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 386 | /* XScale Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
387 | #define XSCALE_AUXCTL_K 0x00000001 /* dis. write buffer coalescing */ | | 387 | #define XSCALE_AUXCTL_K 0x00000001 /* dis. write buffer coalescing */ |
388 | #define XSCALE_AUXCTL_P 0x00000002 /* ECC protect page table access */ | | 388 | #define XSCALE_AUXCTL_P 0x00000002 /* ECC protect page table access */ |
389 | #define XSCALE_AUXCTL_MD_WB_RA 0x00000000 /* mini-D$ wb, read-allocate */ | | 389 | #define XSCALE_AUXCTL_MD_WB_RA 0x00000000 /* mini-D$ wb, read-allocate */ |
390 | #define XSCALE_AUXCTL_MD_WB_RWA 0x00000010 /* mini-D$ wb, read/write-allocate */ | | 390 | #define XSCALE_AUXCTL_MD_WB_RWA 0x00000010 /* mini-D$ wb, read/write-allocate */ |
391 | #define XSCALE_AUXCTL_MD_WT 0x00000020 /* mini-D$ wt, read-allocate */ | | 391 | #define XSCALE_AUXCTL_MD_WT 0x00000020 /* mini-D$ wt, read-allocate */ |
392 | #define XSCALE_AUXCTL_MD_MASK 0x00000030 | | 392 | #define XSCALE_AUXCTL_MD_MASK 0x00000030 |
393 | | | 393 | |
394 | /* ARM11 MPCore Auxiliary Control Register (CP15 register 1, opcode2 1) */ | | 394 | /* ARM11 MPCore Auxiliary Control Register (CP15 register 1, opcode2 1) */ |
395 | #define MPCORE_AUXCTL_RS 0x00000001 /* return stack */ | | 395 | #define MPCORE_AUXCTL_RS 0x00000001 /* return stack */ |
396 | #define MPCORE_AUXCTL_DB 0x00000002 /* dynamic branch prediction */ | | 396 | #define MPCORE_AUXCTL_DB 0x00000002 /* dynamic branch prediction */ |
397 | #define MPCORE_AUXCTL_SB 0x00000004 /* static branch prediction */ | | 397 | #define MPCORE_AUXCTL_SB 0x00000004 /* static branch prediction */ |
398 | #define MPCORE_AUXCTL_F 0x00000008 /* instruction folding enable */ | | 398 | #define MPCORE_AUXCTL_F 0x00000008 /* instruction folding enable */ |
399 | #define MPCORE_AUXCTL_EX 0x00000010 /* exclusive L1/L2 cache */ | | 399 | #define MPCORE_AUXCTL_EX 0x00000010 /* exclusive L1/L2 cache */ |
400 | #define MPCORE_AUXCTL_SA 0x00000020 /* SMP/AMP */ | | 400 | #define MPCORE_AUXCTL_SA 0x00000020 /* SMP/AMP */ |
401 | | | 401 | |
402 | /* Marvell PJ4B Auxillary Control Register */ | | 402 | /* Marvell PJ4B Auxillary Control Register */ |
403 | #define PJ4B_AUXCTL_SMPNAMP 0x00000040 /* SMP/AMP */ | | 403 | #define PJ4B_AUXCTL_SMPNAMP 0x00000040 /* SMP/AMP */ |
404 | | | 404 | |
405 | /* Cortex-A9 Auxiliary Control Register (CP15 register 1, opcode 1) */ | | 405 | /* Cortex-A9 Auxiliary Control Register (CP15 register 1, opcode 1) */ |
406 | #define CORTEXA9_AUXCTL_FW 0x00000001 /* Cache and TLB updates broadcast */ | | 406 | #define CORTEXA9_AUXCTL_FW 0x00000001 /* Cache and TLB updates broadcast */ |
407 | #define CORTEXA9_AUXCTL_L2_PLD 0x00000002 /* Prefetch hint enable */ | | 407 | #define CORTEXA9_AUXCTL_L2_PLD 0x00000002 /* Prefetch hint enable */ |
408 | #define CORTEXA9_AUXCTL_L1_PLD 0x00000004 /* Data prefetch hint enable */ | | 408 | #define CORTEXA9_AUXCTL_L1_PLD 0x00000004 /* Data prefetch hint enable */ |
409 | #define CORTEXA9_AUXCTL_WR_ZERO 0x00000008 /* Ena. write full line of 0s mode */ | | 409 | #define CORTEXA9_AUXCTL_WR_ZERO 0x00000008 /* Ena. write full line of 0s mode */ |
410 | #define CORTEXA9_AUXCTL_SMP 0x00000040 /* Coherency is active */ | | 410 | #define CORTEXA9_AUXCTL_SMP 0x00000040 /* Coherency is active */ |
411 | #define CORTEXA9_AUXCTL_EXCL 0x00000080 /* Exclusive cache bit */ | | 411 | #define CORTEXA9_AUXCTL_EXCL 0x00000080 /* Exclusive cache bit */ |
412 | #define CORTEXA9_AUXCTL_ONEWAY 0x00000100 /* Allocate in on cache way only */ | | 412 | #define CORTEXA9_AUXCTL_ONEWAY 0x00000100 /* Allocate in on cache way only */ |
413 | #define CORTEXA9_AUXCTL_PARITY 0x00000200 /* Support parity checking */ | | 413 | #define CORTEXA9_AUXCTL_PARITY 0x00000200 /* Support parity checking */ |
414 | | | 414 | |
415 | /* Marvell Feroceon Extra Features Register (CP15 register 1, opcode2 0) */ | | 415 | /* Marvell Feroceon Extra Features Register (CP15 register 1, opcode2 0) */ |
416 | #define FC_DCACHE_REPL_LOCK 0x80000000 /* Replace DCache Lock */ | | 416 | #define FC_DCACHE_REPL_LOCK 0x80000000 /* Replace DCache Lock */ |
417 | #define FC_DCACHE_STREAM_EN 0x20000000 /* DCache Streaming Switch */ | | 417 | #define FC_DCACHE_STREAM_EN 0x20000000 /* DCache Streaming Switch */ |
418 | #define FC_WR_ALLOC_EN 0x10000000 /* Enable Write Allocate */ | | 418 | #define FC_WR_ALLOC_EN 0x10000000 /* Enable Write Allocate */ |
419 | #define FC_L2_PREF_DIS 0x01000000 /* L2 Cache Prefetch Disable */ | | 419 | #define FC_L2_PREF_DIS 0x01000000 /* L2 Cache Prefetch Disable */ |
420 | #define FC_L2_INV_EVICT_LINE 0x00800000 /* L2 Invalidates Uncorrectable Error Line Eviction */ | | 420 | #define FC_L2_INV_EVICT_LINE 0x00800000 /* L2 Invalidates Uncorrectable Error Line Eviction */ |
421 | #define FC_L2CACHE_EN 0x00400000 /* L2 enable */ | | 421 | #define FC_L2CACHE_EN 0x00400000 /* L2 enable */ |
422 | #define FC_ICACHE_REPL_LOCK 0x00080000 /* Replace ICache Lock */ | | 422 | #define FC_ICACHE_REPL_LOCK 0x00080000 /* Replace ICache Lock */ |
423 | #define FC_GLOB_HIST_REG_EN 0x00040000 /* Branch Global History Register Enable */ | | 423 | #define FC_GLOB_HIST_REG_EN 0x00040000 /* Branch Global History Register Enable */ |
424 | #define FC_BRANCH_TARG_BUF_DIS 0x00020000 /* Branch Target Buffer Disable */ | | 424 | #define FC_BRANCH_TARG_BUF_DIS 0x00020000 /* Branch Target Buffer Disable */ |
425 | #define FC_L1_PAR_ERR_EN 0x00010000 /* L1 Parity Error Enable */ | | 425 | #define FC_L1_PAR_ERR_EN 0x00010000 /* L1 Parity Error Enable */ |
426 | | | 426 | |
427 | /* Cache type register definitions 0 */ | | 427 | /* Cache type register definitions 0 */ |
428 | #define CPU_CT_FORMAT(x) (((x) >> 29) & 0x7) /* reg format */ | | 428 | #define CPU_CT_FORMAT(x) (((x) >> 29) & 0x7) /* reg format */ |
429 | #define CPU_CT_ISIZE(x) ((x) & 0xfff) /* I$ info */ | | 429 | #define CPU_CT_ISIZE(x) ((x) & 0xfff) /* I$ info */ |
430 | #define CPU_CT_DSIZE(x) (((x) >> 12) & 0xfff) /* D$ info */ | | 430 | #define CPU_CT_DSIZE(x) (((x) >> 12) & 0xfff) /* D$ info */ |
431 | #define CPU_CT_S (1U << 24) /* split cache */ | | 431 | #define CPU_CT_S (1U << 24) /* split cache */ |
432 | #define CPU_CT_CTYPE(x) (((x) >> 25) & 0xf) /* cache type */ | | 432 | #define CPU_CT_CTYPE(x) (((x) >> 25) & 0xf) /* cache type */ |
433 | | | 433 | |
434 | #define CPU_CT_CTYPE_WT 0 /* write-through */ | | 434 | #define CPU_CT_CTYPE_WT 0 /* write-through */ |
435 | #define CPU_CT_CTYPE_WB1 1 /* write-back, clean w/ read */ | | 435 | #define CPU_CT_CTYPE_WB1 1 /* write-back, clean w/ read */ |
436 | #define CPU_CT_CTYPE_WB2 2 /* w/b, clean w/ cp15,7 */ | | 436 | #define CPU_CT_CTYPE_WB2 2 /* w/b, clean w/ cp15,7 */ |
437 | #define CPU_CT_CTYPE_WB6 6 /* w/b, cp15,7, lockdown fmt A */ | | 437 | #define CPU_CT_CTYPE_WB6 6 /* w/b, cp15,7, lockdown fmt A */ |
438 | #define CPU_CT_CTYPE_WB7 7 /* w/b, cp15,7, lockdown fmt B */ | | 438 | #define CPU_CT_CTYPE_WB7 7 /* w/b, cp15,7, lockdown fmt B */ |
439 | #define CPU_CT_CTYPE_WB14 14 /* w/b, cp15,7, lockdown fmt C */ | | 439 | #define CPU_CT_CTYPE_WB14 14 /* w/b, cp15,7, lockdown fmt C */ |
440 | | | 440 | |
441 | #define CPU_CT_xSIZE_LEN(x) ((x) & 0x3) /* line size */ | | 441 | #define CPU_CT_xSIZE_LEN(x) ((x) & 0x3) /* line size */ |
442 | #define CPU_CT_xSIZE_M (1U << 2) /* multiplier */ | | 442 | #define CPU_CT_xSIZE_M (1U << 2) /* multiplier */ |
443 | #define CPU_CT_xSIZE_ASSOC(x) (((x) >> 3) & 0x7) /* associativity */ | | 443 | #define CPU_CT_xSIZE_ASSOC(x) (((x) >> 3) & 0x7) /* associativity */ |
444 | #define CPU_CT_xSIZE_SIZE(x) (((x) >> 6) & 0x7) /* size */ | | 444 | #define CPU_CT_xSIZE_SIZE(x) (((x) >> 6) & 0x7) /* size */ |
445 | #define CPU_CT_xSIZE_P (1U << 11) /* need to page-color */ | | 445 | #define CPU_CT_xSIZE_P (1U << 11) /* need to page-color */ |
446 | | | 446 | |
447 | /* format 4 definitions */ | | 447 | /* format 4 definitions */ |
448 | #define CPU_CT4_ILINE(x) ((x) & 0xf) /* I$ line size */ | | 448 | #define CPU_CT4_ILINE(x) ((x) & 0xf) /* I$ line size */ |
449 | #define CPU_CT4_DLINE(x) (((x) >> 16) & 0xf) /* D$ line size */ | | 449 | #define CPU_CT4_DLINE(x) (((x) >> 16) & 0xf) /* D$ line size */ |
450 | #define CPU_CT4_L1IPOLICY(x) (((x) >> 14) & 0x3) /* I$ policy */ | | 450 | #define CPU_CT4_L1IPOLICY(x) (((x) >> 14) & 0x3) /* I$ policy */ |
451 | #define CPU_CT4_L1_AIVIVT 1 /* ASID tagged VIVT */ | | 451 | #define CPU_CT4_L1_AIVIVT 1 /* ASID tagged VIVT */ |
452 | #define CPU_CT4_L1_VIPT 2 /* VIPT */ | | 452 | #define CPU_CT4_L1_VIPT 2 /* VIPT */ |
453 | #define CPU_CT4_L1_PIPT 3 /* PIPT */ | | 453 | #define CPU_CT4_L1_PIPT 3 /* PIPT */ |
454 | #define CPU_CT4_ERG(x) (((x) >> 20) & 0xf) /* Cache WriteBack Granule */ | | 454 | #define CPU_CT4_ERG(x) (((x) >> 20) & 0xf) /* Cache WriteBack Granule */ |
455 | #define CPU_CT4_CWG(x) (((x) >> 24) & 0xf) /* Exclusive Resv. Granule */ | | 455 | #define CPU_CT4_CWG(x) (((x) >> 24) & 0xf) /* Exclusive Resv. Granule */ |
456 | | | 456 | |
457 | /* Cache size identifaction register definitions 1, Rd, c0, c0, 0 */ | | 457 | /* Cache size identifaction register definitions 1, Rd, c0, c0, 0 */ |
458 | #define CPU_CSID_CTYPE_WT 0x80000000 /* write-through avail */ | | 458 | #define CPU_CSID_CTYPE_WT 0x80000000 /* write-through avail */ |
459 | #define CPU_CSID_CTYPE_WB 0x40000000 /* write-back avail */ | | 459 | #define CPU_CSID_CTYPE_WB 0x40000000 /* write-back avail */ |
460 | #define CPU_CSID_CTYPE_RA 0x20000000 /* read-allocation avail */ | | 460 | #define CPU_CSID_CTYPE_RA 0x20000000 /* read-allocation avail */ |
461 | #define CPU_CSID_CTYPE_WA 0x10000000 /* write-allocation avail */ | | 461 | #define CPU_CSID_CTYPE_WA 0x10000000 /* write-allocation avail */ |
462 | #define CPU_CSID_NUMSETS(x) (((x) >> 13) & 0x7fff) | | 462 | #define CPU_CSID_NUMSETS(x) (((x) >> 13) & 0x7fff) |
463 | #define CPU_CSID_ASSOC(x) (((x) >> 3) & 0x1ff) | | 463 | #define CPU_CSID_ASSOC(x) (((x) >> 3) & 0x1ff) |
464 | #define CPU_CSID_LEN(x) ((x) & 0x07) | | 464 | #define CPU_CSID_LEN(x) ((x) & 0x07) |
465 | | | 465 | |
466 | /* Cache size selection register definitions 2, Rd, c0, c0, 0 */ | | 466 | /* Cache size selection register definitions 2, Rd, c0, c0, 0 */ |
467 | #define CPU_CSSR_L2 0x00000002 | | 467 | #define CPU_CSSR_L2 0x00000002 |
468 | #define CPU_CSSR_L1 0x00000000 | | 468 | #define CPU_CSSR_L1 0x00000000 |
469 | #define CPU_CSSR_InD 0x00000001 | | 469 | #define CPU_CSSR_InD 0x00000001 |
470 | | | 470 | |
471 | /* ARMv7A CP15 Global Timer definitions */ | | 471 | /* ARMv7A CP15 Global Timer definitions */ |
472 | #define CNTKCTL_PL0PTEN 0x00000200 /* PL0 Physical Timer Enable */ | | 472 | #define CNTKCTL_PL0PTEN 0x00000200 /* PL0 Physical Timer Enable */ |
473 | #define CNTKCTL_PL0VTEN 0x00000100 /* PL0 Virtual Timer Enable */ | | 473 | #define CNTKCTL_PL0VTEN 0x00000100 /* PL0 Virtual Timer Enable */ |
474 | #define CNTKCTL_EVNTI 0x000000f0 /* CNTVCT Event Bit Select */ | | 474 | #define CNTKCTL_EVNTI 0x000000f0 /* CNTVCT Event Bit Select */ |
475 | #define CNTKCTL_EVNTDIR 0x00000008 /* CNTVCT Event Dir (1->0) */ | | 475 | #define CNTKCTL_EVNTDIR 0x00000008 /* CNTVCT Event Dir (1->0) */ |
476 | #define CNTKCTL_EVNTEN 0x00000004 /* CNTVCT Event Enable */ | | 476 | #define CNTKCTL_EVNTEN 0x00000004 /* CNTVCT Event Enable */ |
477 | #define CNTKCTL_PL0PCTEN 0x00000200 /* PL0 Physical Counter Enable */ | | 477 | #define CNTKCTL_PL0PCTEN 0x00000200 /* PL0 Physical Counter Enable */ |
478 | #define CNTKCTL_PL0VCTEN 0x00000100 /* PL0 Virtual Counter Enable */ | | 478 | #define CNTKCTL_PL0VCTEN 0x00000100 /* PL0 Virtual Counter Enable */ |
479 | | | 479 | |
480 | #define CNT_CTL_ISTATUS 0x00000004 /* Timer is asserted */ | | 480 | #define CNT_CTL_ISTATUS 0x00000004 /* Timer is asserted */ |
481 | #define CNT_CTL_IMASK 0x00000002 /* Timer output is masked */ | | 481 | #define CNT_CTL_IMASK 0x00000002 /* Timer output is masked */ |
482 | #define CNT_CTL_ENABLE 0x00000001 /* Timer is enabled */ | | 482 | #define CNT_CTL_ENABLE 0x00000001 /* Timer is enabled */ |
483 | | | 483 | |
484 | /* Fault status register definitions */ | | 484 | /* Fault status register definitions */ |
485 | | | 485 | |
486 | #define FAULT_TYPE_MASK 0x0f | | 486 | #define FAULT_TYPE_MASK 0x0f |
487 | #define FAULT_USER 0x10 | | 487 | #define FAULT_USER 0x10 |
488 | | | 488 | |
489 | #define FAULT_WRTBUF_0 0x00 /* Vector Exception */ | | 489 | #define FAULT_WRTBUF_0 0x00 /* Vector Exception */ |
490 | #define FAULT_WRTBUF_1 0x02 /* Terminal Exception */ | | 490 | #define FAULT_WRTBUF_1 0x02 /* Terminal Exception */ |
491 | #define FAULT_BUSERR_0 0x04 /* External Abort on Linefetch -- Section */ | | 491 | #define FAULT_BUSERR_0 0x04 /* External Abort on Linefetch -- Section */ |
492 | #define FAULT_BUSERR_1 0x06 /* External Abort on Linefetch -- Page */ | | 492 | #define FAULT_BUSERR_1 0x06 /* External Abort on Linefetch -- Page */ |
493 | #define FAULT_BUSERR_2 0x08 /* External Abort on Non-linefetch -- Section */ | | 493 | #define FAULT_BUSERR_2 0x08 /* External Abort on Non-linefetch -- Section */ |
494 | #define FAULT_BUSERR_3 0x0a /* External Abort on Non-linefetch -- Page */ | | 494 | #define FAULT_BUSERR_3 0x0a /* External Abort on Non-linefetch -- Page */ |
495 | #define FAULT_BUSTRNL1 0x0c /* External abort on Translation -- Level 1 */ | | 495 | #define FAULT_BUSTRNL1 0x0c /* External abort on Translation -- Level 1 */ |
496 | #define FAULT_BUSTRNL2 0x0e /* External abort on Translation -- Level 2 */ | | 496 | #define FAULT_BUSTRNL2 0x0e /* External abort on Translation -- Level 2 */ |
497 | #define FAULT_ALIGN_0 0x01 /* Alignment */ | | 497 | #define FAULT_ALIGN_0 0x01 /* Alignment */ |
498 | #define FAULT_ALIGN_1 0x03 /* Alignment */ | | 498 | #define FAULT_ALIGN_1 0x03 /* Alignment */ |
499 | #define FAULT_TRANS_S 0x05 /* Translation -- Section */ | | 499 | #define FAULT_TRANS_S 0x05 /* Translation -- Section */ |
500 | #define FAULT_TRANS_P 0x07 /* Translation -- Page */ | | 500 | #define FAULT_TRANS_P 0x07 /* Translation -- Page */ |
501 | #define FAULT_DOMAIN_S 0x09 /* Domain -- Section */ | | 501 | #define FAULT_DOMAIN_S 0x09 /* Domain -- Section */ |
502 | #define FAULT_DOMAIN_P 0x0b /* Domain -- Page */ | | 502 | #define FAULT_DOMAIN_P 0x0b /* Domain -- Page */ |
503 | #define FAULT_PERM_S 0x0d /* Permission -- Section */ | | 503 | #define FAULT_PERM_S 0x0d /* Permission -- Section */ |
504 | #define FAULT_PERM_P 0x0f /* Permission -- Page */ | | 504 | #define FAULT_PERM_P 0x0f /* Permission -- Page */ |
505 | | | 505 | |
506 | #define FAULT_IMPRECISE 0x400 /* Imprecise exception (XSCALE) */ | | 506 | #define FAULT_IMPRECISE 0x400 /* Imprecise exception (XSCALE) */ |
507 | | | 507 | |
508 | /* | | 508 | /* |
509 | * Address of the vector page, low and high versions. | | 509 | * Address of the vector page, low and high versions. |
510 | */ | | 510 | */ |
511 | #define ARM_VECTORS_LOW 0x00000000U | | 511 | #define ARM_VECTORS_LOW 0x00000000U |
512 | #define ARM_VECTORS_HIGH 0xffff0000U | | 512 | #define ARM_VECTORS_HIGH 0xffff0000U |
513 | | | 513 | |
514 | /* | | 514 | /* |
515 | * ARM Instructions | | 515 | * ARM Instructions |
516 | * | | 516 | * |
517 | * 3 3 2 2 2 | | 517 | * 3 3 2 2 2 |
518 | * 1 0 9 8 7 0 | | 518 | * 1 0 9 8 7 0 |
519 | * +-------+-------------------------------------------------------+ | | 519 | * +-------+-------------------------------------------------------+ |
520 | * | cond | instruction dependent | | | 520 | * | cond | instruction dependent | |
521 | * |c c c c| | | | 521 | * |c c c c| | |
522 | * +-------+-------------------------------------------------------+ | | 522 | * +-------+-------------------------------------------------------+ |
523 | */ | | 523 | */ |
524 | | | 524 | |
525 | #define INSN_SIZE 4 /* Always 4 bytes */ | | 525 | #define INSN_SIZE 4 /* Always 4 bytes */ |
526 | #define INSN_COND_MASK 0xf0000000 /* Condition mask */ | | 526 | #define INSN_COND_MASK 0xf0000000 /* Condition mask */ |
527 | #define INSN_COND_AL 0xe0000000 /* Always condition */ | | 527 | #define INSN_COND_AL 0xe0000000 /* Always condition */ |
528 | | | 528 | |
529 | #define THUMB_INSN_SIZE 2 /* Some are 4 bytes. */ | | 529 | #define THUMB_INSN_SIZE 2 /* Some are 4 bytes. */ |
530 | | | 530 | |
531 | /* | | 531 | /* |
532 | * Defines and such for arm11 Performance Monitor Counters (p15, c15, c12, 0) | | 532 | * Defines and such for arm11 Performance Monitor Counters (p15, c15, c12, 0) |
533 | */ | | 533 | */ |
534 | #define ARM11_PMCCTL_E __BIT(0) /* enable all three counters */ | | 534 | #define ARM11_PMCCTL_E __BIT(0) /* enable all three counters */ |
535 | #define ARM11_PMCCTL_P __BIT(1) /* reset both Count Registers to zero */ | | 535 | #define ARM11_PMCCTL_P __BIT(1) /* reset both Count Registers to zero */ |
536 | #define ARM11_PMCCTL_C __BIT(2) /* reset the Cycle Counter Register to zero */ | | 536 | #define ARM11_PMCCTL_C __BIT(2) /* reset the Cycle Counter Register to zero */ |
537 | #define ARM11_PMCCTL_D __BIT(3) /* cycle count divide by 64 */ | | 537 | #define ARM11_PMCCTL_D __BIT(3) /* cycle count divide by 64 */ |
538 | #define ARM11_PMCCTL_EC0 __BIT(4) /* Enable Counter Register 0 interrupt */ | | 538 | #define ARM11_PMCCTL_EC0 __BIT(4) /* Enable Counter Register 0 interrupt */ |
539 | #define ARM11_PMCCTL_EC1 __BIT(5) /* Enable Counter Register 1 interrupt */ | | 539 | #define ARM11_PMCCTL_EC1 __BIT(5) /* Enable Counter Register 1 interrupt */ |
540 | #define ARM11_PMCCTL_ECC __BIT(6) /* Enable Cycle Counter interrupt */ | | 540 | #define ARM11_PMCCTL_ECC __BIT(6) /* Enable Cycle Counter interrupt */ |
541 | #define ARM11_PMCCTL_SBZa __BIT(7) /* UNP/SBZ */ | | 541 | #define ARM11_PMCCTL_SBZa __BIT(7) /* UNP/SBZ */ |
542 | #define ARM11_PMCCTL_CR0 __BIT(8) /* Count Register 0 overflow flag */ | | 542 | #define ARM11_PMCCTL_CR0 __BIT(8) /* Count Register 0 overflow flag */ |
543 | #define ARM11_PMCCTL_CR1 __BIT(9) /* Count Register 1 overflow flag */ | | 543 | #define ARM11_PMCCTL_CR1 __BIT(9) /* Count Register 1 overflow flag */ |
544 | #define ARM11_PMCCTL_CCR __BIT(10) /* Cycle Count Register overflow flag */ | | 544 | #define ARM11_PMCCTL_CCR __BIT(10) /* Cycle Count Register overflow flag */ |
545 | #define ARM11_PMCCTL_X __BIT(11) /* Enable Export of the events to the event bus */ | | 545 | #define ARM11_PMCCTL_X __BIT(11) /* Enable Export of the events to the event bus */ |
546 | #define ARM11_PMCCTL_EVT1 __BITS(19,12) /* source of events for Count Register 1 */ | | 546 | #define ARM11_PMCCTL_EVT1 __BITS(19,12) /* source of events for Count Register 1 */ |
547 | #define ARM11_PMCCTL_EVT0 __BITS(27,20) /* source of events for Count Register 0 */ | | 547 | #define ARM11_PMCCTL_EVT0 __BITS(27,20) /* source of events for Count Register 0 */ |
548 | #define ARM11_PMCCTL_SBZb __BITS(31,28) /* UNP/SBZ */ | | 548 | #define ARM11_PMCCTL_SBZb __BITS(31,28) /* UNP/SBZ */ |
549 | #define ARM11_PMCCTL_SBZ \ | | 549 | #define ARM11_PMCCTL_SBZ \ |
550 | (ARM11_PMCCTL_SBZa | ARM11_PMCCTL_SBZb) | | 550 | (ARM11_PMCCTL_SBZa | ARM11_PMCCTL_SBZb) |
551 | | | 551 | |
552 | #define ARM11_PMCEVT_ICACHE_MISS 0 /* Instruction Cache Miss */ | | 552 | #define ARM11_PMCEVT_ICACHE_MISS 0 /* Instruction Cache Miss */ |
553 | #define ARM11_PMCEVT_ISTREAM_STALL 1 /* Instruction Stream Stall */ | | 553 | #define ARM11_PMCEVT_ISTREAM_STALL 1 /* Instruction Stream Stall */ |
554 | #define ARM11_PMCEVT_IUTLB_MISS 2 /* Instruction uTLB Miss */ | | 554 | #define ARM11_PMCEVT_IUTLB_MISS 2 /* Instruction uTLB Miss */ |
555 | #define ARM11_PMCEVT_DUTLB_MISS 3 /* Data uTLB Miss */ | | 555 | #define ARM11_PMCEVT_DUTLB_MISS 3 /* Data uTLB Miss */ |
556 | #define ARM11_PMCEVT_BRANCH 4 /* Branch Inst. Executed */ | | 556 | #define ARM11_PMCEVT_BRANCH 4 /* Branch Inst. Executed */ |
557 | #define ARM11_PMCEVT_BRANCH_MISS 6 /* Branch mispredicted */ | | 557 | #define ARM11_PMCEVT_BRANCH_MISS 6 /* Branch mispredicted */ |
558 | #define ARM11_PMCEVT_INST_EXEC 7 /* Instruction Executed */ | | 558 | #define ARM11_PMCEVT_INST_EXEC 7 /* Instruction Executed */ |
559 | #define ARM11_PMCEVT_DCACHE_ACCESS0 9 /* Data Cache Access */ | | 559 | #define ARM11_PMCEVT_DCACHE_ACCESS0 9 /* Data Cache Access */ |
560 | #define ARM11_PMCEVT_DCACHE_ACCESS1 10 /* Data Cache Access */ | | 560 | #define ARM11_PMCEVT_DCACHE_ACCESS1 10 /* Data Cache Access */ |
561 | #define ARM11_PMCEVT_DCACHE_MISS 11 /* Data Cache Miss */ | | 561 | #define ARM11_PMCEVT_DCACHE_MISS 11 /* Data Cache Miss */ |
562 | #define ARM11_PMCEVT_DCACHE_WRITEBACK 12 /* Data Cache Writeback */ | | 562 | #define ARM11_PMCEVT_DCACHE_WRITEBACK 12 /* Data Cache Writeback */ |
563 | #define ARM11_PMCEVT_PC_CHANGE 13 /* Software PC change */ | | 563 | #define ARM11_PMCEVT_PC_CHANGE 13 /* Software PC change */ |
564 | #define ARM11_PMCEVT_TLB_MISS 15 /* Main TLB Miss */ | | 564 | #define ARM11_PMCEVT_TLB_MISS 15 /* Main TLB Miss */ |
565 | #define ARM11_PMCEVT_DATA_ACCESS 16 /* non-cached data access */ | | 565 | #define ARM11_PMCEVT_DATA_ACCESS 16 /* non-cached data access */ |
566 | #define ARM11_PMCEVT_LSU_STALL 17 /* Load/Store Unit stall */ | | 566 | #define ARM11_PMCEVT_LSU_STALL 17 /* Load/Store Unit stall */ |
567 | #define ARM11_PMCEVT_WBUF_DRAIN 18 /* Write buffer drained */ | | 567 | #define ARM11_PMCEVT_WBUF_DRAIN 18 /* Write buffer drained */ |
568 | #define ARM11_PMCEVT_ETMEXTOUT0 32 /* ETMEXTOUT[0] asserted */ | | 568 | #define ARM11_PMCEVT_ETMEXTOUT0 32 /* ETMEXTOUT[0] asserted */ |
569 | #define ARM11_PMCEVT_ETMEXTOUT1 33 /* ETMEXTOUT[1] asserted */ | | 569 | #define ARM11_PMCEVT_ETMEXTOUT1 33 /* ETMEXTOUT[1] asserted */ |
570 | #define ARM11_PMCEVT_ETMEXTOUT 34 /* ETMEXTOUT[0 & 1] */ | | 570 | #define ARM11_PMCEVT_ETMEXTOUT 34 /* ETMEXTOUT[0 & 1] */ |
571 | #define ARM11_PMCEVT_CALL_EXEC 35 /* Procedure call executed */ | | 571 | #define ARM11_PMCEVT_CALL_EXEC 35 /* Procedure call executed */ |
572 | #define ARM11_PMCEVT_RETURN_EXEC 36 /* Return executed */ | | 572 | #define ARM11_PMCEVT_RETURN_EXEC 36 /* Return executed */ |
573 | #define ARM11_PMCEVT_RETURN_HIT 37 /* return address predicted */ | | 573 | #define ARM11_PMCEVT_RETURN_HIT 37 /* return address predicted */ |
574 | #define ARM11_PMCEVT_RETURN_MISS 38 /* return addr. mispredicted */ | | 574 | #define ARM11_PMCEVT_RETURN_MISS 38 /* return addr. mispredicted */ |
575 | #define ARM11_PMCEVT_CYCLE 255 /* Increment each cycle */ | | 575 | #define ARM11_PMCEVT_CYCLE 255 /* Increment each cycle */ |
576 | | | 576 | |
577 | /* Defines for ARM CORTEX performance counters */ | | 577 | /* Defines for ARM CORTEX performance counters */ |
578 | #define CORTEX_CNTENS_C __BIT(31) /* Enables the cycle counter */ | | 578 | #define CORTEX_CNTENS_C __BIT(31) /* Enables the cycle counter */ |
579 | #define CORTEX_CNTENC_C __BIT(31) /* Disables the cycle counter */ | | 579 | #define CORTEX_CNTENC_C __BIT(31) /* Disables the cycle counter */ |
580 | #define CORTEX_CNTOFL_C __BIT(31) /* Cycle counter overflow flag */ | | 580 | #define CORTEX_CNTOFL_C __BIT(31) /* Cycle counter overflow flag */ |
581 | | | 581 | |
582 | /* Defines for ARM Generic Timer */ | | 582 | /* Defines for ARM Generic Timer */ |
583 | #define ARM_CNTCTL_ENABLE __BIT(0) // Timer Enabled | | 583 | #define ARM_CNTCTL_ENABLE __BIT(0) // Timer Enabled |
584 | #define ARM_CNTCTL_IMASK __BIT(1) // Mask Interrupt | | 584 | #define ARM_CNTCTL_IMASK __BIT(1) // Mask Interrupt |
585 | #define ARM_CNTCTL_ISTATUS __BIT(2) // Interrupt is pending | | 585 | #define ARM_CNTCTL_ISTATUS __BIT(2) // Interrupt is pending |
586 | | | 586 | |
587 | #define ARM_CNTKCTL_PL0PTEN __BIT(9) | | 587 | #define ARM_CNTKCTL_PL0PTEN __BIT(9) |
588 | #define ARM_CNTKCTL_PL0VTEN __BIT(8) | | 588 | #define ARM_CNTKCTL_PL0VTEN __BIT(8) |
589 | #define ARM_CNTKCTL_EVNTI __BITS(7,4) | | 589 | #define ARM_CNTKCTL_EVNTI __BITS(7,4) |
590 | #define ARM_CNTKCTL_EVNTDIR __BIT(3) | | 590 | #define ARM_CNTKCTL_EVNTDIR __BIT(3) |
591 | #define ARM_CNTKCTL_EVNTEN __BIT(2) | | 591 | #define ARM_CNTKCTL_EVNTEN __BIT(2) |
592 | #define ARM_CNTKCTL_PL0PCTEN __BIT(1) | | 592 | #define ARM_CNTKCTL_PL0PCTEN __BIT(1) |
593 | #define ARM_CNTKCTL_PL0VCTEN __BIT(0) | | 593 | #define ARM_CNTKCTL_PL0VCTEN __BIT(0) |
594 | | | 594 | |
595 | #define ARM_CNTHCTL_EVNTI __BITS(7,4) | | 595 | #define ARM_CNTHCTL_EVNTI __BITS(7,4) |
596 | #define ARM_CNTHCTL_EVNTDIR __BIT(3) | | 596 | #define ARM_CNTHCTL_EVNTDIR __BIT(3) |
597 | #define ARM_CNTHCTL_EVNTEN __BIT(2) | | 597 | #define ARM_CNTHCTL_EVNTEN __BIT(2) |
598 | #define ARM_CNTHCTL_PL1PCTEN __BIT(1) | | 598 | #define ARM_CNTHCTL_PL1PCTEN __BIT(1) |
599 | #define ARM_CNTHCTL_PL1VCTEN __BIT(0) | | 599 | #define ARM_CNTHCTL_PL1VCTEN __BIT(0) |
600 | | | 600 | |
601 | #if !defined(__ASSEMBLER__) && !defined(_RUMPKERNEL) | | 601 | #if !defined(__ASSEMBLER__) && !defined(_RUMPKERNEL) |
602 | #define ARMREG_READ_INLINE(name, __insnstring) \ | | 602 | #define ARMREG_READ_INLINE(name, __insnstring) \ |
603 | static inline uint32_t armreg_##name##_read(void) \ | | 603 | static inline uint32_t armreg_##name##_read(void) \ |
604 | { \ | | 604 | { \ |
605 | uint32_t __rv; \ | | 605 | uint32_t __rv; \ |
606 | __asm __volatile("mrc " __insnstring : "=r"(__rv)); \ | | 606 | __asm __volatile("mrc " __insnstring : "=r"(__rv)); \ |
607 | return __rv; \ | | 607 | return __rv; \ |
608 | } | | 608 | } |
609 | | | 609 | |
610 | #define ARMREG_WRITE_INLINE(name, __insnstring) \ | | 610 | #define ARMREG_WRITE_INLINE(name, __insnstring) \ |
611 | static inline void armreg_##name##_write(uint32_t __val) \ | | 611 | static inline void armreg_##name##_write(uint32_t __val) \ |
612 | { \ | | 612 | { \ |
613 | __asm __volatile("mcr " __insnstring :: "r"(__val)); \ | | 613 | __asm __volatile("mcr " __insnstring :: "r"(__val)); \ |
614 | } | | 614 | } |
615 | | | 615 | |
616 | #define ARMREG_READ64_INLINE(name, __insnstring) \ | | 616 | #define ARMREG_READ64_INLINE(name, __insnstring) \ |
617 | static inline uint64_t armreg_##name##_read(void) \ | | 617 | static inline uint64_t armreg_##name##_read(void) \ |
618 | { \ | | 618 | { \ |
619 | uint64_t __rv; \ | | 619 | uint64_t __rv; \ |
620 | __asm __volatile("mrrc " __insnstring : "=r"(__rv)); \ | | 620 | __asm __volatile("mrrc " __insnstring : "=r"(__rv)); \ |
621 | return __rv; \ | | 621 | return __rv; \ |
622 | } | | 622 | } |
623 | | | 623 | |
624 | #define ARMREG_WRITE64_INLINE(name, __insnstring) \ | | 624 | #define ARMREG_WRITE64_INLINE(name, __insnstring) \ |
625 | static inline void armreg_##name##_write(uint64_t __val) \ | | 625 | static inline void armreg_##name##_write(uint64_t __val) \ |
626 | { \ | | 626 | { \ |
627 | __asm __volatile("mcrr " __insnstring :: "r"(__val)); \ | | 627 | __asm __volatile("mcrr " __insnstring :: "r"(__val)); \ |
628 | } | | 628 | } |
629 | | | 629 | |
630 | /* cp10 registers */ | | 630 | /* cp10 registers */ |
631 | ARMREG_READ_INLINE(fpsid, "p10,7,%0,c0,c0,0") /* VFP System ID */ | | 631 | ARMREG_READ_INLINE(fpsid, "p10,7,%0,c0,c0,0") /* VFP System ID */ |
632 | ARMREG_READ_INLINE(fpscr, "p10,7,%0,c1,c0,0") /* VFP Status/Control Register */ | | 632 | ARMREG_READ_INLINE(fpscr, "p10,7,%0,c1,c0,0") /* VFP Status/Control Register */ |
633 | ARMREG_WRITE_INLINE(fpscr, "p10,7,%0,c1,c0,0") /* VFP Status/Control Register */ | | 633 | ARMREG_WRITE_INLINE(fpscr, "p10,7,%0,c1,c0,0") /* VFP Status/Control Register */ |
634 | ARMREG_READ_INLINE(mvfr1, "p10,7,%0,c6,c0,0") /* Media and VFP Feature Register 1 */ | | 634 | ARMREG_READ_INLINE(mvfr1, "p10,7,%0,c6,c0,0") /* Media and VFP Feature Register 1 */ |
635 | ARMREG_READ_INLINE(mvfr0, "p10,7,%0,c7,c0,0") /* Media and VFP Feature Register 0 */ | | 635 | ARMREG_READ_INLINE(mvfr0, "p10,7,%0,c7,c0,0") /* Media and VFP Feature Register 0 */ |
636 | ARMREG_READ_INLINE(fpexc, "p10,7,%0,c8,c0,0") /* VFP Exception Register */ | | 636 | ARMREG_READ_INLINE(fpexc, "p10,7,%0,c8,c0,0") /* VFP Exception Register */ |
637 | ARMREG_WRITE_INLINE(fpexc, "p10,7,%0,c8,c0,0") /* VFP Exception Register */ | | 637 | ARMREG_WRITE_INLINE(fpexc, "p10,7,%0,c8,c0,0") /* VFP Exception Register */ |
638 | ARMREG_READ_INLINE(fpinst, "p10,7,%0,c9,c0,0") /* VFP Exception Instruction */ | | 638 | ARMREG_READ_INLINE(fpinst, "p10,7,%0,c9,c0,0") /* VFP Exception Instruction */ |
639 | ARMREG_WRITE_INLINE(fpinst, "p10,7,%0,c9,c0,0") /* VFP Exception Instruction */ | | 639 | ARMREG_WRITE_INLINE(fpinst, "p10,7,%0,c9,c0,0") /* VFP Exception Instruction */ |
640 | ARMREG_READ_INLINE(fpinst2, "p10,7,%0,c10,c0,0") /* VFP Exception Instruction 2 */ | | 640 | ARMREG_READ_INLINE(fpinst2, "p10,7,%0,c10,c0,0") /* VFP Exception Instruction 2 */ |
641 | ARMREG_WRITE_INLINE(fpinst2, "p10,7,%0,c10,c0,0") /* VFP Exception Instruction 2 */ | | 641 | ARMREG_WRITE_INLINE(fpinst2, "p10,7,%0,c10,c0,0") /* VFP Exception Instruction 2 */ |
642 | | | 642 | |
643 | /* cp15 c0 registers */ | | 643 | /* cp15 c0 registers */ |
644 | ARMREG_READ_INLINE(midr, "p15,0,%0,c0,c0,0") /* Main ID Register */ | | 644 | ARMREG_READ_INLINE(midr, "p15,0,%0,c0,c0,0") /* Main ID Register */ |
645 | ARMREG_READ_INLINE(ctr, "p15,0,%0,c0,c0,1") /* Cache Type Register */ | | 645 | ARMREG_READ_INLINE(ctr, "p15,0,%0,c0,c0,1") /* Cache Type Register */ |
646 | ARMREG_READ_INLINE(mpidr, "p15,0,%0,c0,c0,5") /* Multiprocess Affinity Register */ | | 646 | ARMREG_READ_INLINE(mpidr, "p15,0,%0,c0,c0,5") /* Multiprocess Affinity Register */ |
647 | ARMREG_READ_INLINE(pfr0, "p15,0,%0,c0,c1,0") /* Processor Feature Register 0 */ | | 647 | ARMREG_READ_INLINE(pfr0, "p15,0,%0,c0,c1,0") /* Processor Feature Register 0 */ |
648 | ARMREG_READ_INLINE(pfr1, "p15,0,%0,c0,c1,1") /* Processor Feature Register 1 */ | | 648 | ARMREG_READ_INLINE(pfr1, "p15,0,%0,c0,c1,1") /* Processor Feature Register 1 */ |
649 | ARMREG_READ_INLINE(mmfr0, "p15,0,%0,c0,c1,4") /* Memory Model Feature Register 0 */ | | 649 | ARMREG_READ_INLINE(mmfr0, "p15,0,%0,c0,c1,4") /* Memory Model Feature Register 0 */ |
650 | ARMREG_READ_INLINE(mmfr1, "p15,0,%0,c0,c1,5") /* Memory Model Feature Register 1 */ | | 650 | ARMREG_READ_INLINE(mmfr1, "p15,0,%0,c0,c1,5") /* Memory Model Feature Register 1 */ |
651 | ARMREG_READ_INLINE(mmfr2, "p15,0,%0,c0,c1,6") /* Memory Model Feature Register 2 */ | | 651 | ARMREG_READ_INLINE(mmfr2, "p15,0,%0,c0,c1,6") /* Memory Model Feature Register 2 */ |
652 | ARMREG_READ_INLINE(mmfr3, "p15,0,%0,c0,c1,7") /* Memory Model Feature Register 3 */ | | 652 | ARMREG_READ_INLINE(mmfr3, "p15,0,%0,c0,c1,7") /* Memory Model Feature Register 3 */ |
653 | ARMREG_READ_INLINE(isar0, "p15,0,%0,c0,c2,0") /* Instruction Set Attribute Register 0 */ | | 653 | ARMREG_READ_INLINE(isar0, "p15,0,%0,c0,c2,0") /* Instruction Set Attribute Register 0 */ |
654 | ARMREG_READ_INLINE(isar1, "p15,0,%0,c0,c2,1") /* Instruction Set Attribute Register 1 */ | | 654 | ARMREG_READ_INLINE(isar1, "p15,0,%0,c0,c2,1") /* Instruction Set Attribute Register 1 */ |
655 | ARMREG_READ_INLINE(isar2, "p15,0,%0,c0,c2,2") /* Instruction Set Attribute Register 2 */ | | 655 | ARMREG_READ_INLINE(isar2, "p15,0,%0,c0,c2,2") /* Instruction Set Attribute Register 2 */ |
656 | ARMREG_READ_INLINE(isar3, "p15,0,%0,c0,c2,3") /* Instruction Set Attribute Register 3 */ | | 656 | ARMREG_READ_INLINE(isar3, "p15,0,%0,c0,c2,3") /* Instruction Set Attribute Register 3 */ |
657 | ARMREG_READ_INLINE(isar4, "p15,0,%0,c0,c2,4") /* Instruction Set Attribute Register 4 */ | | 657 | ARMREG_READ_INLINE(isar4, "p15,0,%0,c0,c2,4") /* Instruction Set Attribute Register 4 */ |
658 | ARMREG_READ_INLINE(isar5, "p15,0,%0,c0,c2,5") /* Instruction Set Attribute Register 5 */ | | 658 | ARMREG_READ_INLINE(isar5, "p15,0,%0,c0,c2,5") /* Instruction Set Attribute Register 5 */ |
659 | ARMREG_READ_INLINE(ccsidr, "p15,1,%0,c0,c0,0") /* Cache Size ID Register */ | | 659 | ARMREG_READ_INLINE(ccsidr, "p15,1,%0,c0,c0,0") /* Cache Size ID Register */ |
660 | ARMREG_READ_INLINE(clidr, "p15,1,%0,c0,c0,1") /* Cache Level ID Register */ | | 660 | ARMREG_READ_INLINE(clidr, "p15,1,%0,c0,c0,1") /* Cache Level ID Register */ |
661 | ARMREG_READ_INLINE(csselr, "p15,2,%0,c0,c0,0") /* Cache Size Selection Register */ | | 661 | ARMREG_READ_INLINE(csselr, "p15,2,%0,c0,c0,0") /* Cache Size Selection Register */ |
662 | ARMREG_WRITE_INLINE(csselr, "p15,2,%0,c0,c0,0") /* Cache Size Selection Register */ | | 662 | ARMREG_WRITE_INLINE(csselr, "p15,2,%0,c0,c0,0") /* Cache Size Selection Register */ |
663 | /* cp15 c1 registers */ | | 663 | /* cp15 c1 registers */ |
664 | ARMREG_READ_INLINE(sctrl, "p15,0,%0,c1,c0,0") /* System Control Register */ | | 664 | ARMREG_READ_INLINE(sctrl, "p15,0,%0,c1,c0,0") /* System Control Register */ |
665 | ARMREG_WRITE_INLINE(sctrl, "p15,0,%0,c1,c0,0") /* System Control Register */ | | 665 | ARMREG_WRITE_INLINE(sctrl, "p15,0,%0,c1,c0,0") /* System Control Register */ |
666 | ARMREG_READ_INLINE(auxctl, "p15,0,%0,c1,c0,1") /* Auxiliary Control Register */ | | 666 | ARMREG_READ_INLINE(auxctl, "p15,0,%0,c1,c0,1") /* Auxiliary Control Register */ |
667 | ARMREG_WRITE_INLINE(auxctl, "p15,0,%0,c1,c0,1") /* Auxiliary Control Register */ | | 667 | ARMREG_WRITE_INLINE(auxctl, "p15,0,%0,c1,c0,1") /* Auxiliary Control Register */ |
668 | ARMREG_READ_INLINE(cpacr, "p15,0,%0,c1,c0,2") /* Co-Processor Access Control Register */ | | 668 | ARMREG_READ_INLINE(cpacr, "p15,0,%0,c1,c0,2") /* Co-Processor Access Control Register */ |
669 | ARMREG_WRITE_INLINE(cpacr, "p15,0,%0,c1,c0,2") /* Co-Processor Access Control Register */ | | 669 | ARMREG_WRITE_INLINE(cpacr, "p15,0,%0,c1,c0,2") /* Co-Processor Access Control Register */ |
670 | /* cp15 c2 registers */ | | 670 | /* cp15 c2 registers */ |
671 | ARMREG_READ_INLINE(ttbr, "p15,0,%0,c2,c0,0") /* Translation Table Base Register 0 */ | | 671 | ARMREG_READ_INLINE(ttbr, "p15,0,%0,c2,c0,0") /* Translation Table Base Register 0 */ |
672 | ARMREG_WRITE_INLINE(ttbr, "p15,0,%0,c2,c0,0") /* Translation Table Base Register 0 */ | | 672 | ARMREG_WRITE_INLINE(ttbr, "p15,0,%0,c2,c0,0") /* Translation Table Base Register 0 */ |
673 | ARMREG_READ_INLINE(ttbr1, "p15,0,%0,c2,c0,1") /* Translation Table Base Register 1 */ | | 673 | ARMREG_READ_INLINE(ttbr1, "p15,0,%0,c2,c0,1") /* Translation Table Base Register 1 */ |
674 | ARMREG_WRITE_INLINE(ttbr1, "p15,0,%0,c2,c0,1") /* Translation Table Base Register 1 */ | | 674 | ARMREG_WRITE_INLINE(ttbr1, "p15,0,%0,c2,c0,1") /* Translation Table Base Register 1 */ |
675 | ARMREG_READ_INLINE(ttbcr, "p15,0,%0,c2,c0,2") /* Translation Table Base Register */ | | 675 | ARMREG_READ_INLINE(ttbcr, "p15,0,%0,c2,c0,2") /* Translation Table Base Register */ |
676 | ARMREG_WRITE_INLINE(ttbcr, "p15,0,%0,c2,c0,2") /* Translation Table Base Register */ | | 676 | ARMREG_WRITE_INLINE(ttbcr, "p15,0,%0,c2,c0,2") /* Translation Table Base Register */ |
677 | /* cp15 c5 registers */ | | 677 | /* cp15 c5 registers */ |
678 | ARMREG_READ_INLINE(dfsr, "p15,0,%0,c5,c0,0") /* Data Fault Status Register */ | | 678 | ARMREG_READ_INLINE(dfsr, "p15,0,%0,c5,c0,0") /* Data Fault Status Register */ |
679 | ARMREG_READ_INLINE(ifsr, "p15,0,%0,c5,c0,1") /* Instruction Fault Status Register */ | | 679 | ARMREG_READ_INLINE(ifsr, "p15,0,%0,c5,c0,1") /* Instruction Fault Status Register */ |
680 | /* cp15 c6 registers */ | | 680 | /* cp15 c6 registers */ |
681 | ARMREG_READ_INLINE(dfar, "p15,0,%0,c6,c0,0") /* Data Fault Address Register */ | | 681 | ARMREG_READ_INLINE(dfar, "p15,0,%0,c6,c0,0") /* Data Fault Address Register */ |
682 | ARMREG_READ_INLINE(ifar, "p15,0,%0,c6,c0,2") /* Instruction Fault Address Register */ | | 682 | ARMREG_READ_INLINE(ifar, "p15,0,%0,c6,c0,2") /* Instruction Fault Address Register */ |
683 | /* cp15 c7 registers */ | | 683 | /* cp15 c7 registers */ |
684 | ARMREG_WRITE_INLINE(icialluis, "p15,0,%0,c7,c1,0") /* Instruction Inv All (IS) */ | | 684 | ARMREG_WRITE_INLINE(icialluis, "p15,0,%0,c7,c1,0") /* Instruction Inv All (IS) */ |
685 | ARMREG_WRITE_INLINE(bpiallis, "p15,0,%0,c7,c1,6") /* Branch Invalidate All (IS) */ | | 685 | ARMREG_WRITE_INLINE(bpiallis, "p15,0,%0,c7,c1,6") /* Branch Invalidate All (IS) */ |
686 | ARMREG_READ_INLINE(par, "p15,0,%0,c7,c4,0") /* Physical Address Register */ | | 686 | ARMREG_READ_INLINE(par, "p15,0,%0,c7,c4,0") /* Physical Address Register */ |
687 | ARMREG_WRITE_INLINE(iciallu, "p15,0,%0,c7,c5,0") /* Instruction Invalidate All */ | | 687 | ARMREG_WRITE_INLINE(iciallu, "p15,0,%0,c7,c5,0") /* Instruction Invalidate All */ |
688 | ARMREG_WRITE_INLINE(icimvau, "p15,0,%0,c7,c5,1") /* Instruction Invalidate MVA */ | | 688 | ARMREG_WRITE_INLINE(icimvau, "p15,0,%0,c7,c5,1") /* Instruction Invalidate MVA */ |
689 | ARMREG_WRITE_INLINE(isb, "p15,0,%0,c7,c5,4") /* Instruction Synchronization Barrier */ | | 689 | ARMREG_WRITE_INLINE(isb, "p15,0,%0,c7,c5,4") /* Instruction Synchronization Barrier */ |
690 | ARMREG_WRITE_INLINE(bpiall, "p15,0,%0,c5,c1,6") /* Breakpoint Invalidate All */ | | 690 | ARMREG_WRITE_INLINE(bpiall, "p15,0,%0,c5,c1,6") /* Breakpoint Invalidate All */ |
691 | ARMREG_WRITE_INLINE(dcimvac, "p15,0,%0,c7,c6,1") /* Data Invalidate MVA to PoC */ | | 691 | ARMREG_WRITE_INLINE(dcimvac, "p15,0,%0,c7,c6,1") /* Data Invalidate MVA to PoC */ |
692 | ARMREG_WRITE_INLINE(dcisw, "p15,0,%0,c7,c6,2") /* Data Invalidate Set/Way */ | | 692 | ARMREG_WRITE_INLINE(dcisw, "p15,0,%0,c7,c6,2") /* Data Invalidate Set/Way */ |
693 | ARMREG_WRITE_INLINE(ats1cpr, "p15,0,%0,c7,c8,0") /* AddrTrans CurState PL1 Read */ | | 693 | ARMREG_WRITE_INLINE(ats1cpr, "p15,0,%0,c7,c8,0") /* AddrTrans CurState PL1 Read */ |
694 | ARMREG_WRITE_INLINE(dccmvac, "p15,0,%0,c7,c10,1") /* Data Clean MVA to PoC */ | | 694 | ARMREG_WRITE_INLINE(dccmvac, "p15,0,%0,c7,c10,1") /* Data Clean MVA to PoC */ |
695 | ARMREG_WRITE_INLINE(dccsw, "p15,0,%0,c7,c10,2") /* Data Clean Set/Way */ | | 695 | ARMREG_WRITE_INLINE(dccsw, "p15,0,%0,c7,c10,2") /* Data Clean Set/Way */ |
696 | ARMREG_WRITE_INLINE(dsb, "p15,0,%0,c7,c10,4") /* Data Synchronization Barrier */ | | 696 | ARMREG_WRITE_INLINE(dsb, "p15,0,%0,c7,c10,4") /* Data Synchronization Barrier */ |
697 | ARMREG_WRITE_INLINE(dmb, "p15,0,%0,c7,c10,5") /* Data Memory Barrier */ | | 697 | ARMREG_WRITE_INLINE(dmb, "p15,0,%0,c7,c10,5") /* Data Memory Barrier */ |
698 | ARMREG_WRITE_INLINE(dccmvau, "p15,0,%0,c7,c14,1") /* Data Clean MVA to PoU */ | | 698 | ARMREG_WRITE_INLINE(dccmvau, "p15,0,%0,c7,c14,1") /* Data Clean MVA to PoU */ |
699 | ARMREG_WRITE_INLINE(dccimvac, "p15,0,%0,c7,c14,1") /* Data Clean&Inv MVA to PoC */ | | 699 | ARMREG_WRITE_INLINE(dccimvac, "p15,0,%0,c7,c14,1") /* Data Clean&Inv MVA to PoC */ |
700 | ARMREG_WRITE_INLINE(dccisw, "p15,0,%0,c7,c14,2") /* Data Clean&Inv Set/Way */ | | 700 | ARMREG_WRITE_INLINE(dccisw, "p15,0,%0,c7,c14,2") /* Data Clean&Inv Set/Way */ |
701 | /* cp15 c8 registers */ | | 701 | /* cp15 c8 registers */ |
702 | ARMREG_WRITE_INLINE(tlbiallis, "p15,0,%0,c8,c3,0") /* Invalidate entire unified TLB, inner shareable */ | | 702 | ARMREG_WRITE_INLINE(tlbiallis, "p15,0,%0,c8,c3,0") /* Invalidate entire unified TLB, inner shareable */ |
703 | ARMREG_WRITE_INLINE(tlbimvais, "p15,0,%0,c8,c3,1") /* Invalidate unified TLB by MVA, inner shareable */ | | 703 | ARMREG_WRITE_INLINE(tlbimvais, "p15,0,%0,c8,c3,1") /* Invalidate unified TLB by MVA, inner shareable */ |
704 | ARMREG_WRITE_INLINE(tlbiasidis, "p15,0,%0,c8,c3,2") /* Invalidate unified TLB by ASID, inner shareable */ | | 704 | ARMREG_WRITE_INLINE(tlbiasidis, "p15,0,%0,c8,c3,2") /* Invalidate unified TLB by ASID, inner shareable */ |
705 | ARMREG_WRITE_INLINE(tlbimvaais, "p15,0,%0,c8,c3,3") /* Invalidate unified TLB by MVA, all ASID, inner shareable */ | | 705 | ARMREG_WRITE_INLINE(tlbimvaais, "p15,0,%0,c8,c3,3") /* Invalidate unified TLB by MVA, all ASID, inner shareable */ |
706 | ARMREG_WRITE_INLINE(itlbiall, "p15,0,%0,c8,c5,0") /* Invalidate entire instruction TLB */ | | 706 | ARMREG_WRITE_INLINE(itlbiall, "p15,0,%0,c8,c5,0") /* Invalidate entire instruction TLB */ |
707 | ARMREG_WRITE_INLINE(itlbimva, "p15,0,%0,c8,c5,1") /* Invalidate instruction TLB by MVA */ | | 707 | ARMREG_WRITE_INLINE(itlbimva, "p15,0,%0,c8,c5,1") /* Invalidate instruction TLB by MVA */ |
708 | ARMREG_WRITE_INLINE(itlbiasid, "p15,0,%0,c8,c5,2") /* Invalidate instruction TLB by ASID */ | | 708 | ARMREG_WRITE_INLINE(itlbiasid, "p15,0,%0,c8,c5,2") /* Invalidate instruction TLB by ASID */ |
709 | ARMREG_WRITE_INLINE(dtlbiall, "p15,0,%0,c8,c6,0") /* Invalidate entire data TLB */ | | 709 | ARMREG_WRITE_INLINE(dtlbiall, "p15,0,%0,c8,c6,0") /* Invalidate entire data TLB */ |
710 | ARMREG_WRITE_INLINE(dtlbimva, "p15,0,%0,c8,c6,1") /* Invalidate data TLB by MVA */ | | 710 | ARMREG_WRITE_INLINE(dtlbimva, "p15,0,%0,c8,c6,1") /* Invalidate data TLB by MVA */ |
711 | ARMREG_WRITE_INLINE(dtlbiasid, "p15,0,%0,c8,c6,2") /* Invalidate data TLB by ASID */ | | 711 | ARMREG_WRITE_INLINE(dtlbiasid, "p15,0,%0,c8,c6,2") /* Invalidate data TLB by ASID */ |
712 | ARMREG_WRITE_INLINE(tlbiall, "p15,0,%0,c8,c7,0") /* Invalidate entire unified TLB */ | | 712 | ARMREG_WRITE_INLINE(tlbiall, "p15,0,%0,c8,c7,0") /* Invalidate entire unified TLB */ |
713 | ARMREG_WRITE_INLINE(tlbimva, "p15,0,%0,c8,c7,1") /* Invalidate unified TLB by MVA */ | | 713 | ARMREG_WRITE_INLINE(tlbimva, "p15,0,%0,c8,c7,1") /* Invalidate unified TLB by MVA */ |
714 | ARMREG_WRITE_INLINE(tlbiasid, "p15,0,%0,c8,c7,2") /* Invalidate unified TLB by ASID */ | | 714 | ARMREG_WRITE_INLINE(tlbiasid, "p15,0,%0,c8,c7,2") /* Invalidate unified TLB by ASID */ |
715 | ARMREG_WRITE_INLINE(tlbimvaa, "p15,0,%0,c8,c7,3") /* Invalidate unified TLB by MVA, all ASID */ | | 715 | ARMREG_WRITE_INLINE(tlbimvaa, "p15,0,%0,c8,c7,3") /* Invalidate unified TLB by MVA, all ASID */ |
716 | /* cp15 c9 registers */ | | 716 | /* cp15 c9 registers */ |
717 | ARMREG_READ_INLINE(pmcr, "p15,0,%0,c9,c12,0") /* PMC Control Register */ | | 717 | ARMREG_READ_INLINE(pmcr, "p15,0,%0,c9,c12,0") /* PMC Control Register */ |
718 | ARMREG_WRITE_INLINE(pmcr, "p15,0,%0,c9,c12,0") /* PMC Control Register */ | | 718 | ARMREG_WRITE_INLINE(pmcr, "p15,0,%0,c9,c12,0") /* PMC Control Register */ |
719 | ARMREG_READ_INLINE(pmcntenset, "p15,0,%0,c9,c12,1") /* PMC Count Enable Set */ | | 719 | ARMREG_READ_INLINE(pmcntenset, "p15,0,%0,c9,c12,1") /* PMC Count Enable Set */ |
720 | ARMREG_WRITE_INLINE(pmcntenset, "p15,0,%0,c9,c12,1") /* PMC Count Enable Set */ | | 720 | ARMREG_WRITE_INLINE(pmcntenset, "p15,0,%0,c9,c12,1") /* PMC Count Enable Set */ |
721 | ARMREG_READ_INLINE(pmcntenclr, "p15,0,%0,c9,c12,2") /* PMC Count Enable Clear */ | | 721 | ARMREG_READ_INLINE(pmcntenclr, "p15,0,%0,c9,c12,2") /* PMC Count Enable Clear */ |
722 | ARMREG_WRITE_INLINE(pmcntenclr, "p15,0,%0,c9,c12,2") /* PMC Count Enable Clear */ | | 722 | ARMREG_WRITE_INLINE(pmcntenclr, "p15,0,%0,c9,c12,2") /* PMC Count Enable Clear */ |
723 | ARMREG_READ_INLINE(pmovsr, "p15,0,%0,c9,c12,3") /* PMC Overflow Flag Status */ | | 723 | ARMREG_READ_INLINE(pmovsr, "p15,0,%0,c9,c12,3") /* PMC Overflow Flag Status */ |
724 | ARMREG_WRITE_INLINE(pmovsr, "p15,0,%0,c9,c12,3") /* PMC Overflow Flag Status */ | | 724 | ARMREG_WRITE_INLINE(pmovsr, "p15,0,%0,c9,c12,3") /* PMC Overflow Flag Status */ |
725 | ARMREG_READ_INLINE(pmccntr, "p15,0,%0,c9,c13,0") /* PMC Cycle Counter */ | | 725 | ARMREG_READ_INLINE(pmccntr, "p15,0,%0,c9,c13,0") /* PMC Cycle Counter */ |
726 | ARMREG_WRITE_INLINE(pmccntr, "p15,0,%0,c9,c13,0") /* PMC Cycle Counter */ | | 726 | ARMREG_WRITE_INLINE(pmccntr, "p15,0,%0,c9,c13,0") /* PMC Cycle Counter */ |
727 | ARMREG_READ_INLINE(pmuserenr, "p15,0,%0,c9,c14,0") /* PMC User Enable */ | | 727 | ARMREG_READ_INLINE(pmuserenr, "p15,0,%0,c9,c14,0") /* PMC User Enable */ |
728 | ARMREG_WRITE_INLINE(pmuserenr, "p15,0,%0,c9,c14,0") /* PMC User Enable */ | | 728 | ARMREG_WRITE_INLINE(pmuserenr, "p15,0,%0,c9,c14,0") /* PMC User Enable */ |
729 | /* cp15 c13 registers */ | | 729 | /* cp15 c13 registers */ |
730 | ARMREG_READ_INLINE(contextidr, "p15,0,%0,c13,c0,1") /* Context ID Register */ | | 730 | ARMREG_READ_INLINE(contextidr, "p15,0,%0,c13,c0,1") /* Context ID Register */ |
731 | ARMREG_WRITE_INLINE(contextidr, "p15,0,%0,c13,c0,1") /* Context ID Register */ | | 731 | ARMREG_WRITE_INLINE(contextidr, "p15,0,%0,c13,c0,1") /* Context ID Register */ |
732 | ARMREG_READ_INLINE(tpidrprw, "p15,0,%0,c13,c0,4") /* PL1 only Thread ID Register */ | | 732 | ARMREG_READ_INLINE(tpidrprw, "p15,0,%0,c13,c0,4") /* PL1 only Thread ID Register */ |
733 | ARMREG_WRITE_INLINE(tpidrprw, "p15,0,%0,c13,c0,4") /* PL1 only Thread ID Register */ | | 733 | ARMREG_WRITE_INLINE(tpidrprw, "p15,0,%0,c13,c0,4") /* PL1 only Thread ID Register */ |
734 | /* cp14 c12 registers */ | | 734 | /* cp14 c12 registers */ |
735 | ARMREG_READ_INLINE(vbar, "p15,4,%0,c12,c0,0") /* Vector Base Address Register */ | | 735 | ARMREG_READ_INLINE(vbar, "p15,4,%0,c12,c0,0") /* Vector Base Address Register */ |
736 | ARMREG_WRITE_INLINE(vbar, "p15,4,%0,c12,c0,0") /* Vector Base Address Register */ | | 736 | ARMREG_WRITE_INLINE(vbar, "p15,4,%0,c12,c0,0") /* Vector Base Address Register */ |
737 | /* cp15 c14 registers */ | | 737 | /* cp15 c14 registers */ |
738 | /* cp15 Global Timer Registers */ | | 738 | /* cp15 Global Timer Registers */ |
739 | ARMREG_READ_INLINE(cntfrq, "p15,0,%0,c14,c0,0") /* Counter Frequency Register */ | | 739 | ARMREG_READ_INLINE(cntfrq, "p15,0,%0,c14,c0,0") /* Counter Frequency Register */ |
740 | ARMREG_WRITE_INLINE(cntfrq, "p15,0,%0,c14,c0,0") /* Counter Frequency Register */ | | 740 | ARMREG_WRITE_INLINE(cntfrq, "p15,0,%0,c14,c0,0") /* Counter Frequency Register */ |
741 | ARMREG_READ_INLINE(cntkctl, "p15,0,%0,c14,c1,0") /* Timer PL1 Control Register */ | | 741 | ARMREG_READ_INLINE(cntkctl, "p15,0,%0,c14,c1,0") /* Timer PL1 Control Register */ |
742 | ARMREG_WRITE_INLINE(cntkctl, "p15,0,%0,c14,c1,0") /* Timer PL1 Control Register */ | | 742 | ARMREG_WRITE_INLINE(cntkctl, "p15,0,%0,c14,c1,0") /* Timer PL1 Control Register */ |
743 | ARMREG_READ_INLINE(cntp_tval, "p15,0,%0,c14,c2,0") /* PL1 Physical TimerValue Register */ | | 743 | ARMREG_READ_INLINE(cntp_tval, "p15,0,%0,c14,c2,0") /* PL1 Physical TimerValue Register */ |
744 | ARMREG_WRITE_INLINE(cntp_tval, "p15,0,%0,c14,c2,0") /* PL1 Physical TimerValue Register */ | | 744 | ARMREG_WRITE_INLINE(cntp_tval, "p15,0,%0,c14,c2,0") /* PL1 Physical TimerValue Register */ |
745 | ARMREG_READ_INLINE(cntp_ctl, "p15,0,%0,c14,c2,1") /* PL1 Physical Timer Control Register */ | | 745 | ARMREG_READ_INLINE(cntp_ctl, "p15,0,%0,c14,c2,1") /* PL1 Physical Timer Control Register */ |
746 | ARMREG_WRITE_INLINE(cntp_ctl, "p15,0,%0,c14,c2,1") /* PL1 Physical Timer Control Register */ | | 746 | ARMREG_WRITE_INLINE(cntp_ctl, "p15,0,%0,c14,c2,1") /* PL1 Physical Timer Control Register */ |
747 | ARMREG_READ_INLINE(cntv_tval, "p15,0,%0,c14,c3,0") /* Virtual TimerValue Register */ | | 747 | ARMREG_READ_INLINE(cntv_tval, "p15,0,%0,c14,c3,0") /* Virtual TimerValue Register */ |
748 | ARMREG_WRITE_INLINE(cntv_tval, "p15,0,%0,c14,c3,0") /* Virtual TimerValue Register */ | | 748 | ARMREG_WRITE_INLINE(cntv_tval, "p15,0,%0,c14,c3,0") /* Virtual TimerValue Register */ |
749 | ARMREG_READ_INLINE(cntv_ctl, "p15,0,%0,c14,c3,1") /* Virtual Timer Control Register */ | | 749 | ARMREG_READ_INLINE(cntv_ctl, "p15,0,%0,c14,c3,1") /* Virtual Timer Control Register */ |
750 | ARMREG_WRITE_INLINE(cntv_ctl, "p15,0,%0,c14,c3,1") /* Virtual Timer Control Register */ | | 750 | ARMREG_WRITE_INLINE(cntv_ctl, "p15,0,%0,c14,c3,1") /* Virtual Timer Control Register */ |
751 | ARMREG_READ64_INLINE(cntpct, "p15,0,%Q0,%R0,c14") /* Physical Count Register */ | | 751 | ARMREG_READ64_INLINE(cntpct, "p15,0,%Q0,%R0,c14") /* Physical Count Register */ |
752 | ARMREG_WRITE64_INLINE(cntpct, "p15,0,%Q0,%R0,c14") /* Physical Count Register */ | | 752 | ARMREG_WRITE64_INLINE(cntpct, "p15,0,%Q0,%R0,c14") /* Physical Count Register */ |
753 | ARMREG_READ64_INLINE(cntvct, "p15,1,%Q0,%R0,c14") /* Virtual Count Register */ | | 753 | ARMREG_READ64_INLINE(cntvct, "p15,1,%Q0,%R0,c14") /* Virtual Count Register */ |
754 | ARMREG_WRITE64_INLINE(cntvct, "p15,1,%Q0,%R0,c14") /* Virtual Count Register */ | | 754 | ARMREG_WRITE64_INLINE(cntvct, "p15,1,%Q0,%R0,c14") /* Virtual Count Register */ |
755 | ARMREG_READ64_INLINE(cntp_cval, "p15,2,%Q0,%R0,c14") /* PL1 Physical Timer CompareValue Register */ | | 755 | ARMREG_READ64_INLINE(cntp_cval, "p15,2,%Q0,%R0,c14") /* PL1 Physical Timer CompareValue Register */ |
756 | ARMREG_WRITE64_INLINE(cntp_cval, "p15,2,%Q0,%R0,c14") /* PL1 Physical Timer CompareValue Register */ | | 756 | ARMREG_WRITE64_INLINE(cntp_cval, "p15,2,%Q0,%R0,c14") /* PL1 Physical Timer CompareValue Register */ |
757 | ARMREG_READ64_INLINE(cntv_cval, "p15,3,%Q0,%R0,c14") /* PL1 Virtual Timer CompareValue Register */ | | 757 | ARMREG_READ64_INLINE(cntv_cval, "p15,3,%Q0,%R0,c14") /* PL1 Virtual Timer CompareValue Register */ |
758 | ARMREG_WRITE64_INLINE(cntv_cval, "p15,3,%Q0,%R0,c14") /* PL1 Virtual Timer CompareValue Register */ | | 758 | ARMREG_WRITE64_INLINE(cntv_cval, "p15,3,%Q0,%R0,c14") /* PL1 Virtual Timer CompareValue Register */ |
759 | /* cp15 c15 registers */ | | 759 | /* cp15 c15 registers */ |
760 | ARMREG_READ_INLINE(cbar, "p15,4,%0,c15,c0,0") /* Configuration Base Address Register */ | | 760 | ARMREG_READ_INLINE(cbar, "p15,4,%0,c15,c0,0") /* Configuration Base Address Register */ |
761 | ARMREG_READ_INLINE(pmcrv6, "p15,0,%0,c15,c12,0") /* PMC Control Register (armv6) */ | | 761 | ARMREG_READ_INLINE(pmcrv6, "p15,0,%0,c15,c12,0") /* PMC Control Register (armv6) */ |
762 | ARMREG_WRITE_INLINE(pmcrv6, "p15,0,%0,c15,c12,0") /* PMC Control Register (armv6) */ | | 762 | ARMREG_WRITE_INLINE(pmcrv6, "p15,0,%0,c15,c12,0") /* PMC Control Register (armv6) */ |
763 | ARMREG_READ_INLINE(pmccntrv6, "p15,0,%0,c15,c12,1") /* PMC Cycle Counter (armv6) */ | | 763 | ARMREG_READ_INLINE(pmccntrv6, "p15,0,%0,c15,c12,1") /* PMC Cycle Counter (armv6) */ |
764 | ARMREG_WRITE_INLINE(pmccntrv6, "p15,0,%0,c15,c12,1") /* PMC Cycle Counter (armv6) */ | | 764 | ARMREG_WRITE_INLINE(pmccntrv6, "p15,0,%0,c15,c12,1") /* PMC Cycle Counter (armv6) */ |
765 | | | 765 | |
766 | #endif /* !__ASSEMBLER__ */ | | 766 | #endif /* !__ASSEMBLER__ */ |
767 | | | 767 | |
768 | | | 768 | |
769 | #define MPIDR_31 0x80000000 | | 769 | #define MPIDR_31 0x80000000 |
770 | #define MPIDR_U 0x40000000 // 1 = Uniprocessor | | 770 | #define MPIDR_U 0x40000000 // 1 = Uniprocessor |
771 | #define MPIDR_MT 0x01000000 // AFF0 for SMT | | 771 | #define MPIDR_MT 0x01000000 // AFF0 for SMT |
772 | #define MPIDR_AFF2 0x00ff0000 | | 772 | #define MPIDR_AFF2 0x00ff0000 |
773 | #define MPIDR_AFF1 0x0000ff00 | | 773 | #define MPIDR_AFF1 0x0000ff00 |
774 | #define MPIDR_AFF0 0x000000ff | | 774 | #define MPIDR_AFF0 0x000000ff |
775 | | | 775 | |
776 | #endif /* _ARM_ARMREG_H */ | | 776 | #endif /* _ARM_ARMREG_H */ |