Home | History | Annotate | Line # | Download | only in include
      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