1 /*        $NetBSD: mipsNN.h,v 1.14 2023/05/06 21:53:26 andvar Exp $   */
2 
3 /*
4  * Copyright 2000, 2001
5  * Broadcom Corporation. All rights reserved.
6  *
7  * This software is furnished under license and may be used and copied only
8  * in accordance with the following terms and conditions.  Subject to these
9  * conditions, you may download, copy, install, use, modify and distribute
10  * modified or unmodified copies of this software in source and/or binary
11  * form. No title or ownership is transferred hereby.
12  *
13  * 1) Any source code used, modified or distributed must reproduce and
14  *    retain this copyright notice and list of conditions as they appear in
15  *    the source file.
16  *
17  * 2) No right is granted to use any trade name, trademark, or logo of
18  *    Broadcom Corporation.  The "Broadcom Corporation" name may not be
19  *    used to endorse or promote products derived from this software
20  *    without the prior written permission of Broadcom Corporation.
21  *
22  * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED
23  *    WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF
24  *    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
25  *    NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE
26  *    FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE
27  *    LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30  *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31  *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32  *    OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 /*
36  * Values related to the MIPS32/MIPS64 Privileged Resource Architecture.
37  */
38 
39 #define   _MIPSNN_SHIFT(reg)  __MIPSNN_SHIFT(reg)
40 #define   __MIPSNN_SHIFT(reg) MIPSNN_ ## reg ## _SHIFT
41 #define   _MIPSNN_MASK(reg)   __MIPSNN_MASK(reg)
42 #define   __MIPSNN_MASK(reg)  MIPSNN_ ## reg ## _MASK
43 
44 #define   MIPSNN_GET(reg, x)                                                    \
45     ((unsigned)((x) & _MIPSNN_MASK(reg)) >> _MIPSNN_SHIFT(reg))
46 #define   MIPSNN_PUT(reg, val)                                                            \
47     (((x) << _MIPSNN_SHIFT(reg)) & _MIPSNN_MASK(reg))
48 
49 /*
50  * Values in Configuration Register (CP0 Register 16, Select 0)
51  */
52 
53 /* "M" (R): Configuration Register 1 present if set.  Defined as always set. */
54 #define   MIPSNN_CFG_M                  0x80000000
55 
56 /* Reserved for CPU implementations. */
57 //        reserved            0x7fff0000
58 
59 /* "BE" (R): Big endian if set, little endian if clear. */
60 #define   MIPSNN_CFG_BE                 0x00008000
61 
62 /* "AT" (R): architecture type implemented by processor */
63 #define   MIPSNN_CFG_AT_MASK  0x00006000
64 #define   MIPSNN_CFG_AT_SHIFT 13
65 
66 #define   MIPSNN_CFG_AT_MIPS32          0                   /* MIPS32 */
67 #define   MIPSNN_CFG_AT_MIPS64S         1                   /* MIPS64S */
68 #define   MIPSNN_CFG_AT_MIPS64          2                   /* MIPS64 */
69 //        reserved            3
70 
71 /* "AR" (R): Architecture revision level implemented by proc. */
72 #define   MIPSNN_CFG_AR_MASK  0x00001c00
73 #define   MIPSNN_CFG_AR_SHIFT 10
74 
75 #define   MIPSNN_CFG_AR_REV1  0                   /* Revision 1 */
76 #define   MIPSNN_CFG_AR_REV2  1                   /* Revision 2 */
77 //        reserved            other values
78 
79 /* "MT" (R): MMU type implemented by processor */
80 #define   MIPSNN_CFG_MT_MASK  0x00000380
81 #define   MIPSNN_CFG_MT_SHIFT 7
82 
83 #define   MIPSNN_CFG_MT_NONE  0                   /* No MMU */
84 #define   MIPSNN_CFG_MT_TLB   1                   /* Std TLB */
85 #define   MIPSNN_CFG_MT_BAT   2                   /* Std BAT */
86 #define   MIPSNN_CFG_MT_FIXED 3                   /* Std Fixed mapping */
87 //        reserved            other values
88 
89 /* Reserved.  Write as 0, reads as 0. */
90 //        reserved            0x00000070
91 
92 /* "M" (R): Virtual instruction cache if set. */
93 #define   MIPSNN_CFG_VI                 0x00000008
94 
95 /* "K0" (RW): Kseg0 coherency algorithm.  (values are TLB_ATTRs) */
96 #define   MIPSNN_CFG_K0_MASK  0x00000007
97 #define   MIPSNN_CFG_K0_SHIFT 0
98 
99 
100 /*
101  * Values in Configuration Register 1 (CP0 Register 16, Select 1)
102  */
103 
104 /* M (R): Configuration Register 2 present. */
105 #define   MIPSNN_CFG1_M                 0x80000000
106 
107 /* MS (R): Number of TLB entries - 1. */
108 #define   MIPSNN_CFG1_MS_MASK 0x7e000000
109 #define   MIPSNN_CFG1_MS_SHIFT          25
110 
111 #define   MIPSNN_CFG1_MS(x)   (MIPSNN_GET(CFG1_MS, (x)) + 1)
112 
113 /* "IS" (R): (Primary) I-cache sets per way. */
114 #define   MIPSNN_CFG1_IS_MASK 0x01c00000
115 #define   MIPSNN_CFG1_IS_SHIFT          22
116 
117 #define   MIPSNN_CFG1_IS_RSVD 7                   /* rsvd value, otherwise: */
118 #define   MIPSNN_CFG1_IS(x)   (64 << MIPSNN_GET(CFG1_IS, (x)))
119 
120 /* "IL" (R): (Primary) I-cache line size. */
121 #define   MIPSNN_CFG1_IL_MASK 0x00380000
122 #define   MIPSNN_CFG1_IL_SHIFT          19
123 
124 #define   MIPSNN_CFG1_IL_NONE 0                   /* No I-cache, */
125 #define   MIPSNN_CFG1_IL_RSVD 7                   /* rsvd value, otherwise: */
126 #define   MIPSNN_CFG1_IL(x)   (2 << MIPSNN_GET(CFG1_IL, (x)))
127 
128 /* "IA" (R): (Primary) I-cache associativity (ways - 1). */
129 #define   MIPSNN_CFG1_IA_MASK 0x00070000
130 #define   MIPSNN_CFG1_IA_SHIFT          16
131 
132 #define   MIPSNN_CFG1_IA(x)   MIPSNN_GET(CFG1_IA, (x))
133 
134 /* "DS" (R): (Primary) D-cache sets per way. */
135 #define   MIPSNN_CFG1_DS_MASK 0x0000e000
136 #define   MIPSNN_CFG1_DS_SHIFT          13
137 
138 #define   MIPSNN_CFG1_DS_RSVD 7                   /* rsvd value, otherwise: */
139 #define   MIPSNN_CFG1_DS(x)   (64 << MIPSNN_GET(CFG1_DS, (x)))
140 
141 /* "DL" (R): (Primary) D-cache line size. */
142 #define   MIPSNN_CFG1_DL_MASK 0x00001c00
143 #define   MIPSNN_CFG1_DL_SHIFT          10
144 
145 #define   MIPSNN_CFG1_DL_NONE 0                   /* No D-cache, */
146 #define   MIPSNN_CFG1_DL_RSVD 7                   /* rsvd value, otherwise: */
147 #define   MIPSNN_CFG1_DL(x)   (2 << MIPSNN_GET(CFG1_DL, (x)))
148 
149 /* "DA" (R): (Primary) D-cache associativity (ways - 1). */
150 #define   MIPSNN_CFG1_DA_MASK 0x00000380
151 #define   MIPSNN_CFG1_DA_SHIFT          7
152 
153 #define   MIPSNN_CFG1_DA(x)   MIPSNN_GET(CFG1_DA, (x))
154 
155 /* "C2" (R): Coprocessor 2 implemented if set. */
156 #define   MIPSNN_CFG1_C2                0x00000040
157 
158 /* "MD" (R): MDMX ASE implemented if set. */
159 #define   MIPSNN_CFG1_MD                0x00000020
160 
161 /* "PC" (R): Performance Counters implemented if set. */
162 #define   MIPSNN_CFG1_PC                0x00000010
163 
164 /* "WR" (R): Watch registers implemented if set. */
165 #define   MIPSNN_CFG1_WR                0x00000008
166 
167 /* "CA" (R): Code compressiong (MIPS16) implemented if set. */
168 #define   MIPSNN_CFG1_CA                0x00000004
169 
170 /* "EP" (R): EJTAG implemented if set. */
171 #define   MIPSNN_CFG1_EP                0x00000002
172 
173 /* "FP" (R): FPU implemented if set. */
174 #define   MIPSNN_CFG1_FP                0x00000001
175 
176 /*
177  * Values in Configuration Register 2 (CP0 Register 16, Select 2)
178  */
179 
180 /* "M" (R): Configuration Register 3 present. */
181 #define   MIPSNN_CFG2_M                 0x80000000
182 
183 /* "TU" (RW): Implementation specific tertiary cache status and control. */
184 #define   MIPSNN_CFG2_TU_MASK 0x70000000
185 #define   MIPSNN_CFG2_TU_SHIFT          28
186 
187 /* "TS" (R): Tertiary cache sets per way. */
188 #define   MIPSNN_CFG2_TS_MASK 0x07000000
189 #define   MIPSNN_CFG2_TS_SHIFT          24
190 
191 #define   MIPSNN_CFG2_TS(x)   (64 << MIPSNN_GET(CFG2_TS, (x)))
192 
193 /* "TL" (R): Tertiary cache line size. */
194 #define   MIPSNN_CFG2_TL_MASK 0x00700000
195 #define   MIPSNN_CFG2_TL_SHIFT          20
196 
197 #define   MIPSNN_CFG2_TL_NONE 0                   /* No Tertiary cache */
198 #define   MIPSNN_CFG2_TL(x)   (2 << MIPSNN_GET(CFG2_TL, (x)))
199 
200 /* "TA" (R): Tertiary cache associativity (ways - 1). */
201 #define   MIPSNN_CFG2_TA_MASK 0x00070000
202 #define   MIPSNN_CFG2_TA_SHIFT          16
203 
204 #define   MIPSNN_CFG2_TA(x)   MIPSNN_GET(CFG2_TA, (x))
205 
206 /* "SU" (RW): Implementation specific secondary cache status and control. */
207 #define   MIPSNN_CFG2_SU_MASK 0x0000f000
208 #define   MIPSNN_CFG2_SU_SHIFT          12
209 
210 /* "SS" (R): Secondary cache sets per way. */
211 #define   MIPSNN_CFG2_SS_MASK 0x00000700
212 #define   MIPSNN_CFG2_SS_SHIFT          8
213 
214 #define   MIPSNN_CFG2_SS(x)   (64 << MIPSNN_GET(CFG2_SS, (x)))
215 
216 /* "SL" (R): Secdonary cache line size. */
217 #define   MIPSNN_CFG2_SL_MASK 0x00000070
218 #define   MIPSNN_CFG2_SL_SHIFT          4
219 
220 #define   MIPSNN_CFG2_SL_NONE 0                   /* No Secondary cache */
221 #define   MIPSNN_CFG2_SL(x)   (2 << MIPSNN_GET(CFG2_SL, (x)))
222 
223 /* "SA" (R): Secondary cache associativity (ways - 1). */
224 #define   MIPSNN_CFG2_SA_MASK 0x00000007
225 #define   MIPSNN_CFG2_SA_SHIFT          0
226 
227 #define   MIPSNN_CFG2_SA(x)   MIPSNN_GET(CFG2_SA, (x))
228 
229 /*
230  * Values in Configuration Register 3 (CP0 Register 16, Select 3)
231  */
232 
233 /* "M" (R): Configuration Register 4 present. */
234 #define   MIPSNN_CFG3_M                 0x80000000
235 
236 /* "BPG" (R): Big Pages feature is implemented (PageMask is 64-bits wide). */
237 #define   MIPSNN_CFG3_BPG               0x40000000
238 
239 /* "CMGCR" (R): Coherency Manager memory-mapped Global Configuration Register Space is implemented. */
240 #define   MIPSNN_CFG3_CMGCR   0x20000000
241 
242 /* "IPLW" (R): Width of Status[IPL] and Cause[RIPL] fields. */
243 #define   MIPSNN_CFG3_IPLW_MASK         0x00600000
244 #define   MIPSNN_CFG3_IPLW_SHIFT        21
245 
246 #define   MIPSNN_CFG3_IPLW_6BITS        0         /* IPL and RIPL fields are 6-bits in width. */
247 #define   MIPSNN_CFG3_IPLW_8BITS        1         /* IPL and RIPL fields are 8-bits in width. */
248 //        reserved            other values
249 
250 #define   MIPSNN_CFG3_MMAR_MASK         0x001c0000
251 #define   MIPSNN_CFG3_MMAR_SHIFT        18
252 
253 #define   MIPSNN_CFG3_MMAR_REV1         0                   /* Revision 1 */
254 //        reserved            other values
255 
256 /* "MCU" (R): MCU ASE extension present. */
257 #define   MIPSNN_CFG3_MCU               0x00020000
258 
259 /* "ISAOnExc" (R/RW): ISA used on exception. */
260 #define   MIPSNN_CFG3_ISAOnExc          0x00010000          /* microMIPS used on entrance to exception vector */
261 
262 /* "ISA" (R): Instruction Set Availability. */
263 #define   MIPSNN_CFG3_ISA_MASK          0x0000c000
264 #define   MIPSNN_CFG3_ISA_SHIFT         14
265 
266 #define   MIPSNN_CFG3_ISA_MIPS64                  0         /* only MIPS64 */
267 #define   MIPSNN_CFG3_ISA_microMIPS64   1         /* only microMIPS64 */
268 #define   MIPSNN_CFG3_ISA_MIPS64_OOR    2         /* both, MIPS64 out of reset */
269 #define   MIPSNN_CFG3_ISA_microMIPS64_OOR         3         /* both, microMIPS64 OOR */
270 
271 /* "ULRI" (R): UserLocal register is implemented. */
272 #define   MIPSNN_CFG3_ULRI    0x00002000
273 
274 /* "DSP2P" (R): DSP v2 ASE extension present. */
275 #define   MIPSNN_CFG3_DSP2P   0x00000800
276 
277 /* "DSPP" (R): DSP ASE extension present. */
278 #define   MIPSNN_CFG3_DSPP    0x00000400
279 
280 /* "LPA" (R): Large physical addresses implemented. (MIPS64 rev 2 only). */
281 #define   MIPSNN_CFG3_LPA               0x00000080
282 
283 /* "VEIC" (R): External interrupt controller present. (rev 2 only). */
284 #define   MIPSNN_CFG3_VEIC    0x00000040
285 
286 /* "VINT" (R): Vectored interrupts implemented. (rev 2 only). */
287 #define   MIPSNN_CFG3_VINT    0x00000020
288 
289 /* "SP" (R): Small (1K) page support implemented. (rev 2 only). */
290 #define   MIPSNN_CFG3_SP                0x00000010
291 
292 /* "MT" (R): MT ASE extension implemented. */
293 #define   MIPSNN_CFG3_MT                0x00000004
294 
295 /* "SM" (R): SmartMIPS ASE extension implemented. */
296 #define   MIPSNN_CFG3_SM                0x00000002
297 
298 /* "TL" (R): Trace Logic implemented. */
299 #define   MIPSNN_CFG3_TL                0x00000001
300 
301 /*
302  * Values in Configuration Register 4 (CP0 Register 16, Select 4)
303  */
304 
305 /* "M" (R): Configuration Register 5 present. */
306 #define   MIPSNN_CFG4_M                                               __BIT(31)
307 
308 /* "IE" (R): TLB invalidate instruction support/configuration. */
309 #define   MIPSNN_CFG4_IE                                              __BITS(30,29)
310 
311 /* "AE" (R): Extend EntryHi[ASID] to 10 bits. */
312 #define   MIPSNN_CFG4_AE                                              __BIT(28)
313 
314 /* "VTLBSizeExt" (R): TLB invalidate instruction support/configuration. */
315 #define   MIPSNN_CFG4_VTLB_SE                               __BITS(27,24)
316 
317 /* "KScrExist" (R): Number of kernel mode scratch registers available. */
318 #define   MIPSNN_CFG4_KSCR_EXIST                                      __BITS(23,16)
319 
320 /* "MMUExtDef" (R): MMU extension definition. */
321 #define   MIPSNN_CFG4_MMU_EXT_DEF                                     __BITS(15,14)
322 #define     MIPSNN_CFG4_MMU_EXT_DEF_MMU                       1
323 #define     MIPSNN_CFG4_MMU_EXT_DEF_FLTB                                2
324 #define     MIPSNN_CFG4_MMU_EXT_DEF_VTLB                                3
325 
326 /* "MMUSizeExt" (R): Extension of Config1[MMUSize-1] field. */
327 #define   MIPSNN_CFG4_MMU_SIZE_EXT                __BITS(7,0)
328 
329 /* "FTLBPageSize" (R/RW): Indicates the Page Size of the FTLB Array Entries. */
330 #define   MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE                   __BITS(10,8)
331 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_1K      0
332 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_4K      1
333 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_16K     2
334 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_64K     3
335 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_256K    4
336 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_1G      5
337 #define     MIPSNN_CFG4_FTLB_FTLB_PAGE_SIZE_4G      6
338 /* "FTLBWays" (R): Indicates the Set Associativity of the FTLB Array. */
339 #define   MIPSNN_CFG4_FTLB_FTLB_WAYS              __BITS(7,4)
340 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_2                      0
341 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_3                      1
342 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_4                      2
343 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_5                      3
344 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_6                      4
345 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_7                      5
346 #define     MIPSNN_CFG4_FTLB_FTLB_WAYS_8                      6
347 /* "FTLBSets" (R): Indicates the number of Set per Way within the FTLB Array. */
348 #define   MIPSNN_CFG4_FTLB_FTLB_SETS              __BITS(3,0)
349 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_1                      0
350 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_2                      1
351 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_4                      2
352 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_8                      3
353 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_16                     4
354 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_32                     5
355 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_64                     6
356 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_128          7
357 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_256          8
358 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_512          9
359 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_1024         10
360 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_2048         11
361 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_4096         12
362 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_8192         13
363 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_16384        14
364 #define     MIPSNN_CFG4_FTLB_FTLB_SETS_32768        15
365 
366 /* "MMUSizeExt" (R): Extension of Config1[MMUSize-1] field. */
367 #define   MIPSNN_CFG4_FVTLB_VTLB_SIZE_EXT                   __BITS(27,24)
368 /* "FTLBPageSize" (R/RW): Indicates the Page Size of the FTLB Array Entries. */
369 #define   MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE        __BITS(12,8)
370 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_1K     0
371 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_4K     1
372 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_16K    2
373 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_64K    3
374 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_256K   4
375 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_1M     5
376 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_4M     6
377 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_16M    7
378 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_64M    8
379 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_256M   9
380 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_1G     10
381 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_4G     11
382 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_16G    12
383 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_64G    13
384 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_256G   14
385 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_1T     15
386 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_4T     16
387 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_16T    17
388 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_64T    18
389 #define     MIPSNN_CFG4_FVTLB_FTLB_PAGE_SIZE_256T   19
390 /* "FTLBWays" (R): Indicates the Set Associativity of the FTLB Array. */
391 #define   MIPSNN_CFG4_FVTLB_FTLB_WAYS             __BITS(7,4)
392 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_2                     0
393 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_3                     1
394 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_4                     2
395 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_5                     3
396 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_6                     4
397 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_7                     5
398 #define     MIPSNN_CFG4_FVTLB_FTLB_WAYS_8                     6
399 /* "FTLBSets" (R): Indicates the number of Set per Way within the FTLB Array. */
400 #define   MIPSNN_CFG4_FVTLB_FTLB_SETS             __BITS(3,0)
401 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_1                     0
402 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_2                     1
403 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_4                     2
404 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_8                     3
405 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_16          4
406 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_32          5
407 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_64          6
408 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_128         7
409 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_256         8
410 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_512         9
411 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_1024        10
412 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_2048        11
413 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_4096        12
414 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_8192        13
415 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_16384       14
416 #define     MIPSNN_CFG4_FVTLB_FTLB_SETS_32768       15
417 
418 
419 /*
420  * Values in Configuration Register 5 (CP0 Register 16, Select 5)
421  */
422 
423 /* "M" (R): Reserved for undefined configuration present. */
424 #define   MIPSNN_CFG5_M                                               __BIT(31)
425 
426 /* "K" (RW): Enable/disable Config K0/Ku/K23 if segmentation is implemented. */
427 #define   MIPSNN_CFG5_K                                               __BIT(30)
428 
429 /* "CV" (RW): Cache Error Exception Vector control disable. */
430 #define   MIPSNN_CFG5_CV                                              __BIT(29)
431 
432 /* "EVA" (R): Enhanced Virtual Addressing instructions implemented. */
433 #define   MIPSNN_CFG5_EVA                                             __BIT(28)
434 
435 /* "MSAEn" (RW): MIPS SIMD Architecture (MSA) enable. */
436 #define   MIPSNN_CFG5_MSAEn                                 __BIT(27)
437 
438 /* "XNP" (R): Extended LL/SC instructions non present. */
439 #define   MIPSNN_CFG5_XNP                                             __BIT(13)
440 
441 /* "DEC" (R): Dual Endian Capability. */
442 #define   MIPSNN_CFG5_DEC                                             __BIT(11)
443 
444 /* "L2C" (R): Indicates presense of COP0 Config2. */
445 #define   MIPSNN_CFG5_L2C                                             __BIT(10)
446 
447 /* "UFE" (RW): Enable for user mode access to Config5[FRE]. */
448 #define   MIPSNN_CFG5_UFE                                             __BIT(9)
449 
450 /* "FRE" (RW): Enable for user mode to emulate Status[FR]=0 handling. */
451 #define   MIPSNN_CFG5_FRE                                             __BIT(8)
452 
453 /* "VP" (R): Virtual Processor - multi-threading features supported. */
454 #define   MIPSNN_CFG5_VP                                              __BIT(7)
455 
456 /* "SBRI" (RW): SDBBP instruction Reserved Instruction control. */
457 #define   MIPSNN_CFG5_SBRI                                  __BIT(6)
458 
459 /* "MVH" (R): Move To/From High COP0 (MTHCO/MFHCO) instructions implemented. */
460 #define   MIPSNN_CFG5_MVH                                             __BIT(5)
461 
462 /* "LLB" (R): Load-Linked Bit (LLB) is present in COP0 LLAddr. */
463 #define   MIPSNN_CFG5_LLB                                             __BIT(4)
464 
465 /* "MRP" (R): COP0 Memory Accessibility Attributes Registers are present. */
466 #define   MIPSNN_CFG5_MRP                                             __BIT(3)
467 
468 /* "UFR" (R): Allows user-mode access to Status[FR] using CTC1/CFC1. */
469 #define   MIPSNN_CFG5_UFR                                             __BIT(2)
470 
471 /* "NFExists" (R): Nested Fault feature exists. */
472 #define   MIPSNN_CFG5_NF_EXISTS                                       __BIT(0)
473 
474 
475 /*
476  * Values in PerfCntCrl Register (CP0 Register 25, Selects 0, 2, 4, 6)
477  */
478 
479 /* "M" (R): next PerCntCtl register present. */
480 #define   MIPSNN_PERFCTL_M                                  __BIT(31)
481 
482 /* "W" (R): Width - is a 64-bit counter. */
483 #define   MIPSNN_PERFCTL_W                                  __BIT(30)
484 
485 /* "Impl" (RAZ): Impl - implementation dependent field. */
486 #define   MIPSNN_PERFCTL_IMPL                               __BITS(29,25)
487 
488 /* "EC" (Z): Reserved for Virtualisation Mode. */
489 #define   MIPSNN_PERFCTL_EC                                 __BITS(24,23)
490 
491 /* "PCTD" (RW): Performance Counter Trace Disable. */
492 #define   MIPSNN_PERFCTL_PCTD                               __BIT(15)
493 
494 /*
495  * "EVENT" (RW): Event number.  Note: The MIPS32/MIPS64 PRA specs define
496  * EventExt from 14:11 and Event from 10:5.  For ease of use, we define a
497  * single 10 bit Event field.
498  */
499 #define   MIPSNN_PERFCTL_EVENT                                        __BITS(14,5)
500 
501 /* "IE" (RW): Interrupt Enable. */
502 #define   MIPSNN_PERFCTL_IE                                 __BIT(4)
503 
504 /* "U" (RW): Enables event counting in user mode. */
505 #define   MIPSNN_PERFCTL_U                                  __BIT(3)
506 
507 /* "S" (RW): Enables event counting in supervisor mode. */
508 #define   MIPSNN_PERFCTL_S                                  __BIT(2)
509 
510 /* "K" (RW): Enables event counting in kernel mode. */
511 #define   MIPSNN_PERFCTL_K                                  __BIT(1)
512 
513 /* "EXL" (RW): Enables event counting when EXL bit in Status is one. */
514 #define   MIPSNN_PERFCTL_EXL                                __BIT(0)
515 
516 
517 /*
518  * Values in Configuration Register 6 (CP0 Register 16, Select 6)
519  * for RMI XLP processors
520  */
521 
522 /* "CTLB_SIZE" (R): Number of Combined TLB entries - 1. */
523 #define   MIPSNN_RMIXLP_CFG6_CTLB_SIZE_MASK       0xffff0000
524 #define   MIPSNN_RMIXLP_CFG6_CTLB_SIZE_SHIFT      16
525 
526 /* "VTLB_SIZE" (R): Number of Variable TLB entries - 1. */
527 #define   MIPSNN_RMIXLP_CFG6_VTLB_SIZE_MASK       0x0000ffc0
528 #define   MIPSNN_RMIXLP_CFG6_VTLB_SIZE_SHIFT      6
529 
530 /* "ELVT" (RW): Enable Large Variable TLB. */
531 #define   MIPSNN_RMIXLP_CFG6_ELVT                           0x00000020
532 
533 /* "EPW" (RW): Enable PageWalker. */
534 #define   MIPSNN_RMIXLP_CFG6_EPW                            0x00000008
535 
536 /* "EFT" (RW): Enable Fixed TLB. */
537 #define   MIPSNN_RMIXLP_CFG6_EFT                            0x00000004
538 
539 /* "PWI" (R): PageWalker implemented. */
540 #define   MIPSNN_RMIXLP_CFG6_PWI                            0x00000001
541 
542 /* "FTI" (R): Fixed TLB implemented. */
543 #define   MIPSNN_RMIXLP_CFG6_FTI                            0x00000001
544 
545 /*
546  * Values in Configuration Register 7 (CP0 Register 16, Select 7)
547  * for RMI XLP processors
548  */
549 
550 /* "LG" (RW): Small or Large Page. */
551 #define   MIPSNN_RMIXLP_CFG7_LG_MASK    __BIT(61)
552 
553 /* "MASKLG" (RW): large page size supported in CAM only. */
554 #define   MIPSNN_RMIXLP_CFG7_MASKLG_MASK          0x0000ff00
555 #define   MIPSNN_RMIXLP_CFG7_MASKLG_SHIFT         8
556 
557 #define   MIPSNN_RMIXLP_CFG7_MASKLG_4KB (0xff >> 8)
558 #define   MIPSNN_RMIXLP_CFG7_MASKLG_16KB          (0xff >> 7)
559 #define   MIPSNN_RMIXLP_CFG7_MASKLG_64KB          (0xff >> 6)
560 #define   MIPSNN_RMIXLP_CFG7_MASKLG_256KB         (0xff >> 5)
561 #define   MIPSNN_RMIXLP_CFG7_MASKLG_1MB (0xff >> 4)
562 #define   MIPSNN_RMIXLP_CFG7_MASKLG_4MB (0xff >> 3)
563 #define   MIPSNN_RMIXLP_CFG7_MASKLG_16MB          (0xff >> 2)
564 #define   MIPSNN_RMIXLP_CFG7_MASKLG_64MB          (0xff >> 1)
565 #define   MIPSNN_RMIXLP_CFG7_MASKLG_256MB         (0xff >> 0)
566 
567 /* "MASKSM" (RW): small page size supported in CAM/RAM. */
568 #define   MIPSNN_RMIXLP_CFG7_MASKSM_MASK          0x000000ff
569 #define   MIPSNN_RMIXLP_CFG7_MASKSM_SHIFT         0
570 
571 #define   MIPSNN_RMIXLP_CFG7_MASKSM_4KB (0xff >> 8)
572 #define   MIPSNN_RMIXLP_CFG7_MASKSM_16KB          (0xff >> 7)
573 #define   MIPSNN_RMIXLP_CFG7_MASKSM_64KB          (0xff >> 6)
574 #define   MIPSNN_RMIXLP_CFG7_MASKSM_256KB         (0xff >> 5)
575 #define   MIPSNN_RMIXLP_CFG7_MASKSM_1MB (0xff >> 4)
576 #define   MIPSNN_RMIXLP_CFG7_MASKSM_4MB (0xff >> 3)
577 #define   MIPSNN_RMIXLP_CFG7_MASKSM_16MB          (0xff >> 2)
578 #define   MIPSNN_RMIXLP_CFG7_MASKSM_64MB          (0xff >> 1)
579 #define   MIPSNN_RMIXLP_CFG7_MASKSM_256MB         (0xff >> 0)
580 
581 
582 /*
583  * Values in Configuration Register 6 (CP0 Register 16, Select 6)
584  * for the MTI 74K and 1074K cores.
585  */
586 /* "SPCD" (R/W): Sleep state Perforance Counter Disable. */
587 #define   MIPSNN_MTI_CFG6_SPCD                    __BIT(14)
588 
589 /* "SYND" (R/W): SYNonym tag update Disable. */
590 #define   MIPSNN_MTI_CFG6_SYND                    __BIT(13)
591 
592 /* "IFUPerfCtl" (R/W): IFU Performance Control. */
593 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_MASK                           __BIT(12:10)
594 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_STALL                          0
595 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_JUMP                           1
596 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_STALLED_INSN                   2
597 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_CACHE_MISPREDICTION  3
598 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_CACHE_PREDICTION               4
599 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_BAD_JR_CACHE_ENTRY             5
600 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_UNIMPL                         6
601 #define   MIPSNN_MTI_CFG6_IFU_PERF_CTL_CBRACH_TAKEN                   7
602 
603 /* "NMRUP" (R): Most Recently Used JTLB Replacement scheme Present. */
604 #define   MIPSNN_MTI_CFG6_NMRUP                   __BIT(9)  /* 1: implemented */
605 
606 /* "NMRUD" (R/W): NMRU Disable. */
607 #define   MIPSNN_MTI_CFG6_NMRUD                   __BIT(8)  /* 1: TLBWR is random */
608 
609 /* "JRCP" (R): JR Cache Present. */
610 #define   MIPSNN_MTI_CFG6_JRCP                    __BIT(1)  /* 1: implemented */
611 
612 /* "JRCD" (R/W): JR Cache prediction Disable. */
613 #define   MIPSNN_MTI_CFG6_JRCD                    __BIT(0)  /* 1: disabled */
614 
615 
616 /*
617  * Values in Configuration Register 7 (CP0 Register 16, Select 7)
618  * for the MTI 24K, 34K, 74K, 1004K, and 1074K cores
619  */
620 
621 /* "WII" (R): Wait IE Ignore. */
622 #define   MIPSNN_MTI_CFG7_WII           __BIT(31)
623 
624 /* "FPFS" (R/W): Fast Prepare For Store (74K, 1074K) */
625 #define   MIPSNN_MTI_CFG7_FPFS                    __BIT(30)
626 
627 /* "IHB" (R/W): Implicit HB (74K, 1074K) */
628 #define   MIPSNN_MTI_CFG7_IHB           __BIT(29)
629 
630 /* "FPR1" (R): Float Point Ratio 1 (74K, 1074K). */
631 #define   MIPSNN_MTI_CFG7_FPR1                    __BIT(28) /* 1: 3:2 */
632 
633 /* "SEHB" (R/W): slow EHB (74K, 1074K) */
634 #define   MIPSNN_MTI_CFG7_SEHB                    __BIT(27)
635 
636 /* "CP2IO" (R/W): Force COP2 data to be in-order (74K, 1074K) */
637 #define   MIPSNN_MTI_CFG7_CP2IO                   __BIT(26)
638 
639 /* "IAGN" (R/W): Issue LSU-side instructions in program order (74K, 1074K) */
640 #define   MIPSNN_MTI_CFG7_IAGN                    __BIT(25)
641 
642 /* "IAGN" (R/W): Issue LSU-side instructions in program order (74K, 1074K) */
643 #define   MIPSNN_MTI_CFG7_IAGN                    __BIT(25)
644 
645 /* "IALU" (R/W): Issue ALU-side instructions in program order (74K, 1074K) */
646 #define   MIPSNN_MTI_CFG7_IALU                    __BIT(24)
647 
648 /* "DGHR" (R/W): disable global history in branch prediction (74K, 1074K). */
649 #define   MIPSNN_MTI_CFG7_DGHR                    __BIT(23) /* 1: disable */
650 
651 /* "SG" (R/W): Single Graduation per cycle (74K, 1074K). */
652 #define   MIPSNN_MTI_CFG7_SG            __BIT(22) /* 1: no superscalar */
653 
654 /* "SUI" (R/W): Strict Uncached Instruction (SUI) policy control (74K, 1074K). */
655 #define   MIPSNN_MTI_CFG7_SUI           __BIT(21)
656 
657 /* "NCWB" (R/W): Non-Choerent WriteBack (1004K). */
658 #define   MIPSNN_MTI_CFG7_NCWB                    __BIT(20)
659 
660 /* "PCT" (R): Performance Counters per TC (34K, 1004K). */
661 #define   MIPSNN_MTI_CFG7_PCT           __BIT(19)
662 
663 /* "HCI" (R): Hardware Cache Initialization. */
664 #define   MIPSNN_MTI_CFG7_HCI           __BIT(18)
665 
666 /* "FPR" (R): Float Point Ratio. */
667 #define   MIPSNN_MTI_CFG7_FPR0                    __BIT(17) /* 1: half speed */
668 
669 #define   MIPSNN_MTI_CFG7_FPR_MASK      (MIPSNN_MTI_CFG7_FPR1|MIPSNN_MTI_CFG7_FPR0)
670 #define   MIPSNN_MTI_CFG7_FPR_SHIFT     0
671 #define   MIPSNN_MTI_CFG7_FPR_1to1      0
672 #define   MIPSNN_MTI_CFG7_FPR_2to1      MIPSNN_MTI_CFG7_FPR0
673 #define   MIPSNN_MTI_CFG7_FPR_3to2      MIPSNN_MTI_CFG7_FPR1
674 #define   MIPSNN_MTI_CFG7_FPR_RESERVED  MIPSNN_MTI_CFG7_FPR_MASK
675 
676 /* "AR" (R): Alias Removal. */
677 #define   MIPSNN_MTI_CFG7_AR            __BIT(16) /* 1: no virt aliases */
678 
679 /* "PREF" (R/W): Instruction Prefetching (74K, 1074K). */
680 #define   MIPSNN_MTI_CFG7_PREF_MASK     __BITS(12,11)
681 #define   MIPSNN_MTI_CFG7_PREF_SHIFT    11
682 #define   MIPSNN_MTI_CFG7_PREF_DISABLE  0
683 #define   MIPSNN_MTI_CFG7_PREF_ONELINE  1
684 #define   MIPSNN_MTI_CFG7_PREF_RESERVED 2
685 #define   MIPSNN_MTI_CFG7_PREF_TWOLINES 3
686 
687 /* "IAR" (R): Instruction Alias Removal. */
688 #define   MIPSNN_MTI_CFG7_IAR           __BIT(10) /* 1: no virt aliases */
689 
690 /* "IVA" (R or RW): Instruction Virtual Alias fix disable. */
691 #define   MIPSNN_MTI_CFG7_IVA           __BIT(9)  /* 1: fix disable */
692 
693 /* "ES" (RW): External Sync. */
694 #define   MIPSNN_MTI_CFG7_ES            __BIT(8)
695 
696 /* "BTLM" (RW): Block TC on Load Miss. */
697 #define   MIPSNN_MTI_CFG7_BTLM                    __BIT(7)
698 
699 /* "CPOOO" (RW): Out-Of-Order on Coprocessor interfaces (COP0/COP1). */
700 #define   MIPSNN_MTI_CFG7_CPOOO                   __BIT(6)  /* 1: disable OOO */
701 
702 /* "NBLSU" (RW): Non-Blocking LSU. (24K, 34K) */
703 #define   MIPSNN_MTI_CFG7_NBLSU                   __BIT(5)  /* 1: stalls pipeline */
704 
705 /* "UBL" (RW): Uncached Loads Blocking. */
706 #define   MIPSNN_MTI_CFG7_UBL           __BIT(4)  /* 1: blocking loads */
707 
708 /* "BP" (RW): Branch Prediction. */
709 #define   MIPSNN_MTI_CFG7_BP            __BIT(3)  /* 1: disabled */
710 
711 /* "RPS" (RW): Return Prediction Stack. */
712 #define   MIPSNN_MTI_CFG7_RPS           __BIT(2)  /* 1: disabled */
713 
714 /* "BHT" (RW): Branch History Table. */
715 #define   MIPSNN_MTI_CFG7_BHT           __BIT(1)  /* 1: disabled */
716 
717 /* "SL" (RW): Scheduled Loads. */
718 #define   MIPSNN_MTI_CFG7_SL            __BIT(0)  /* 1: load misses block */
719