| @@ -1,869 +1,869 @@ | | | @@ -1,869 +1,869 @@ |
1 | /* $NetBSD: cpuregs.h,v 1.74.28.6 2009/09/06 22:36:16 matt Exp $ */ | | 1 | /* $NetBSD: cpuregs.h,v 1.74.28.7 2009/09/07 21:34:47 matt Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1992, 1993 | | 4 | * Copyright (c) 1992, 1993 |
5 | * The Regents of the University of California. All rights reserved. | | 5 | * The Regents of the University of California. All rights reserved. |
6 | * | | 6 | * |
7 | * This code is derived from software contributed to Berkeley by | | 7 | * This code is derived from software contributed to Berkeley by |
8 | * Ralph Campbell and Rick Macklem. | | 8 | * Ralph Campbell and Rick Macklem. |
9 | * | | 9 | * |
10 | * Redistribution and use in source and binary forms, with or without | | 10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions | | 11 | * modification, are permitted provided that the following conditions |
12 | * are met: | | 12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright | | 13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. | | 14 | * notice, this list of conditions and the following disclaimer. |
15 | * 2. Redistributions in binary form must reproduce the above copyright | | 15 | * 2. Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in the | | 16 | * notice, this list of conditions and the following disclaimer in the |
17 | * documentation and/or other materials provided with the distribution. | | 17 | * documentation and/or other materials provided with the distribution. |
18 | * 3. Neither the name of the University nor the names of its contributors | | 18 | * 3. Neither the name of the University nor the names of its contributors |
19 | * may be used to endorse or promote products derived from this software | | 19 | * may be used to endorse or promote products derived from this software |
20 | * without specific prior written permission. | | 20 | * without specific prior written permission. |
21 | * | | 21 | * |
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | | 22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | 23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | 24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | | 25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | | 27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
32 | * SUCH DAMAGE. | | 32 | * SUCH DAMAGE. |
33 | * | | 33 | * |
34 | * @(#)machConst.h 8.1 (Berkeley) 6/10/93 | | 34 | * @(#)machConst.h 8.1 (Berkeley) 6/10/93 |
35 | * | | 35 | * |
36 | * machConst.h -- | | 36 | * machConst.h -- |
37 | * | | 37 | * |
38 | * Machine dependent constants. | | 38 | * Machine dependent constants. |
39 | * | | 39 | * |
40 | * Copyright (C) 1989 Digital Equipment Corporation. | | 40 | * Copyright (C) 1989 Digital Equipment Corporation. |
41 | * Permission to use, copy, modify, and distribute this software and | | 41 | * Permission to use, copy, modify, and distribute this software and |
42 | * its documentation for any purpose and without fee is hereby granted, | | 42 | * its documentation for any purpose and without fee is hereby granted, |
43 | * provided that the above copyright notice appears in all copies. | | 43 | * provided that the above copyright notice appears in all copies. |
44 | * Digital Equipment Corporation makes no representations about the | | 44 | * Digital Equipment Corporation makes no representations about the |
45 | * suitability of this software for any purpose. It is provided "as is" | | 45 | * suitability of this software for any purpose. It is provided "as is" |
46 | * without express or implied warranty. | | 46 | * without express or implied warranty. |
47 | * | | 47 | * |
48 | * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machConst.h, | | 48 | * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machConst.h, |
49 | * v 9.2 89/10/21 15:55:22 jhh Exp SPRITE (DECWRL) | | 49 | * v 9.2 89/10/21 15:55:22 jhh Exp SPRITE (DECWRL) |
50 | * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAddrs.h, | | 50 | * from: Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAddrs.h, |
51 | * v 1.2 89/08/15 18:28:21 rab Exp SPRITE (DECWRL) | | 51 | * v 1.2 89/08/15 18:28:21 rab Exp SPRITE (DECWRL) |
52 | * from: Header: /sprite/src/kernel/vm/ds3100.md/RCS/vmPmaxConst.h, | | 52 | * from: Header: /sprite/src/kernel/vm/ds3100.md/RCS/vmPmaxConst.h, |
53 | * v 9.1 89/09/18 17:33:00 shirriff Exp SPRITE (DECWRL) | | 53 | * v 9.1 89/09/18 17:33:00 shirriff Exp SPRITE (DECWRL) |
54 | */ | | 54 | */ |
55 | | | 55 | |
56 | #ifndef _MIPS_CPUREGS_H_ | | 56 | #ifndef _MIPS_CPUREGS_H_ |
57 | #define _MIPS_CPUREGS_H_ | | 57 | #define _MIPS_CPUREGS_H_ |
58 | | | 58 | |
59 | #include <sys/cdefs.h> /* For __CONCAT() */ | | 59 | #include <sys/cdefs.h> /* For __CONCAT() */ |
60 | | | 60 | |
61 | #if defined(_KERNEL_OPT) | | 61 | #if defined(_KERNEL_OPT) |
62 | #include "opt_cputype.h" | | 62 | #include "opt_cputype.h" |
63 | #endif | | 63 | #endif |
64 | | | 64 | |
65 | /* | | 65 | /* |
66 | * Address space. | | 66 | * Address space. |
67 | * 32-bit mips CPUS partition their 32-bit address space into four segments: | | 67 | * 32-bit mips CPUS partition their 32-bit address space into four segments: |
68 | * | | 68 | * |
69 | * kuseg 0x00000000 - 0x7fffffff User virtual mem, mapped | | 69 | * kuseg 0x00000000 - 0x7fffffff User virtual mem, mapped |
70 | * kseg0 0x80000000 - 0x9fffffff Physical memory, cached, unmapped | | 70 | * kseg0 0x80000000 - 0x9fffffff Physical memory, cached, unmapped |
71 | * kseg1 0xa0000000 - 0xbfffffff Physical memory, uncached, unmapped | | 71 | * kseg1 0xa0000000 - 0xbfffffff Physical memory, uncached, unmapped |
72 | * kseg2 0xc0000000 - 0xffffffff kernel-virtual, mapped | | 72 | * kseg2 0xc0000000 - 0xffffffff kernel-virtual, mapped |
73 | * | | 73 | * |
74 | * mips1 physical memory is limited to 512Mbytes, which is | | 74 | * mips1 physical memory is limited to 512Mbytes, which is |
75 | * doubly mapped in kseg0 (cached) and kseg1 (uncached.) | | 75 | * doubly mapped in kseg0 (cached) and kseg1 (uncached.) |
76 | * Caching of mapped addresses is controlled by bits in the TLB entry. | | 76 | * Caching of mapped addresses is controlled by bits in the TLB entry. |
77 | */ | | 77 | */ |
78 | | | 78 | |
79 | #ifdef _LP64 | | 79 | #ifdef _LP64 |
80 | #define MIPS_XUSEG_START (0L << 62) | | 80 | #define MIPS_XUSEG_START (0L << 62) |
81 | #define MIPS_XUSEG_P(x) (((uint64_t)(x) >> 62) == 0) | | 81 | #define MIPS_XUSEG_P(x) (((uint64_t)(x) >> 62) == 0) |
82 | #define MIPS_USEG_P(x) ((uintptr_t)(x) < 0x80000000L) | | 82 | #define MIPS_USEG_P(x) ((uintptr_t)(x) < 0x80000000L) |
83 | #define MIPS_XSSEG_START (1L << 62) | | 83 | #define MIPS_XSSEG_START (1L << 62) |
84 | #define MIPS_XSSEG_P(x) (((uint64_t)(x) >> 62) == 1) | | 84 | #define MIPS_XSSEG_P(x) (((uint64_t)(x) >> 62) == 1) |
85 | #endif | | 85 | #endif |
86 | | | 86 | |
87 | /* | | 87 | /* |
88 | * MIPS addresses are signed and we defining as negative so that | | 88 | * MIPS addresses are signed and we defining as negative so that |
89 | * in LP64 kern they get sign-extended correctly. | | 89 | * in LP64 kern they get sign-extended correctly. |
90 | */ | | 90 | */ |
91 | #ifndef _LOCORE | | 91 | #ifndef _LOCORE |
92 | #define MIPS_KSEG0_START (-0x7fffffffL-1) /* 0x80000000 */ | | 92 | #define MIPS_KSEG0_START (-0x7fffffffL-1) /* 0x80000000 */ |
93 | #define MIPS_KSEG1_START -0x60000000L /* 0xa0000000 */ | | 93 | #define MIPS_KSEG1_START -0x60000000L /* 0xa0000000 */ |
94 | #define MIPS_KSEG2_START -0x40000000L /* 0xc0000000 */ | | 94 | #define MIPS_KSEG2_START -0x40000000L /* 0xc0000000 */ |
95 | #define MIPS_MAX_MEM_ADDR -0x42000000L /* 0xbe000000 */ | | 95 | #define MIPS_MAX_MEM_ADDR -0x42000000L /* 0xbe000000 */ |
96 | #define MIPS_RESERVED_ADDR -0x40380000L /* 0xbfc80000 */ | | 96 | #define MIPS_RESERVED_ADDR -0x40380000L /* 0xbfc80000 */ |
97 | #endif | | 97 | #endif |
98 | | | 98 | |
99 | #define MIPS_PHYS_MASK 0x1fffffff | | 99 | #define MIPS_PHYS_MASK 0x1fffffff |
100 | | | 100 | |
101 | #define MIPS_KSEG0_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK) | | 101 | #define MIPS_KSEG0_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK) |
102 | #define MIPS_PHYS_TO_KSEG0(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG0_START) | | 102 | #define MIPS_PHYS_TO_KSEG0(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG0_START) |
103 | #define MIPS_KSEG1_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK) | | 103 | #define MIPS_KSEG1_TO_PHYS(x) ((uintptr_t)(x) & MIPS_PHYS_MASK) |
104 | #define MIPS_PHYS_TO_KSEG1(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG1_START) | | 104 | #define MIPS_PHYS_TO_KSEG1(x) ((uintptr_t)(x) | (intptr_t)MIPS_KSEG1_START) |
105 | | | 105 | |
106 | #define MIPS_KSEG0_P(x) (((uintptr_t)(x) & ~MIPS_PHYS_MASK) == MIPS_KSEG0_START) | | 106 | #define MIPS_KSEG0_P(x) (((intptr_t)(x) & ~MIPS_PHYS_MASK) == MIPS_KSEG0_START) |
107 | #define MIPS_KSEG1_P(x) (((uintptr_t)(x) & ~MIPS_PHYS_MASK) == MIPS_KSEG1_START) | | 107 | #define MIPS_KSEG1_P(x) (((intptr_t)(x) & ~MIPS_PHYS_MASK) == MIPS_KSEG1_START) |
108 | #define MIPS_KSEG2_P(x) ((uintptr_t)MIPS_KSEG2_START <= (uintptr_t)(x)) | | 108 | #define MIPS_KSEG2_P(x) ((uintptr_t)MIPS_KSEG2_START <= (uintptr_t)(x)) |
109 | | | 109 | |
110 | /* Map virtual address to index in mips3 r4k virtually-indexed cache */ | | 110 | /* Map virtual address to index in mips3 r4k virtually-indexed cache */ |
111 | #define MIPS3_VA_TO_CINDEX(x) \ | | 111 | #define MIPS3_VA_TO_CINDEX(x) \ |
112 | (((intptr_t)(x) & 0xffffff) | MIPS_KSEG0_START) | | 112 | (((intptr_t)(x) & 0xffffff) | MIPS_KSEG0_START) |
113 | | | 113 | |
114 | #define MIPS_XSEG_MASK (0x3fffffffffffffffLL) | | 114 | #define MIPS_XSEG_MASK (0x3fffffffffffffffLL) |
115 | #define MIPS_XKSEG_START (0x3ULL << 62) | | 115 | #define MIPS_XKSEG_START (0x3ULL << 62) |
116 | #define MIPS_XKSEG_P(x) (((uint64_t)(x) >> 62) == 3) | | 116 | #define MIPS_XKSEG_P(x) (((uint64_t)(x) >> 62) == 3) |
117 | | | 117 | |
118 | #define MIPS_XKPHYS_START (0x2ULL << 62) | | 118 | #define MIPS_XKPHYS_START (0x2ULL << 62) |
119 | #define MIPS_PHYS_TO_XKPHYS(cca,x) \ | | 119 | #define MIPS_PHYS_TO_XKPHYS(cca,x) \ |
120 | (MIPS_XKPHYS_START | ((uint64_t)(cca) << 59) | (x)) | | 120 | (MIPS_XKPHYS_START | ((uint64_t)(cca) << 59) | (x)) |
121 | #define MIPS_XKPHYS_TO_PHYS(x) ((x) & 0x0effffffffffffffLL) | | 121 | #define MIPS_XKPHYS_TO_PHYS(x) ((uintptr_t)(x) & 0x0effffffffffffffLL) |
122 | #define MIPS_XKPHYS_TO_CCA(x) (((x) >> 59) & 7) | | 122 | #define MIPS_XKPHYS_TO_CCA(x) (((uintptr_t)(x) >> 59) & 7) |
123 | #define MIPS_XKPHYS_P(x) (((uint64_t)(x) >> 62) == 2) | | 123 | #define MIPS_XKPHYS_P(x) (((uint64_t)(x) >> 62) == 2) |
124 | | | 124 | |
125 | #define CCA_UNCACHED 2 | | 125 | #define CCA_UNCACHED 2 |
126 | #define CCA_CACHEABLE 3 /* cacheable non-coherent */ | | 126 | #define CCA_CACHEABLE 3 /* cacheable non-coherent */ |
127 | | | 127 | |
128 | /* CPU dependent mtc0 hazard hook */ | | 128 | /* CPU dependent mtc0 hazard hook */ |
129 | #define COP0_SYNC /* nothing */ | | 129 | #define COP0_SYNC /* nothing */ |
130 | #define COP0_HAZARD_FPUENABLE nop; nop; nop; nop; | | 130 | #define COP0_HAZARD_FPUENABLE nop; nop; nop; nop; |
131 | | | 131 | |
132 | /* | | 132 | /* |
133 | * The bits in the cause register. | | 133 | * The bits in the cause register. |
134 | * | | 134 | * |
135 | * Bits common to r3000 and r4000: | | 135 | * Bits common to r3000 and r4000: |
136 | * | | 136 | * |
137 | * MIPS_CR_BR_DELAY Exception happened in branch delay slot. | | 137 | * MIPS_CR_BR_DELAY Exception happened in branch delay slot. |
138 | * MIPS_CR_COP_ERR Coprocessor error. | | 138 | * MIPS_CR_COP_ERR Coprocessor error. |
139 | * MIPS_CR_IP Interrupt pending bits defined below. | | 139 | * MIPS_CR_IP Interrupt pending bits defined below. |
140 | * (same meaning as in CAUSE register). | | 140 | * (same meaning as in CAUSE register). |
141 | * MIPS_CR_EXC_CODE The exception type (see exception codes below). | | 141 | * MIPS_CR_EXC_CODE The exception type (see exception codes below). |
142 | * | | 142 | * |
143 | * Differences: | | 143 | * Differences: |
144 | * r3k has 4 bits of execption type, r4k has 5 bits. | | 144 | * r3k has 4 bits of execption type, r4k has 5 bits. |
145 | */ | | 145 | */ |
146 | #define MIPS_CR_BR_DELAY 0x80000000 | | 146 | #define MIPS_CR_BR_DELAY 0x80000000 |
147 | #define MIPS_CR_COP_ERR 0x30000000 | | 147 | #define MIPS_CR_COP_ERR 0x30000000 |
148 | #define MIPS1_CR_EXC_CODE 0x0000003C /* four bits */ | | 148 | #define MIPS1_CR_EXC_CODE 0x0000003C /* four bits */ |
149 | #define MIPS3_CR_EXC_CODE 0x0000007C /* five bits */ | | 149 | #define MIPS3_CR_EXC_CODE 0x0000007C /* five bits */ |
150 | #define MIPS_CR_IP 0x0000FF00 | | 150 | #define MIPS_CR_IP 0x0000FF00 |
151 | #define MIPS_CR_EXC_CODE_SHIFT 2 | | 151 | #define MIPS_CR_EXC_CODE_SHIFT 2 |
152 | | | 152 | |
153 | /* | | 153 | /* |
154 | * The bits in the status register. All bits are active when set to 1. | | 154 | * The bits in the status register. All bits are active when set to 1. |
155 | * | | 155 | * |
156 | * R3000 status register fields: | | 156 | * R3000 status register fields: |
157 | * MIPS_SR_COP_USABILITY Control the usability of the four coprocessors. | | 157 | * MIPS_SR_COP_USABILITY Control the usability of the four coprocessors. |
158 | * MIPS_SR_TS TLB shutdown. | | 158 | * MIPS_SR_TS TLB shutdown. |
159 | * | | 159 | * |
160 | * MIPS_SR_INT_IE Master (current) interrupt enable bit. | | 160 | * MIPS_SR_INT_IE Master (current) interrupt enable bit. |
161 | * | | 161 | * |
162 | * Differences: | | 162 | * Differences: |
163 | * r3k has cache control is via frobbing SR register bits, whereas the | | 163 | * r3k has cache control is via frobbing SR register bits, whereas the |
164 | * r4k cache control is via explicit instructions. | | 164 | * r4k cache control is via explicit instructions. |
165 | * r3k has a 3-entry stack of kernel/user bits, whereas the | | 165 | * r3k has a 3-entry stack of kernel/user bits, whereas the |
166 | * r4k has kernel/supervisor/user. | | 166 | * r4k has kernel/supervisor/user. |
167 | */ | | 167 | */ |
168 | #define MIPS_SR_COP_USABILITY 0xf0000000 | | 168 | #define MIPS_SR_COP_USABILITY 0xf0000000 |
169 | #define MIPS_SR_COP_0_BIT 0x10000000 | | 169 | #define MIPS_SR_COP_0_BIT 0x10000000 |
170 | #define MIPS_SR_COP_1_BIT 0x20000000 | | 170 | #define MIPS_SR_COP_1_BIT 0x20000000 |
171 | | | 171 | |
172 | /* r4k and r3k differences, see below */ | | 172 | /* r4k and r3k differences, see below */ |
173 | | | 173 | |
174 | #define MIPS_SR_MX 0x01000000 /* MIPS64 */ | | 174 | #define MIPS_SR_MX 0x01000000 /* MIPS64 */ |
175 | #define MIPS_SR_PX 0x00800000 /* MIPS64 */ | | 175 | #define MIPS_SR_PX 0x00800000 /* MIPS64 */ |
176 | #define MIPS_SR_BEV 0x00400000 /* Use boot exception vector */ | | 176 | #define MIPS_SR_BEV 0x00400000 /* Use boot exception vector */ |
177 | #define MIPS_SR_TS 0x00200000 | | 177 | #define MIPS_SR_TS 0x00200000 |
178 | | | 178 | |
179 | /* r4k and r3k differences, see below */ | | 179 | /* r4k and r3k differences, see below */ |
180 | | | 180 | |
181 | #define MIPS_SR_INT_IE 0x00000001 | | 181 | #define MIPS_SR_INT_IE 0x00000001 |
182 | /*#define MIPS_SR_MBZ 0x0f8000c0*/ /* Never used, true for r3k */ | | 182 | /*#define MIPS_SR_MBZ 0x0f8000c0*/ /* Never used, true for r3k */ |
183 | /*#define MIPS_SR_INT_MASK 0x0000ff00*/ | | 183 | /*#define MIPS_SR_INT_MASK 0x0000ff00*/ |
184 | | | 184 | |
185 | | | 185 | |
186 | /* | | 186 | /* |
187 | * The R2000/R3000-specific status register bit definitions. | | 187 | * The R2000/R3000-specific status register bit definitions. |
188 | * all bits are active when set to 1. | | 188 | * all bits are active when set to 1. |
189 | * | | 189 | * |
190 | * MIPS_SR_PARITY_ERR Parity error. | | 190 | * MIPS_SR_PARITY_ERR Parity error. |
191 | * MIPS_SR_CACHE_MISS Most recent D-cache load resulted in a miss. | | 191 | * MIPS_SR_CACHE_MISS Most recent D-cache load resulted in a miss. |
192 | * MIPS_SR_PARITY_ZERO Zero replaces outgoing parity bits. | | 192 | * MIPS_SR_PARITY_ZERO Zero replaces outgoing parity bits. |
193 | * MIPS_SR_SWAP_CACHES Swap I-cache and D-cache. | | 193 | * MIPS_SR_SWAP_CACHES Swap I-cache and D-cache. |
194 | * MIPS_SR_ISOL_CACHES Isolate D-cache from main memory. | | 194 | * MIPS_SR_ISOL_CACHES Isolate D-cache from main memory. |
195 | * Interrupt enable bits defined below. | | 195 | * Interrupt enable bits defined below. |
196 | * MIPS_SR_KU_OLD Old kernel/user mode bit. 1 => user mode. | | 196 | * MIPS_SR_KU_OLD Old kernel/user mode bit. 1 => user mode. |
197 | * MIPS_SR_INT_ENA_OLD Old interrupt enable bit. | | 197 | * MIPS_SR_INT_ENA_OLD Old interrupt enable bit. |
198 | * MIPS_SR_KU_PREV Previous kernel/user mode bit. 1 => user mode. | | 198 | * MIPS_SR_KU_PREV Previous kernel/user mode bit. 1 => user mode. |
199 | * MIPS_SR_INT_ENA_PREV Previous interrupt enable bit. | | 199 | * MIPS_SR_INT_ENA_PREV Previous interrupt enable bit. |
200 | * MIPS_SR_KU_CUR Current kernel/user mode bit. 1 => user mode. | | 200 | * MIPS_SR_KU_CUR Current kernel/user mode bit. 1 => user mode. |
201 | */ | | 201 | */ |
202 | | | 202 | |
203 | #define MIPS1_PARITY_ERR 0x00100000 | | 203 | #define MIPS1_PARITY_ERR 0x00100000 |
204 | #define MIPS1_CACHE_MISS 0x00080000 | | 204 | #define MIPS1_CACHE_MISS 0x00080000 |
205 | #define MIPS1_PARITY_ZERO 0x00040000 | | 205 | #define MIPS1_PARITY_ZERO 0x00040000 |
206 | #define MIPS1_SWAP_CACHES 0x00020000 | | 206 | #define MIPS1_SWAP_CACHES 0x00020000 |
207 | #define MIPS1_ISOL_CACHES 0x00010000 | | 207 | #define MIPS1_ISOL_CACHES 0x00010000 |
208 | | | 208 | |
209 | #define MIPS1_SR_KU_OLD 0x00000020 /* 2nd stacked KU/IE*/ | | 209 | #define MIPS1_SR_KU_OLD 0x00000020 /* 2nd stacked KU/IE*/ |
210 | #define MIPS1_SR_INT_ENA_OLD 0x00000010 /* 2nd stacked KU/IE*/ | | 210 | #define MIPS1_SR_INT_ENA_OLD 0x00000010 /* 2nd stacked KU/IE*/ |
211 | #define MIPS1_SR_KU_PREV 0x00000008 /* 1st stacked KU/IE*/ | | 211 | #define MIPS1_SR_KU_PREV 0x00000008 /* 1st stacked KU/IE*/ |
212 | #define MIPS1_SR_INT_ENA_PREV 0x00000004 /* 1st stacked KU/IE*/ | | 212 | #define MIPS1_SR_INT_ENA_PREV 0x00000004 /* 1st stacked KU/IE*/ |
213 | #define MIPS1_SR_KU_CUR 0x00000002 /* current KU */ | | 213 | #define MIPS1_SR_KU_CUR 0x00000002 /* current KU */ |
214 | | | 214 | |
215 | /* backwards compatibility */ | | 215 | /* backwards compatibility */ |
216 | #define MIPS_SR_PARITY_ERR MIPS1_PARITY_ERR | | 216 | #define MIPS_SR_PARITY_ERR MIPS1_PARITY_ERR |
217 | #define MIPS_SR_CACHE_MISS MIPS1_CACHE_MISS | | 217 | #define MIPS_SR_CACHE_MISS MIPS1_CACHE_MISS |
218 | #define MIPS_SR_PARITY_ZERO MIPS1_PARITY_ZERO | | 218 | #define MIPS_SR_PARITY_ZERO MIPS1_PARITY_ZERO |
219 | #define MIPS_SR_SWAP_CACHES MIPS1_SWAP_CACHES | | 219 | #define MIPS_SR_SWAP_CACHES MIPS1_SWAP_CACHES |
220 | #define MIPS_SR_ISOL_CACHES MIPS1_ISOL_CACHES | | 220 | #define MIPS_SR_ISOL_CACHES MIPS1_ISOL_CACHES |
221 | | | 221 | |
222 | #define MIPS_SR_KU_OLD MIPS1_SR_KU_OLD | | 222 | #define MIPS_SR_KU_OLD MIPS1_SR_KU_OLD |
223 | #define MIPS_SR_INT_ENA_OLD MIPS1_SR_INT_ENA_OLD | | 223 | #define MIPS_SR_INT_ENA_OLD MIPS1_SR_INT_ENA_OLD |
224 | #define MIPS_SR_KU_PREV MIPS1_SR_KU_PREV | | 224 | #define MIPS_SR_KU_PREV MIPS1_SR_KU_PREV |
225 | #define MIPS_SR_KU_CUR MIPS1_SR_KU_CUR | | 225 | #define MIPS_SR_KU_CUR MIPS1_SR_KU_CUR |
226 | #define MIPS_SR_INT_ENA_PREV MIPS1_SR_INT_ENA_PREV | | 226 | #define MIPS_SR_INT_ENA_PREV MIPS1_SR_INT_ENA_PREV |
227 | | | 227 | |
228 | /* | | 228 | /* |
229 | * R4000 status register bit definitons, | | 229 | * R4000 status register bit definitons, |
230 | * where different from r2000/r3000. | | 230 | * where different from r2000/r3000. |
231 | */ | | 231 | */ |
232 | #define MIPS3_SR_XX 0x80000000 | | 232 | #define MIPS3_SR_XX 0x80000000 |
233 | #define MIPS3_SR_RP 0x08000000 | | 233 | #define MIPS3_SR_RP 0x08000000 |
234 | #define MIPS3_SR_FR 0x04000000 | | 234 | #define MIPS3_SR_FR 0x04000000 |
235 | #define MIPS3_SR_RE 0x02000000 | | 235 | #define MIPS3_SR_RE 0x02000000 |
236 | | | 236 | |
237 | #define MIPS3_SR_DIAG_DL 0x01000000 /* QED 52xx */ | | 237 | #define MIPS3_SR_DIAG_DL 0x01000000 /* QED 52xx */ |
238 | #define MIPS3_SR_DIAG_IL 0x00800000 /* QED 52xx */ | | 238 | #define MIPS3_SR_DIAG_IL 0x00800000 /* QED 52xx */ |
239 | #define MIPS3_SR_SR 0x00100000 | | 239 | #define MIPS3_SR_SR 0x00100000 |
240 | #define MIPS3_SR_NMI 0x00080000 /* MIPS32/64 */ | | 240 | #define MIPS3_SR_NMI 0x00080000 /* MIPS32/64 */ |
241 | #define MIPS3_SR_DIAG_CH 0x00040000 | | 241 | #define MIPS3_SR_DIAG_CH 0x00040000 |
242 | #define MIPS3_SR_DIAG_CE 0x00020000 | | 242 | #define MIPS3_SR_DIAG_CE 0x00020000 |
243 | #define MIPS3_SR_DIAG_PE 0x00010000 | | 243 | #define MIPS3_SR_DIAG_PE 0x00010000 |
244 | #define MIPS3_SR_EIE 0x00010000 /* TX79/R5900 */ | | 244 | #define MIPS3_SR_EIE 0x00010000 /* TX79/R5900 */ |
245 | #define MIPS3_SR_KX 0x00000080 | | 245 | #define MIPS3_SR_KX 0x00000080 |
246 | #define MIPS3_SR_SX 0x00000040 | | 246 | #define MIPS3_SR_SX 0x00000040 |
247 | #define MIPS3_SR_UX 0x00000020 | | 247 | #define MIPS3_SR_UX 0x00000020 |
248 | #define MIPS3_SR_KSU_MASK 0x00000018 | | 248 | #define MIPS3_SR_KSU_MASK 0x00000018 |
249 | #define MIPS3_SR_KSU_USER 0x00000010 | | 249 | #define MIPS3_SR_KSU_USER 0x00000010 |
250 | #define MIPS3_SR_KSU_SUPER 0x00000008 | | 250 | #define MIPS3_SR_KSU_SUPER 0x00000008 |
251 | #define MIPS3_SR_KSU_KERNEL 0x00000000 | | 251 | #define MIPS3_SR_KSU_KERNEL 0x00000000 |
252 | #define MIPS3_SR_ERL 0x00000004 | | 252 | #define MIPS3_SR_ERL 0x00000004 |
253 | #define MIPS3_SR_EXL 0x00000002 | | 253 | #define MIPS3_SR_EXL 0x00000002 |
254 | | | 254 | |
255 | #ifdef MIPS3_5900 | | 255 | #ifdef MIPS3_5900 |
256 | #undef MIPS_SR_INT_IE | | 256 | #undef MIPS_SR_INT_IE |
257 | #define MIPS_SR_INT_IE 0x00010001 /* XXX */ | | 257 | #define MIPS_SR_INT_IE 0x00010001 /* XXX */ |
258 | #endif | | 258 | #endif |
259 | | | 259 | |
260 | #define MIPS_SR_SOFT_RESET MIPS3_SR_SOFT_RESET | | 260 | #define MIPS_SR_SOFT_RESET MIPS3_SR_SOFT_RESET |
261 | #define MIPS_SR_DIAG_CH MIPS3_SR_DIAG_CH | | 261 | #define MIPS_SR_DIAG_CH MIPS3_SR_DIAG_CH |
262 | #define MIPS_SR_DIAG_CE MIPS3_SR_DIAG_CE | | 262 | #define MIPS_SR_DIAG_CE MIPS3_SR_DIAG_CE |
263 | #define MIPS_SR_DIAG_PE MIPS3_SR_DIAG_PE | | 263 | #define MIPS_SR_DIAG_PE MIPS3_SR_DIAG_PE |
264 | #define MIPS_SR_KX MIPS3_SR_KX | | 264 | #define MIPS_SR_KX MIPS3_SR_KX |
265 | #define MIPS_SR_SX MIPS3_SR_SX | | 265 | #define MIPS_SR_SX MIPS3_SR_SX |
266 | #define MIPS_SR_UX MIPS3_SR_UX | | 266 | #define MIPS_SR_UX MIPS3_SR_UX |
267 | | | 267 | |
268 | #define MIPS_SR_KSU_MASK MIPS3_SR_KSU_MASK | | 268 | #define MIPS_SR_KSU_MASK MIPS3_SR_KSU_MASK |
269 | #define MIPS_SR_KSU_USER MIPS3_SR_KSU_USER | | 269 | #define MIPS_SR_KSU_USER MIPS3_SR_KSU_USER |
270 | #define MIPS_SR_KSU_SUPER MIPS3_SR_KSU_SUPER | | 270 | #define MIPS_SR_KSU_SUPER MIPS3_SR_KSU_SUPER |
271 | #define MIPS_SR_KSU_KERNEL MIPS3_SR_KSU_KERNEL | | 271 | #define MIPS_SR_KSU_KERNEL MIPS3_SR_KSU_KERNEL |
272 | #define MIPS_SR_ERL MIPS3_SR_ERL | | 272 | #define MIPS_SR_ERL MIPS3_SR_ERL |
273 | #define MIPS_SR_EXL MIPS3_SR_EXL | | 273 | #define MIPS_SR_EXL MIPS3_SR_EXL |
274 | | | 274 | |
275 | | | 275 | |
276 | /* | | 276 | /* |
277 | * The interrupt masks. | | 277 | * The interrupt masks. |
278 | * If a bit in the mask is 1 then the interrupt is enabled (or pending). | | 278 | * If a bit in the mask is 1 then the interrupt is enabled (or pending). |
279 | */ | | 279 | */ |
280 | #define MIPS_INT_MASK 0xff00 | | 280 | #define MIPS_INT_MASK 0xff00 |
281 | #define MIPS_INT_MASK_5 0x8000 | | 281 | #define MIPS_INT_MASK_5 0x8000 |
282 | #define MIPS_INT_MASK_4 0x4000 | | 282 | #define MIPS_INT_MASK_4 0x4000 |
283 | #define MIPS_INT_MASK_3 0x2000 | | 283 | #define MIPS_INT_MASK_3 0x2000 |
284 | #define MIPS_INT_MASK_2 0x1000 | | 284 | #define MIPS_INT_MASK_2 0x1000 |
285 | #define MIPS_INT_MASK_1 0x0800 | | 285 | #define MIPS_INT_MASK_1 0x0800 |
286 | #define MIPS_INT_MASK_0 0x0400 | | 286 | #define MIPS_INT_MASK_0 0x0400 |
287 | #define MIPS_HARD_INT_MASK 0xfc00 | | 287 | #define MIPS_HARD_INT_MASK 0xfc00 |
288 | #define MIPS_SOFT_INT_MASK_1 0x0200 | | 288 | #define MIPS_SOFT_INT_MASK_1 0x0200 |
289 | #define MIPS_SOFT_INT_MASK_0 0x0100 | | 289 | #define MIPS_SOFT_INT_MASK_0 0x0100 |
290 | | | 290 | |
291 | /* | | 291 | /* |
292 | * mips3 CPUs have on-chip timer at INT_MASK_5. Each platform can | | 292 | * mips3 CPUs have on-chip timer at INT_MASK_5. Each platform can |
293 | * choose to enable this interrupt. | | 293 | * choose to enable this interrupt. |
294 | */ | | 294 | */ |
295 | #if defined(MIPS3_ENABLE_CLOCK_INTR) | | 295 | #if defined(MIPS3_ENABLE_CLOCK_INTR) |
296 | #define MIPS3_INT_MASK MIPS_INT_MASK | | 296 | #define MIPS3_INT_MASK MIPS_INT_MASK |
297 | #define MIPS3_HARD_INT_MASK MIPS_HARD_INT_MASK | | 297 | #define MIPS3_HARD_INT_MASK MIPS_HARD_INT_MASK |
298 | #else | | 298 | #else |
299 | #define MIPS3_INT_MASK (MIPS_INT_MASK & ~MIPS_INT_MASK_5) | | 299 | #define MIPS3_INT_MASK (MIPS_INT_MASK & ~MIPS_INT_MASK_5) |
300 | #define MIPS3_HARD_INT_MASK (MIPS_HARD_INT_MASK & ~MIPS_INT_MASK_5) | | 300 | #define MIPS3_HARD_INT_MASK (MIPS_HARD_INT_MASK & ~MIPS_INT_MASK_5) |
301 | #endif | | 301 | #endif |
302 | | | 302 | |
303 | /* | | 303 | /* |
304 | * The bits in the context register. | | 304 | * The bits in the context register. |
305 | */ | | 305 | */ |
306 | #define MIPS1_CNTXT_PTE_BASE 0xFFE00000 | | 306 | #define MIPS1_CNTXT_PTE_BASE 0xFFE00000 |
307 | #define MIPS1_CNTXT_BAD_VPN 0x001FFFFC | | 307 | #define MIPS1_CNTXT_BAD_VPN 0x001FFFFC |
308 | | | 308 | |
309 | #define MIPS3_CNTXT_PTE_BASE 0xFF800000 | | 309 | #define MIPS3_CNTXT_PTE_BASE 0xFF800000 |
310 | #define MIPS3_CNTXT_BAD_VPN2 0x007FFFF0 | | 310 | #define MIPS3_CNTXT_BAD_VPN2 0x007FFFF0 |
311 | | | 311 | |
312 | /* | | 312 | /* |
313 | * The bits in the MIPS3 config register. | | 313 | * The bits in the MIPS3 config register. |
314 | * | | 314 | * |
315 | * bit 0..5: R/W, Bit 6..31: R/O | | 315 | * bit 0..5: R/W, Bit 6..31: R/O |
316 | */ | | 316 | */ |
317 | | | 317 | |
318 | /* kseg0 coherency algorithm - see MIPS3_TLB_ATTR values */ | | 318 | /* kseg0 coherency algorithm - see MIPS3_TLB_ATTR values */ |
319 | #define MIPS3_CONFIG_K0_MASK 0x00000007 | | 319 | #define MIPS3_CONFIG_K0_MASK 0x00000007 |
320 | | | 320 | |
321 | /* | | 321 | /* |
322 | * R/W Update on Store Conditional | | 322 | * R/W Update on Store Conditional |
323 | * 0: Store Conditional uses coherency algorithm specified by TLB | | 323 | * 0: Store Conditional uses coherency algorithm specified by TLB |
324 | * 1: Store Conditional uses cacheable coherent update on write | | 324 | * 1: Store Conditional uses cacheable coherent update on write |
325 | */ | | 325 | */ |
326 | #define MIPS3_CONFIG_CU 0x00000008 | | 326 | #define MIPS3_CONFIG_CU 0x00000008 |
327 | | | 327 | |
328 | #define MIPS3_CONFIG_DB 0x00000010 /* Primary D-cache line size */ | | 328 | #define MIPS3_CONFIG_DB 0x00000010 /* Primary D-cache line size */ |
329 | #define MIPS3_CONFIG_IB 0x00000020 /* Primary I-cache line size */ | | 329 | #define MIPS3_CONFIG_IB 0x00000020 /* Primary I-cache line size */ |
330 | #define MIPS3_CONFIG_CACHE_L1_LSIZE(config, bit) \ | | 330 | #define MIPS3_CONFIG_CACHE_L1_LSIZE(config, bit) \ |
331 | (((config) & (bit)) ? 32 : 16) | | 331 | (((config) & (bit)) ? 32 : 16) |
332 | | | 332 | |
333 | #define MIPS3_CONFIG_DC_MASK 0x000001c0 /* Primary D-cache size */ | | 333 | #define MIPS3_CONFIG_DC_MASK 0x000001c0 /* Primary D-cache size */ |
334 | #define MIPS3_CONFIG_DC_SHIFT 6 | | 334 | #define MIPS3_CONFIG_DC_SHIFT 6 |
335 | #define MIPS3_CONFIG_IC_MASK 0x00000e00 /* Primary I-cache size */ | | 335 | #define MIPS3_CONFIG_IC_MASK 0x00000e00 /* Primary I-cache size */ |
336 | #define MIPS3_CONFIG_IC_SHIFT 9 | | 336 | #define MIPS3_CONFIG_IC_SHIFT 9 |
337 | #define MIPS3_CONFIG_C_DEFBASE 0x1000 /* default base 2^12 */ | | 337 | #define MIPS3_CONFIG_C_DEFBASE 0x1000 /* default base 2^12 */ |
338 | | | 338 | |
339 | /* Cache size mode indication: available only on Vr41xx CPUs */ | | 339 | /* Cache size mode indication: available only on Vr41xx CPUs */ |
340 | #define MIPS3_CONFIG_CS 0x00001000 | | 340 | #define MIPS3_CONFIG_CS 0x00001000 |
341 | #define MIPS3_CONFIG_C_4100BASE 0x0400 /* base is 2^10 if CS=1 */ | | 341 | #define MIPS3_CONFIG_C_4100BASE 0x0400 /* base is 2^10 if CS=1 */ |
342 | #define MIPS3_CONFIG_CACHE_SIZE(config, mask, base, shift) \ | | 342 | #define MIPS3_CONFIG_CACHE_SIZE(config, mask, base, shift) \ |
343 | ((base) << (((config) & (mask)) >> (shift))) | | 343 | ((base) << (((config) & (mask)) >> (shift))) |
344 | | | 344 | |
345 | /* External cache enable: Controls L2 for R5000/Rm527x and L3 for Rm7000 */ | | 345 | /* External cache enable: Controls L2 for R5000/Rm527x and L3 for Rm7000 */ |
346 | #define MIPS3_CONFIG_SE 0x00001000 | | 346 | #define MIPS3_CONFIG_SE 0x00001000 |
347 | | | 347 | |
348 | /* Block ordering: 0: sequential, 1: sub-block */ | | 348 | /* Block ordering: 0: sequential, 1: sub-block */ |
349 | #define MIPS3_CONFIG_EB 0x00002000 | | 349 | #define MIPS3_CONFIG_EB 0x00002000 |
350 | | | 350 | |
351 | /* ECC mode - 0: ECC mode, 1: parity mode */ | | 351 | /* ECC mode - 0: ECC mode, 1: parity mode */ |
352 | #define MIPS3_CONFIG_EM 0x00004000 | | 352 | #define MIPS3_CONFIG_EM 0x00004000 |
353 | | | 353 | |
354 | /* BigEndianMem - 0: kernel and memory are little endian, 1: big endian */ | | 354 | /* BigEndianMem - 0: kernel and memory are little endian, 1: big endian */ |
355 | #define MIPS3_CONFIG_BE 0x00008000 | | 355 | #define MIPS3_CONFIG_BE 0x00008000 |
356 | | | 356 | |
357 | /* Dirty Shared coherency state - 0: enabled, 1: disabled */ | | 357 | /* Dirty Shared coherency state - 0: enabled, 1: disabled */ |
358 | #define MIPS3_CONFIG_SM 0x00010000 | | 358 | #define MIPS3_CONFIG_SM 0x00010000 |
359 | | | 359 | |
360 | /* Secondary Cache - 0: present, 1: not present */ | | 360 | /* Secondary Cache - 0: present, 1: not present */ |
361 | #define MIPS3_CONFIG_SC 0x00020000 | | 361 | #define MIPS3_CONFIG_SC 0x00020000 |
362 | | | 362 | |
363 | /* System Port width - 0: 64-bit, 1: 32-bit (QED RM523x), 2,3: reserved */ | | 363 | /* System Port width - 0: 64-bit, 1: 32-bit (QED RM523x), 2,3: reserved */ |
364 | #define MIPS3_CONFIG_EW_MASK 0x000c0000 | | 364 | #define MIPS3_CONFIG_EW_MASK 0x000c0000 |
365 | #define MIPS3_CONFIG_EW_SHIFT 18 | | 365 | #define MIPS3_CONFIG_EW_SHIFT 18 |
366 | | | 366 | |
367 | /* Secondary Cache port width - 0: 128-bit data path to S-cache, 1: reserved */ | | 367 | /* Secondary Cache port width - 0: 128-bit data path to S-cache, 1: reserved */ |
368 | #define MIPS3_CONFIG_SW 0x00100000 | | 368 | #define MIPS3_CONFIG_SW 0x00100000 |
369 | | | 369 | |
370 | /* Split Secondary Cache Mode - 0: I/D mixed, 1: I/D separated by SCAddr(17) */ | | 370 | /* Split Secondary Cache Mode - 0: I/D mixed, 1: I/D separated by SCAddr(17) */ |
371 | #define MIPS3_CONFIG_SS 0x00200000 | | 371 | #define MIPS3_CONFIG_SS 0x00200000 |
372 | | | 372 | |
373 | /* Secondary Cache line size */ | | 373 | /* Secondary Cache line size */ |
374 | #define MIPS3_CONFIG_SB_MASK 0x00c00000 | | 374 | #define MIPS3_CONFIG_SB_MASK 0x00c00000 |
375 | #define MIPS3_CONFIG_SB_SHIFT 22 | | 375 | #define MIPS3_CONFIG_SB_SHIFT 22 |
376 | #define MIPS3_CONFIG_CACHE_L2_LSIZE(config) \ | | 376 | #define MIPS3_CONFIG_CACHE_L2_LSIZE(config) \ |
377 | (0x10 << (((config) & MIPS3_CONFIG_SB_MASK) >> MIPS3_CONFIG_SB_SHIFT)) | | 377 | (0x10 << (((config) & MIPS3_CONFIG_SB_MASK) >> MIPS3_CONFIG_SB_SHIFT)) |
378 | | | 378 | |
379 | /* Write back data rate */ | | 379 | /* Write back data rate */ |
380 | #define MIPS3_CONFIG_EP_MASK 0x0f000000 | | 380 | #define MIPS3_CONFIG_EP_MASK 0x0f000000 |
381 | #define MIPS3_CONFIG_EP_SHIFT 24 | | 381 | #define MIPS3_CONFIG_EP_SHIFT 24 |
382 | | | 382 | |
383 | /* System clock ratio - this value is CPU dependent */ | | 383 | /* System clock ratio - this value is CPU dependent */ |
384 | #define MIPS3_CONFIG_EC_MASK 0x70000000 | | 384 | #define MIPS3_CONFIG_EC_MASK 0x70000000 |
385 | #define MIPS3_CONFIG_EC_SHIFT 28 | | 385 | #define MIPS3_CONFIG_EC_SHIFT 28 |
386 | | | 386 | |
387 | /* Master-Checker Mode - 1: enabled */ | | 387 | /* Master-Checker Mode - 1: enabled */ |
388 | #define MIPS3_CONFIG_CM 0x80000000 | | 388 | #define MIPS3_CONFIG_CM 0x80000000 |
389 | | | 389 | |
390 | /* | | 390 | /* |
391 | * The bits in the MIPS4 config register. | | 391 | * The bits in the MIPS4 config register. |
392 | */ | | 392 | */ |
393 | | | 393 | |
394 | /* kseg0 coherency algorithm - see MIPS3_TLB_ATTR values */ | | 394 | /* kseg0 coherency algorithm - see MIPS3_TLB_ATTR values */ |
395 | #define MIPS4_CONFIG_K0_MASK MIPS3_CONFIG_K0_MASK | | 395 | #define MIPS4_CONFIG_K0_MASK MIPS3_CONFIG_K0_MASK |
396 | #define MIPS4_CONFIG_DN_MASK 0x00000018 /* Device number */ | | 396 | #define MIPS4_CONFIG_DN_MASK 0x00000018 /* Device number */ |
397 | #define MIPS4_CONFIG_CT 0x00000020 /* CohPrcReqTar */ | | 397 | #define MIPS4_CONFIG_CT 0x00000020 /* CohPrcReqTar */ |
398 | #define MIPS4_CONFIG_PE 0x00000040 /* PreElmReq */ | | 398 | #define MIPS4_CONFIG_PE 0x00000040 /* PreElmReq */ |
399 | #define MIPS4_CONFIG_PM_MASK 0x00000180 /* PreReqMax */ | | 399 | #define MIPS4_CONFIG_PM_MASK 0x00000180 /* PreReqMax */ |
400 | #define MIPS4_CONFIG_EC_MASK 0x00001e00 /* SysClkDiv */ | | 400 | #define MIPS4_CONFIG_EC_MASK 0x00001e00 /* SysClkDiv */ |
401 | #define MIPS4_CONFIG_SB 0x00002000 /* SCBlkSize */ | | 401 | #define MIPS4_CONFIG_SB 0x00002000 /* SCBlkSize */ |
402 | #define MIPS4_CONFIG_SK 0x00004000 /* SCColEn */ | | 402 | #define MIPS4_CONFIG_SK 0x00004000 /* SCColEn */ |
403 | #define MIPS4_CONFIG_BE 0x00008000 /* MemEnd */ | | 403 | #define MIPS4_CONFIG_BE 0x00008000 /* MemEnd */ |
404 | #define MIPS4_CONFIG_SS_MASK 0x00070000 /* SCSize */ | | 404 | #define MIPS4_CONFIG_SS_MASK 0x00070000 /* SCSize */ |
405 | #define MIPS4_CONFIG_SC_MASK 0x00380000 /* SCClkDiv */ | | 405 | #define MIPS4_CONFIG_SC_MASK 0x00380000 /* SCClkDiv */ |
406 | #define MIPS4_CONFIG_RESERVED 0x03c00000 /* Reserved wired 0 */ | | 406 | #define MIPS4_CONFIG_RESERVED 0x03c00000 /* Reserved wired 0 */ |
407 | #define MIPS4_CONFIG_DC_MASK 0x1c000000 /* Primary D-Cache size */ | | 407 | #define MIPS4_CONFIG_DC_MASK 0x1c000000 /* Primary D-Cache size */ |
408 | #define MIPS4_CONFIG_IC_MASK 0xe0000000 /* Primary I-Cache size */ | | 408 | #define MIPS4_CONFIG_IC_MASK 0xe0000000 /* Primary I-Cache size */ |
409 | | | 409 | |
410 | #define MIPS4_CONFIG_DC_SHIFT 26 | | 410 | #define MIPS4_CONFIG_DC_SHIFT 26 |
411 | #define MIPS4_CONFIG_IC_SHIFT 29 | | 411 | #define MIPS4_CONFIG_IC_SHIFT 29 |
412 | | | 412 | |
413 | #define MIPS4_CONFIG_CACHE_SIZE(config, mask, base, shift) \ | | 413 | #define MIPS4_CONFIG_CACHE_SIZE(config, mask, base, shift) \ |
414 | ((base) << (((config) & (mask)) >> (shift))) | | 414 | ((base) << (((config) & (mask)) >> (shift))) |
415 | | | 415 | |
416 | #define MIPS4_CONFIG_CACHE_L2_LSIZE(config) \ | | 416 | #define MIPS4_CONFIG_CACHE_L2_LSIZE(config) \ |
417 | (((config) & MIPS4_CONFIG_SB) ? 128 : 64) | | 417 | (((config) & MIPS4_CONFIG_SB) ? 128 : 64) |
418 | | | 418 | |
419 | /* | | 419 | /* |
420 | * Location of exception vectors. | | 420 | * Location of exception vectors. |
421 | * | | 421 | * |
422 | * Common vectors: reset and UTLB miss. | | 422 | * Common vectors: reset and UTLB miss. |
423 | */ | | 423 | */ |
424 | #define MIPS_RESET_EXC_VEC MIPS_PHYS_TO_KSEG1(0x1FC00000) | | 424 | #define MIPS_RESET_EXC_VEC MIPS_PHYS_TO_KSEG1(0x1FC00000) |
425 | #define MIPS_UTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0) | | 425 | #define MIPS_UTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0) |
426 | | | 426 | |
427 | /* | | 427 | /* |
428 | * MIPS-1 general exception vector (everything else) | | 428 | * MIPS-1 general exception vector (everything else) |
429 | */ | | 429 | */ |
430 | #define MIPS1_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) | | 430 | #define MIPS1_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) |
431 | | | 431 | |
432 | /* | | 432 | /* |
433 | * MIPS-III exception vectors | | 433 | * MIPS-III exception vectors |
434 | */ | | 434 | */ |
435 | #define MIPS3_XTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) | | 435 | #define MIPS3_XTLB_MISS_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) |
436 | #define MIPS3_CACHE_ERR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100) | | 436 | #define MIPS3_CACHE_ERR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100) |
437 | #define MIPS3_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0180) | | 437 | #define MIPS3_GEN_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0180) |
438 | | | 438 | |
439 | /* | | 439 | /* |
440 | * TX79 (R5900) exception vectors | | 440 | * TX79 (R5900) exception vectors |
441 | */ | | 441 | */ |
442 | #define MIPS_R5900_COUNTER_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) | | 442 | #define MIPS_R5900_COUNTER_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0080) |
443 | #define MIPS_R5900_DEBUG_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100) | | 443 | #define MIPS_R5900_DEBUG_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0100) |
444 | | | 444 | |
445 | /* | | 445 | /* |
446 | * MIPS32/MIPS64 (and some MIPS3) dedicated interrupt vector. | | 446 | * MIPS32/MIPS64 (and some MIPS3) dedicated interrupt vector. |
447 | */ | | 447 | */ |
448 | #define MIPS3_INTR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0200) | | 448 | #define MIPS3_INTR_EXC_VEC MIPS_PHYS_TO_KSEG0(0x0200) |
449 | | | 449 | |
450 | /* | | 450 | /* |
451 | * Coprocessor 0 registers: | | 451 | * Coprocessor 0 registers: |
452 | * | | 452 | * |
453 | * v--- width for mips I,III,32,64 | | 453 | * v--- width for mips I,III,32,64 |
454 | * (3=32bit, 6=64bit, i=impl dep) | | 454 | * (3=32bit, 6=64bit, i=impl dep) |
455 | * 0 MIPS_COP_0_TLB_INDEX 3333 TLB Index. | | 455 | * 0 MIPS_COP_0_TLB_INDEX 3333 TLB Index. |
456 | * 1 MIPS_COP_0_TLB_RANDOM 3333 TLB Random. | | 456 | * 1 MIPS_COP_0_TLB_RANDOM 3333 TLB Random. |
457 | * 2 MIPS_COP_0_TLB_LOW 3... r3k TLB entry low. | | 457 | * 2 MIPS_COP_0_TLB_LOW 3... r3k TLB entry low. |
458 | * 2 MIPS_COP_0_TLB_LO0 .636 r4k TLB entry low. | | 458 | * 2 MIPS_COP_0_TLB_LO0 .636 r4k TLB entry low. |
459 | * 3 MIPS_COP_0_TLB_LO1 .636 r4k TLB entry low, extended. | | 459 | * 3 MIPS_COP_0_TLB_LO1 .636 r4k TLB entry low, extended. |
460 | * 4 MIPS_COP_0_TLB_CONTEXT 3636 TLB Context. | | 460 | * 4 MIPS_COP_0_TLB_CONTEXT 3636 TLB Context. |
461 | * 5 MIPS_COP_0_TLB_PG_MASK .333 TLB Page Mask register. | | 461 | * 5 MIPS_COP_0_TLB_PG_MASK .333 TLB Page Mask register. |
462 | * 6 MIPS_COP_0_TLB_WIRED .333 Wired TLB number. | | 462 | * 6 MIPS_COP_0_TLB_WIRED .333 Wired TLB number. |
463 | * 8 MIPS_COP_0_BAD_VADDR 3636 Bad virtual address. | | 463 | * 8 MIPS_COP_0_BAD_VADDR 3636 Bad virtual address. |
464 | * 9 MIPS_COP_0_COUNT .333 Count register. | | 464 | * 9 MIPS_COP_0_COUNT .333 Count register. |
465 | * 10 MIPS_COP_0_TLB_HI 3636 TLB entry high. | | 465 | * 10 MIPS_COP_0_TLB_HI 3636 TLB entry high. |
466 | * 11 MIPS_COP_0_COMPARE .333 Compare (against Count). | | 466 | * 11 MIPS_COP_0_COMPARE .333 Compare (against Count). |
467 | * 12 MIPS_COP_0_STATUS 3333 Status register. | | 467 | * 12 MIPS_COP_0_STATUS 3333 Status register. |
468 | * 13 MIPS_COP_0_CAUSE 3333 Exception cause register. | | 468 | * 13 MIPS_COP_0_CAUSE 3333 Exception cause register. |
469 | * 14 MIPS_COP_0_EXC_PC 3636 Exception PC. | | 469 | * 14 MIPS_COP_0_EXC_PC 3636 Exception PC. |
470 | * 15 MIPS_COP_0_PRID 3333 Processor revision identifier. | | 470 | * 15 MIPS_COP_0_PRID 3333 Processor revision identifier. |
471 | * 15/1 MIPS_COP_0_EBASE ..33 Exception Base | | 471 | * 15/1 MIPS_COP_0_EBASE ..33 Exception Base |
472 | * 16 MIPS_COP_0_CONFIG 3333 Configuration register. | | 472 | * 16 MIPS_COP_0_CONFIG 3333 Configuration register. |
473 | * 16/1 MIPS_COP_0_CONFIG1 ..33 Configuration register 1. | | 473 | * 16/1 MIPS_COP_0_CONFIG1 ..33 Configuration register 1. |
474 | * 16/2 MIPS_COP_0_CONFIG2 ..33 Configuration register 2. | | 474 | * 16/2 MIPS_COP_0_CONFIG2 ..33 Configuration register 2. |
475 | * 16/3 MIPS_COP_0_CONFIG3 ..33 Configuration register 3. | | 475 | * 16/3 MIPS_COP_0_CONFIG3 ..33 Configuration register 3. |
476 | * 17 MIPS_COP_0_LLADDR .336 Load Linked Address. | | 476 | * 17 MIPS_COP_0_LLADDR .336 Load Linked Address. |
477 | * 18 MIPS_COP_0_WATCH_LO .336 WatchLo register. | | 477 | * 18 MIPS_COP_0_WATCH_LO .336 WatchLo register. |
478 | * 19 MIPS_COP_0_WATCH_HI .333 WatchHi register. | | 478 | * 19 MIPS_COP_0_WATCH_HI .333 WatchHi register. |
479 | * 20 MIPS_COP_0_TLB_XCONTEXT .6.6 TLB XContext register. | | 479 | * 20 MIPS_COP_0_TLB_XCONTEXT .6.6 TLB XContext register. |
480 | * 23 MIPS_COP_0_DEBUG .... Debug JTAG register. | | 480 | * 23 MIPS_COP_0_DEBUG .... Debug JTAG register. |
481 | * 24 MIPS_COP_0_DEPC .... DEPC JTAG register. | | 481 | * 24 MIPS_COP_0_DEPC .... DEPC JTAG register. |
482 | * 25 MIPS_COP_0_PERFCNT ..36 Performance Counter register. | | 482 | * 25 MIPS_COP_0_PERFCNT ..36 Performance Counter register. |
483 | * 26 MIPS_COP_0_ECC .3ii ECC / Error Control register. | | 483 | * 26 MIPS_COP_0_ECC .3ii ECC / Error Control register. |
484 | * 27 MIPS_COP_0_CACHE_ERR .3ii Cache Error register. | | 484 | * 27 MIPS_COP_0_CACHE_ERR .3ii Cache Error register. |
485 | * 28/0 MIPS_COP_0_TAG_LO .3ii Cache TagLo register (instr). | | 485 | * 28/0 MIPS_COP_0_TAG_LO .3ii Cache TagLo register (instr). |
486 | * 28/1 MIPS_COP_0_DATA_LO ..ii Cache DataLo register (instr). | | 486 | * 28/1 MIPS_COP_0_DATA_LO ..ii Cache DataLo register (instr). |
487 | * 28/2 MIPS_COP_0_TAG_LO ..ii Cache TagLo register (data). | | 487 | * 28/2 MIPS_COP_0_TAG_LO ..ii Cache TagLo register (data). |
488 | * 28/3 MIPS_COP_0_DATA_LO ..ii Cache DataLo register (data). | | 488 | * 28/3 MIPS_COP_0_DATA_LO ..ii Cache DataLo register (data). |
489 | * 29/0 MIPS_COP_0_TAG_HI .3ii Cache TagHi register (instr). | | 489 | * 29/0 MIPS_COP_0_TAG_HI .3ii Cache TagHi register (instr). |
490 | * 29/1 MIPS_COP_0_DATA_HI ..ii Cache DataHi register (instr). | | 490 | * 29/1 MIPS_COP_0_DATA_HI ..ii Cache DataHi register (instr). |
491 | * 29/2 MIPS_COP_0_TAG_HI ..ii Cache TagHi register (data). | | 491 | * 29/2 MIPS_COP_0_TAG_HI ..ii Cache TagHi register (data). |
492 | * 29/3 MIPS_COP_0_DATA_HI ..ii Cache DataHi register (data). | | 492 | * 29/3 MIPS_COP_0_DATA_HI ..ii Cache DataHi register (data). |
493 | * 30 MIPS_COP_0_ERROR_PC .636 Error EPC register. | | 493 | * 30 MIPS_COP_0_ERROR_PC .636 Error EPC register. |
494 | * 31 MIPS_COP_0_DESAVE .... DESAVE JTAG register. | | 494 | * 31 MIPS_COP_0_DESAVE .... DESAVE JTAG register. |
495 | */ | | 495 | */ |
496 | #ifdef _LOCORE | | 496 | #ifdef _LOCORE |
497 | #define _(n) __CONCAT($,n) | | 497 | #define _(n) __CONCAT($,n) |
498 | #else | | 498 | #else |
499 | #define _(n) n | | 499 | #define _(n) n |
500 | #endif | | 500 | #endif |
501 | #define MIPS_COP_0_TLB_INDEX _(0) | | 501 | #define MIPS_COP_0_TLB_INDEX _(0) |
502 | #define MIPS_COP_0_TLB_RANDOM _(1) | | 502 | #define MIPS_COP_0_TLB_RANDOM _(1) |
503 | /* Name and meaning of TLB bits for $2 differ on r3k and r4k. */ | | 503 | /* Name and meaning of TLB bits for $2 differ on r3k and r4k. */ |
504 | | | 504 | |
505 | #define MIPS_COP_0_TLB_CONTEXT _(4) | | 505 | #define MIPS_COP_0_TLB_CONTEXT _(4) |
506 | /* $5 and $6 new with MIPS-III */ | | 506 | /* $5 and $6 new with MIPS-III */ |
507 | #define MIPS_COP_0_BAD_VADDR _(8) | | 507 | #define MIPS_COP_0_BAD_VADDR _(8) |
508 | #define MIPS_COP_0_TLB_HI _(10) | | 508 | #define MIPS_COP_0_TLB_HI _(10) |
509 | #define MIPS_COP_0_STATUS _(12) | | 509 | #define MIPS_COP_0_STATUS _(12) |
510 | #define MIPS_COP_0_CAUSE _(13) | | 510 | #define MIPS_COP_0_CAUSE _(13) |
511 | #define MIPS_COP_0_EXC_PC _(14) | | 511 | #define MIPS_COP_0_EXC_PC _(14) |
512 | #define MIPS_COP_0_PRID _(15) | | 512 | #define MIPS_COP_0_PRID _(15) |
513 | | | 513 | |
514 | | | 514 | |
515 | /* MIPS-I */ | | 515 | /* MIPS-I */ |
516 | #define MIPS_COP_0_TLB_LOW _(2) | | 516 | #define MIPS_COP_0_TLB_LOW _(2) |
517 | | | 517 | |
518 | /* MIPS-III */ | | 518 | /* MIPS-III */ |
519 | #define MIPS_COP_0_TLB_LO0 _(2) | | 519 | #define MIPS_COP_0_TLB_LO0 _(2) |
520 | #define MIPS_COP_0_TLB_LO1 _(3) | | 520 | #define MIPS_COP_0_TLB_LO1 _(3) |
521 | | | 521 | |
522 | #define MIPS_COP_0_TLB_PG_MASK _(5) | | 522 | #define MIPS_COP_0_TLB_PG_MASK _(5) |
523 | #define MIPS_COP_0_TLB_WIRED _(6) | | 523 | #define MIPS_COP_0_TLB_WIRED _(6) |
524 | | | 524 | |
525 | #define MIPS_COP_0_COUNT _(9) | | 525 | #define MIPS_COP_0_COUNT _(9) |
526 | #define MIPS_COP_0_COMPARE _(11) | | 526 | #define MIPS_COP_0_COMPARE _(11) |
527 | | | 527 | |
528 | #define MIPS_COP_0_CONFIG _(16) | | 528 | #define MIPS_COP_0_CONFIG _(16) |
529 | #define MIPS_COP_0_LLADDR _(17) | | 529 | #define MIPS_COP_0_LLADDR _(17) |
530 | #define MIPS_COP_0_WATCH_LO _(18) | | 530 | #define MIPS_COP_0_WATCH_LO _(18) |
531 | #define MIPS_COP_0_WATCH_HI _(19) | | 531 | #define MIPS_COP_0_WATCH_HI _(19) |
532 | #define MIPS_COP_0_TLB_XCONTEXT _(20) | | 532 | #define MIPS_COP_0_TLB_XCONTEXT _(20) |
533 | #define MIPS_COP_0_ECC _(26) | | 533 | #define MIPS_COP_0_ECC _(26) |
534 | #define MIPS_COP_0_CACHE_ERR _(27) | | 534 | #define MIPS_COP_0_CACHE_ERR _(27) |
535 | #define MIPS_COP_0_TAG_LO _(28) | | 535 | #define MIPS_COP_0_TAG_LO _(28) |
536 | #define MIPS_COP_0_TAG_HI _(29) | | 536 | #define MIPS_COP_0_TAG_HI _(29) |
537 | #define MIPS_COP_0_ERROR_PC _(30) | | 537 | #define MIPS_COP_0_ERROR_PC _(30) |
538 | | | 538 | |
539 | /* MIPS32/64 */ | | 539 | /* MIPS32/64 */ |
540 | #define MIPS_COP_0_DEBUG _(23) | | 540 | #define MIPS_COP_0_DEBUG _(23) |
541 | #define MIPS_COP_0_DEPC _(24) | | 541 | #define MIPS_COP_0_DEPC _(24) |
542 | #define MIPS_COP_0_PERFCNT _(25) | | 542 | #define MIPS_COP_0_PERFCNT _(25) |
543 | #define MIPS_COP_0_DATA_LO _(28) | | 543 | #define MIPS_COP_0_DATA_LO _(28) |
544 | #define MIPS_COP_0_DATA_HI _(29) | | 544 | #define MIPS_COP_0_DATA_HI _(29) |
545 | #define MIPS_COP_0_DESAVE _(31) | | 545 | #define MIPS_COP_0_DESAVE _(31) |
546 | | | 546 | |
547 | /* | | 547 | /* |
548 | * Values for the code field in a break instruction. | | 548 | * Values for the code field in a break instruction. |
549 | */ | | 549 | */ |
550 | #define MIPS_BREAK_INSTR 0x0000000d | | 550 | #define MIPS_BREAK_INSTR 0x0000000d |
551 | #define MIPS_BREAK_VAL_MASK 0x03ff0000 | | 551 | #define MIPS_BREAK_VAL_MASK 0x03ff0000 |
552 | #define MIPS_BREAK_VAL_SHIFT 16 | | 552 | #define MIPS_BREAK_VAL_SHIFT 16 |
553 | #define MIPS_BREAK_KDB_VAL 512 | | 553 | #define MIPS_BREAK_KDB_VAL 512 |
554 | #define MIPS_BREAK_SSTEP_VAL 513 | | 554 | #define MIPS_BREAK_SSTEP_VAL 513 |
555 | #define MIPS_BREAK_BRKPT_VAL 514 | | 555 | #define MIPS_BREAK_BRKPT_VAL 514 |
556 | #define MIPS_BREAK_SOVER_VAL 515 | | 556 | #define MIPS_BREAK_SOVER_VAL 515 |
557 | #define MIPS_BREAK_KDB (MIPS_BREAK_INSTR | \ | | 557 | #define MIPS_BREAK_KDB (MIPS_BREAK_INSTR | \ |
558 | (MIPS_BREAK_KDB_VAL << MIPS_BREAK_VAL_SHIFT)) | | 558 | (MIPS_BREAK_KDB_VAL << MIPS_BREAK_VAL_SHIFT)) |
559 | #define MIPS_BREAK_SSTEP (MIPS_BREAK_INSTR | \ | | 559 | #define MIPS_BREAK_SSTEP (MIPS_BREAK_INSTR | \ |
560 | (MIPS_BREAK_SSTEP_VAL << MIPS_BREAK_VAL_SHIFT)) | | 560 | (MIPS_BREAK_SSTEP_VAL << MIPS_BREAK_VAL_SHIFT)) |
561 | #define MIPS_BREAK_BRKPT (MIPS_BREAK_INSTR | \ | | 561 | #define MIPS_BREAK_BRKPT (MIPS_BREAK_INSTR | \ |
562 | (MIPS_BREAK_BRKPT_VAL << MIPS_BREAK_VAL_SHIFT)) | | 562 | (MIPS_BREAK_BRKPT_VAL << MIPS_BREAK_VAL_SHIFT)) |
563 | #define MIPS_BREAK_SOVER (MIPS_BREAK_INSTR | \ | | 563 | #define MIPS_BREAK_SOVER (MIPS_BREAK_INSTR | \ |
564 | (MIPS_BREAK_SOVER_VAL << MIPS_BREAK_VAL_SHIFT)) | | 564 | (MIPS_BREAK_SOVER_VAL << MIPS_BREAK_VAL_SHIFT)) |
565 | | | 565 | |
566 | /* | | 566 | /* |
567 | * Mininum and maximum cache sizes. | | 567 | * Mininum and maximum cache sizes. |
568 | */ | | 568 | */ |
569 | #define MIPS_MIN_CACHE_SIZE (16 * 1024) | | 569 | #define MIPS_MIN_CACHE_SIZE (16 * 1024) |
570 | #define MIPS_MAX_CACHE_SIZE (256 * 1024) | | 570 | #define MIPS_MAX_CACHE_SIZE (256 * 1024) |
571 | #define MIPS3_MAX_PCACHE_SIZE (32 * 1024) /* max. primary cache size */ | | 571 | #define MIPS3_MAX_PCACHE_SIZE (32 * 1024) /* max. primary cache size */ |
572 | | | 572 | |
573 | /* | | 573 | /* |
574 | * The floating point version and status registers. | | 574 | * The floating point version and status registers. |
575 | */ | | 575 | */ |
576 | #define MIPS_FPU_ID $0 | | 576 | #define MIPS_FPU_ID $0 |
577 | #define MIPS_FPU_CSR $31 | | 577 | #define MIPS_FPU_CSR $31 |
578 | | | 578 | |
579 | /* | | 579 | /* |
580 | * The floating point coprocessor status register bits. | | 580 | * The floating point coprocessor status register bits. |
581 | */ | | 581 | */ |
582 | #define MIPS_FPU_ROUNDING_BITS 0x00000003 | | 582 | #define MIPS_FPU_ROUNDING_BITS 0x00000003 |
583 | #define MIPS_FPU_ROUND_RN 0x00000000 | | 583 | #define MIPS_FPU_ROUND_RN 0x00000000 |
584 | #define MIPS_FPU_ROUND_RZ 0x00000001 | | 584 | #define MIPS_FPU_ROUND_RZ 0x00000001 |
585 | #define MIPS_FPU_ROUND_RP 0x00000002 | | 585 | #define MIPS_FPU_ROUND_RP 0x00000002 |
586 | #define MIPS_FPU_ROUND_RM 0x00000003 | | 586 | #define MIPS_FPU_ROUND_RM 0x00000003 |
587 | #define MIPS_FPU_STICKY_BITS 0x0000007c | | 587 | #define MIPS_FPU_STICKY_BITS 0x0000007c |
588 | #define MIPS_FPU_STICKY_INEXACT 0x00000004 | | 588 | #define MIPS_FPU_STICKY_INEXACT 0x00000004 |
589 | #define MIPS_FPU_STICKY_UNDERFLOW 0x00000008 | | 589 | #define MIPS_FPU_STICKY_UNDERFLOW 0x00000008 |
590 | #define MIPS_FPU_STICKY_OVERFLOW 0x00000010 | | 590 | #define MIPS_FPU_STICKY_OVERFLOW 0x00000010 |
591 | #define MIPS_FPU_STICKY_DIV0 0x00000020 | | 591 | #define MIPS_FPU_STICKY_DIV0 0x00000020 |
592 | #define MIPS_FPU_STICKY_INVALID 0x00000040 | | 592 | #define MIPS_FPU_STICKY_INVALID 0x00000040 |
593 | #define MIPS_FPU_ENABLE_BITS 0x00000f80 | | 593 | #define MIPS_FPU_ENABLE_BITS 0x00000f80 |
594 | #define MIPS_FPU_ENABLE_INEXACT 0x00000080 | | 594 | #define MIPS_FPU_ENABLE_INEXACT 0x00000080 |
595 | #define MIPS_FPU_ENABLE_UNDERFLOW 0x00000100 | | 595 | #define MIPS_FPU_ENABLE_UNDERFLOW 0x00000100 |
596 | #define MIPS_FPU_ENABLE_OVERFLOW 0x00000200 | | 596 | #define MIPS_FPU_ENABLE_OVERFLOW 0x00000200 |
597 | #define MIPS_FPU_ENABLE_DIV0 0x00000400 | | 597 | #define MIPS_FPU_ENABLE_DIV0 0x00000400 |
598 | #define MIPS_FPU_ENABLE_INVALID 0x00000800 | | 598 | #define MIPS_FPU_ENABLE_INVALID 0x00000800 |
599 | #define MIPS_FPU_EXCEPTION_BITS 0x0003f000 | | 599 | #define MIPS_FPU_EXCEPTION_BITS 0x0003f000 |
600 | #define MIPS_FPU_EXCEPTION_INEXACT 0x00001000 | | 600 | #define MIPS_FPU_EXCEPTION_INEXACT 0x00001000 |
601 | #define MIPS_FPU_EXCEPTION_UNDERFLOW 0x00002000 | | 601 | #define MIPS_FPU_EXCEPTION_UNDERFLOW 0x00002000 |
602 | #define MIPS_FPU_EXCEPTION_OVERFLOW 0x00004000 | | 602 | #define MIPS_FPU_EXCEPTION_OVERFLOW 0x00004000 |
603 | #define MIPS_FPU_EXCEPTION_DIV0 0x00008000 | | 603 | #define MIPS_FPU_EXCEPTION_DIV0 0x00008000 |
604 | #define MIPS_FPU_EXCEPTION_INVALID 0x00010000 | | 604 | #define MIPS_FPU_EXCEPTION_INVALID 0x00010000 |
605 | #define MIPS_FPU_EXCEPTION_UNIMPL 0x00020000 | | 605 | #define MIPS_FPU_EXCEPTION_UNIMPL 0x00020000 |
606 | #define MIPS_FPU_COND_BIT 0x00800000 | | 606 | #define MIPS_FPU_COND_BIT 0x00800000 |
607 | #define MIPS_FPU_FLUSH_BIT 0x01000000 /* r4k, MBZ on r3k */ | | 607 | #define MIPS_FPU_FLUSH_BIT 0x01000000 /* r4k, MBZ on r3k */ |
608 | #define MIPS1_FPC_MBZ_BITS 0xff7c0000 | | 608 | #define MIPS1_FPC_MBZ_BITS 0xff7c0000 |
609 | #define MIPS3_FPC_MBZ_BITS 0xfe7c0000 | | 609 | #define MIPS3_FPC_MBZ_BITS 0xfe7c0000 |
610 | | | 610 | |
611 | | | 611 | |
612 | /* | | 612 | /* |
613 | * Constants to determine if have a floating point instruction. | | 613 | * Constants to determine if have a floating point instruction. |
614 | */ | | 614 | */ |
615 | #define MIPS_OPCODE_SHIFT 26 | | 615 | #define MIPS_OPCODE_SHIFT 26 |
616 | #define MIPS_OPCODE_C1 0x11 | | 616 | #define MIPS_OPCODE_C1 0x11 |
617 | | | 617 | |
618 | | | 618 | |
619 | /* | | 619 | /* |
620 | * The low part of the TLB entry. | | 620 | * The low part of the TLB entry. |
621 | */ | | 621 | */ |
622 | #define MIPS1_TLB_PFN 0xfffff000 | | 622 | #define MIPS1_TLB_PFN 0xfffff000 |
623 | #define MIPS1_TLB_NON_CACHEABLE_BIT 0x00000800 | | 623 | #define MIPS1_TLB_NON_CACHEABLE_BIT 0x00000800 |
624 | #define MIPS1_TLB_DIRTY_BIT 0x00000400 | | 624 | #define MIPS1_TLB_DIRTY_BIT 0x00000400 |
625 | #define MIPS1_TLB_VALID_BIT 0x00000200 | | 625 | #define MIPS1_TLB_VALID_BIT 0x00000200 |
626 | #define MIPS1_TLB_GLOBAL_BIT 0x00000100 | | 626 | #define MIPS1_TLB_GLOBAL_BIT 0x00000100 |
627 | | | 627 | |
628 | #define MIPS3_TLB_PFN 0x3fffffc0 | | 628 | #define MIPS3_TLB_PFN 0x3fffffc0 |
629 | #define MIPS3_TLB_ATTR_MASK 0x00000038 | | 629 | #define MIPS3_TLB_ATTR_MASK 0x00000038 |
630 | #define MIPS3_TLB_ATTR_SHIFT 3 | | 630 | #define MIPS3_TLB_ATTR_SHIFT 3 |
631 | #define MIPS3_TLB_DIRTY_BIT 0x00000004 | | 631 | #define MIPS3_TLB_DIRTY_BIT 0x00000004 |
632 | #define MIPS3_TLB_VALID_BIT 0x00000002 | | 632 | #define MIPS3_TLB_VALID_BIT 0x00000002 |
633 | #define MIPS3_TLB_GLOBAL_BIT 0x00000001 | | 633 | #define MIPS3_TLB_GLOBAL_BIT 0x00000001 |
634 | | | 634 | |
635 | #define MIPS1_TLB_PHYS_PAGE_SHIFT 12 | | 635 | #define MIPS1_TLB_PHYS_PAGE_SHIFT 12 |
636 | #define MIPS3_TLB_PHYS_PAGE_SHIFT 6 | | 636 | #define MIPS3_TLB_PHYS_PAGE_SHIFT 6 |
637 | #define MIPS1_TLB_PF_NUM MIPS1_TLB_PFN | | 637 | #define MIPS1_TLB_PF_NUM MIPS1_TLB_PFN |
638 | #define MIPS3_TLB_PF_NUM MIPS3_TLB_PFN | | 638 | #define MIPS3_TLB_PF_NUM MIPS3_TLB_PFN |
639 | #define MIPS1_TLB_MOD_BIT MIPS1_TLB_DIRTY_BIT | | 639 | #define MIPS1_TLB_MOD_BIT MIPS1_TLB_DIRTY_BIT |
640 | #define MIPS3_TLB_MOD_BIT MIPS3_TLB_DIRTY_BIT | | 640 | #define MIPS3_TLB_MOD_BIT MIPS3_TLB_DIRTY_BIT |
641 | | | 641 | |
642 | /* | | 642 | /* |
643 | * MIPS3_TLB_ATTR values - coherency algorithm: | | 643 | * MIPS3_TLB_ATTR values - coherency algorithm: |
644 | * 0: cacheable, noncoherent, write-through, no write allocate | | 644 | * 0: cacheable, noncoherent, write-through, no write allocate |
645 | * 1: cacheable, noncoherent, write-through, write allocate | | 645 | * 1: cacheable, noncoherent, write-through, write allocate |
646 | * 2: uncached | | 646 | * 2: uncached |
647 | * 3: cacheable, noncoherent, write-back (noncoherent) | | 647 | * 3: cacheable, noncoherent, write-back (noncoherent) |
648 | * 4: cacheable, coherent, write-back, exclusive (exclusive) | | 648 | * 4: cacheable, coherent, write-back, exclusive (exclusive) |
649 | * 5: cacheable, coherent, write-back, exclusive on write (sharable) | | 649 | * 5: cacheable, coherent, write-back, exclusive on write (sharable) |
650 | * 6: cacheable, coherent, write-back, update on write (update) | | 650 | * 6: cacheable, coherent, write-back, update on write (update) |
651 | * 7: uncached, accelerated (gather STORE operations) | | 651 | * 7: uncached, accelerated (gather STORE operations) |
652 | */ | | 652 | */ |
653 | #define MIPS3_TLB_ATTR_WT 0 /* IDT */ | | 653 | #define MIPS3_TLB_ATTR_WT 0 /* IDT */ |
654 | #define MIPS3_TLB_ATTR_WT_WRITEALLOCATE 1 /* IDT */ | | 654 | #define MIPS3_TLB_ATTR_WT_WRITEALLOCATE 1 /* IDT */ |
655 | #define MIPS3_TLB_ATTR_UNCACHED 2 /* R4000/R4400, IDT */ | | 655 | #define MIPS3_TLB_ATTR_UNCACHED 2 /* R4000/R4400, IDT */ |
656 | #define MIPS3_TLB_ATTR_WB_NONCOHERENT 3 /* R4000/R4400, IDT */ | | 656 | #define MIPS3_TLB_ATTR_WB_NONCOHERENT 3 /* R4000/R4400, IDT */ |
657 | #define MIPS3_TLB_ATTR_WB_EXCLUSIVE 4 /* R4000/R4400 */ | | 657 | #define MIPS3_TLB_ATTR_WB_EXCLUSIVE 4 /* R4000/R4400 */ |
658 | #define MIPS3_TLB_ATTR_WB_SHARABLE 5 /* R4000/R4400 */ | | 658 | #define MIPS3_TLB_ATTR_WB_SHARABLE 5 /* R4000/R4400 */ |
659 | #define MIPS3_TLB_ATTR_WB_UPDATE 6 /* R4000/R4400 */ | | 659 | #define MIPS3_TLB_ATTR_WB_UPDATE 6 /* R4000/R4400 */ |
660 | #define MIPS4_TLB_ATTR_UNCACHED_ACCELERATED 7 /* R10000 */ | | 660 | #define MIPS4_TLB_ATTR_UNCACHED_ACCELERATED 7 /* R10000 */ |
661 | | | 661 | |
662 | | | 662 | |
663 | /* | | 663 | /* |
664 | * The high part of the TLB entry. | | 664 | * The high part of the TLB entry. |
665 | */ | | 665 | */ |
666 | #define MIPS1_TLB_VPN 0xfffff000 | | 666 | #define MIPS1_TLB_VPN 0xfffff000 |
667 | #define MIPS1_TLB_PID 0x00000fc0 | | 667 | #define MIPS1_TLB_PID 0x00000fc0 |
668 | #define MIPS1_TLB_PID_SHIFT 6 | | 668 | #define MIPS1_TLB_PID_SHIFT 6 |
669 | | | 669 | |
670 | #define MIPS3_TLB_VPN2 0xffffe000 | | 670 | #define MIPS3_TLB_VPN2 0xffffe000 |
671 | #define MIPS3_TLB_ASID 0x000000ff | | 671 | #define MIPS3_TLB_ASID 0x000000ff |
672 | | | 672 | |
673 | #define MIPS1_TLB_VIRT_PAGE_NUM MIPS1_TLB_VPN | | 673 | #define MIPS1_TLB_VIRT_PAGE_NUM MIPS1_TLB_VPN |
674 | #define MIPS3_TLB_VIRT_PAGE_NUM MIPS3_TLB_VPN2 | | 674 | #define MIPS3_TLB_VIRT_PAGE_NUM MIPS3_TLB_VPN2 |
675 | #define MIPS3_TLB_PID MIPS3_TLB_ASID | | 675 | #define MIPS3_TLB_PID MIPS3_TLB_ASID |
676 | #define MIPS_TLB_VIRT_PAGE_SHIFT 12 | | 676 | #define MIPS_TLB_VIRT_PAGE_SHIFT 12 |
677 | | | 677 | |
678 | /* | | 678 | /* |
679 | * r3000: shift count to put the index in the right spot. | | 679 | * r3000: shift count to put the index in the right spot. |
680 | */ | | 680 | */ |
681 | #define MIPS1_TLB_INDEX_SHIFT 8 | | 681 | #define MIPS1_TLB_INDEX_SHIFT 8 |
682 | | | 682 | |
683 | /* | | 683 | /* |
684 | * The first TLB that write random hits. | | 684 | * The first TLB that write random hits. |
685 | */ | | 685 | */ |
686 | #define MIPS1_TLB_FIRST_RAND_ENTRY 8 | | 686 | #define MIPS1_TLB_FIRST_RAND_ENTRY 8 |
687 | #define MIPS3_TLB_WIRED_UPAGES 1 | | 687 | #define MIPS3_TLB_WIRED_UPAGES 1 |
688 | | | 688 | |
689 | /* | | 689 | /* |
690 | * The number of process id entries. | | 690 | * The number of process id entries. |
691 | */ | | 691 | */ |
692 | #define MIPS1_TLB_NUM_PIDS 64 | | 692 | #define MIPS1_TLB_NUM_PIDS 64 |
693 | #define MIPS3_TLB_NUM_ASIDS 256 | | 693 | #define MIPS3_TLB_NUM_ASIDS 256 |
694 | | | 694 | |
695 | /* | | 695 | /* |
696 | * Patch codes to hide CPU design differences between MIPS1 and MIPS3. | | 696 | * Patch codes to hide CPU design differences between MIPS1 and MIPS3. |
697 | */ | | 697 | */ |
698 | | | 698 | |
699 | /* XXX simonb: this is before MIPS3_PLUS is defined (and is ugly!) */ | | 699 | /* XXX simonb: this is before MIPS3_PLUS is defined (and is ugly!) */ |
700 | | | 700 | |
701 | #if !(defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \ | | 701 | #if !(defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \ |
702 | && defined(MIPS1) /* XXX simonb must be neater! */ | | 702 | && defined(MIPS1) /* XXX simonb must be neater! */ |
703 | #define MIPS_TLB_PID_SHIFT MIPS1_TLB_PID_SHIFT | | 703 | #define MIPS_TLB_PID_SHIFT MIPS1_TLB_PID_SHIFT |
704 | #define MIPS_TLB_NUM_PIDS MIPS1_TLB_NUM_PIDS | | 704 | #define MIPS_TLB_NUM_PIDS MIPS1_TLB_NUM_PIDS |
705 | #endif | | 705 | #endif |
706 | | | 706 | |
707 | #if (defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \ | | 707 | #if (defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \ |
708 | && !defined(MIPS1) /* XXX simonb must be neater! */ | | 708 | && !defined(MIPS1) /* XXX simonb must be neater! */ |
709 | #define MIPS_TLB_PID_SHIFT 0 | | 709 | #define MIPS_TLB_PID_SHIFT 0 |
710 | #define MIPS_TLB_NUM_PIDS MIPS3_TLB_NUM_ASIDS | | 710 | #define MIPS_TLB_NUM_PIDS MIPS3_TLB_NUM_ASIDS |
711 | #endif | | 711 | #endif |
712 | | | 712 | |
713 | | | 713 | |
714 | #if !defined(MIPS_TLB_PID_SHIFT) | | 714 | #if !defined(MIPS_TLB_PID_SHIFT) |
715 | #define MIPS_TLB_PID_SHIFT \ | | 715 | #define MIPS_TLB_PID_SHIFT \ |
716 | ((MIPS_HAS_R4K_MMU) ? 0 : MIPS1_TLB_PID_SHIFT) | | 716 | ((MIPS_HAS_R4K_MMU) ? 0 : MIPS1_TLB_PID_SHIFT) |
717 | | | 717 | |
718 | #define MIPS_TLB_NUM_PIDS \ | | 718 | #define MIPS_TLB_NUM_PIDS \ |
719 | ((MIPS_HAS_R4K_MMU) ? MIPS3_TLB_NUM_ASIDS : MIPS1_TLB_NUM_PIDS) | | 719 | ((MIPS_HAS_R4K_MMU) ? MIPS3_TLB_NUM_ASIDS : MIPS1_TLB_NUM_PIDS) |
720 | #endif | | 720 | #endif |
721 | | | 721 | |
722 | /* | | 722 | /* |
723 | * CPU processor revision IDs for company ID == 0 (non mips32/64 chips) | | 723 | * CPU processor revision IDs for company ID == 0 (non mips32/64 chips) |
724 | */ | | 724 | */ |
725 | #define MIPS_R2000 0x01 /* MIPS R2000 ISA I */ | | 725 | #define MIPS_R2000 0x01 /* MIPS R2000 ISA I */ |
726 | #define MIPS_R3000 0x02 /* MIPS R3000 ISA I */ | | 726 | #define MIPS_R3000 0x02 /* MIPS R3000 ISA I */ |
727 | #define MIPS_R6000 0x03 /* MIPS R6000 ISA II */ | | 727 | #define MIPS_R6000 0x03 /* MIPS R6000 ISA II */ |
728 | #define MIPS_R4000 0x04 /* MIPS R4000/R4400 ISA III */ | | 728 | #define MIPS_R4000 0x04 /* MIPS R4000/R4400 ISA III */ |
729 | #define MIPS_R3LSI 0x05 /* LSI Logic R3000 derivative ISA I */ | | 729 | #define MIPS_R3LSI 0x05 /* LSI Logic R3000 derivative ISA I */ |
730 | #define MIPS_R6000A 0x06 /* MIPS R6000A ISA II */ | | 730 | #define MIPS_R6000A 0x06 /* MIPS R6000A ISA II */ |
731 | #define MIPS_R3IDT 0x07 /* IDT R3041 or RC36100 ISA I */ | | 731 | #define MIPS_R3IDT 0x07 /* IDT R3041 or RC36100 ISA I */ |
732 | #define MIPS_R10000 0x09 /* MIPS R10000 ISA IV */ | | 732 | #define MIPS_R10000 0x09 /* MIPS R10000 ISA IV */ |
733 | #define MIPS_R4200 0x0a /* NEC VR4200 ISA III */ | | 733 | #define MIPS_R4200 0x0a /* NEC VR4200 ISA III */ |
734 | #define MIPS_R4300 0x0b /* NEC VR4300 ISA III */ | | 734 | #define MIPS_R4300 0x0b /* NEC VR4300 ISA III */ |
735 | #define MIPS_R4100 0x0c /* NEC VR4100 ISA III */ | | 735 | #define MIPS_R4100 0x0c /* NEC VR4100 ISA III */ |
736 | #define MIPS_R12000 0x0e /* MIPS R12000 ISA IV */ | | 736 | #define MIPS_R12000 0x0e /* MIPS R12000 ISA IV */ |
737 | #define MIPS_R14000 0x0f /* MIPS R14000 ISA IV */ | | 737 | #define MIPS_R14000 0x0f /* MIPS R14000 ISA IV */ |
738 | #define MIPS_R8000 0x10 /* MIPS R8000 Blackbird/TFP ISA IV */ | | 738 | #define MIPS_R8000 0x10 /* MIPS R8000 Blackbird/TFP ISA IV */ |
739 | #define MIPS_RC32300 0x18 /* IDT RC32334,332,355 ISA 32 */ | | 739 | #define MIPS_RC32300 0x18 /* IDT RC32334,332,355 ISA 32 */ |
740 | #define MIPS_R4600 0x20 /* QED R4600 Orion ISA III */ | | 740 | #define MIPS_R4600 0x20 /* QED R4600 Orion ISA III */ |
741 | #define MIPS_R4700 0x21 /* QED R4700 Orion ISA III */ | | 741 | #define MIPS_R4700 0x21 /* QED R4700 Orion ISA III */ |
742 | #define MIPS_R3SONY 0x21 /* Sony R3000 based ISA I */ | | 742 | #define MIPS_R3SONY 0x21 /* Sony R3000 based ISA I */ |
743 | #define MIPS_R4650 0x22 /* QED R4650 ISA III */ | | 743 | #define MIPS_R4650 0x22 /* QED R4650 ISA III */ |
744 | #define MIPS_TX3900 0x22 /* Toshiba TX39 family ISA I */ | | 744 | #define MIPS_TX3900 0x22 /* Toshiba TX39 family ISA I */ |
745 | #define MIPS_R5000 0x23 /* MIPS R5000 ISA IV */ | | 745 | #define MIPS_R5000 0x23 /* MIPS R5000 ISA IV */ |
746 | #define MIPS_R3NKK 0x23 /* NKK R3000 based ISA I */ | | 746 | #define MIPS_R3NKK 0x23 /* NKK R3000 based ISA I */ |
747 | #define MIPS_RC32364 0x26 /* IDT RC32364 ISA 32 */ | | 747 | #define MIPS_RC32364 0x26 /* IDT RC32364 ISA 32 */ |
748 | #define MIPS_RM7000 0x27 /* QED RM7000 ISA IV */ | | 748 | #define MIPS_RM7000 0x27 /* QED RM7000 ISA IV */ |
749 | #define MIPS_RM5200 0x28 /* QED RM5200s ISA IV */ | | 749 | #define MIPS_RM5200 0x28 /* QED RM5200s ISA IV */ |
750 | #define MIPS_TX4900 0x2d /* Toshiba TX49 family ISA III */ | | 750 | #define MIPS_TX4900 0x2d /* Toshiba TX49 family ISA III */ |
751 | #define MIPS_R5900 0x2e /* Toshiba R5900 (EECore) ISA --- */ | | 751 | #define MIPS_R5900 0x2e /* Toshiba R5900 (EECore) ISA --- */ |
752 | #define MIPS_RC64470 0x30 /* IDT RC64474/RC64475 ISA III */ | | 752 | #define MIPS_RC64470 0x30 /* IDT RC64474/RC64475 ISA III */ |
753 | #define MIPS_TX7900 0x38 /* Toshiba TX79 ISA III+*/ | | 753 | #define MIPS_TX7900 0x38 /* Toshiba TX79 ISA III+*/ |
754 | #define MIPS_R5400 0x54 /* NEC VR5400 ISA IV */ | | 754 | #define MIPS_R5400 0x54 /* NEC VR5400 ISA IV */ |
755 | #define MIPS_R5500 0x55 /* NEC VR5500 ISA IV */ | | 755 | #define MIPS_R5500 0x55 /* NEC VR5500 ISA IV */ |
756 | | | 756 | |
757 | /* | | 757 | /* |
758 | * CPU revision IDs for some prehistoric processors. | | 758 | * CPU revision IDs for some prehistoric processors. |
759 | */ | | 759 | */ |
760 | | | 760 | |
761 | /* For MIPS_R3000 */ | | 761 | /* For MIPS_R3000 */ |
762 | #define MIPS_REV_R2000A 0x16 /* R2000A uses R3000 proc revision */ | | 762 | #define MIPS_REV_R2000A 0x16 /* R2000A uses R3000 proc revision */ |
763 | #define MIPS_REV_R3000 0x20 | | 763 | #define MIPS_REV_R3000 0x20 |
764 | #define MIPS_REV_R3000A 0x30 | | 764 | #define MIPS_REV_R3000A 0x30 |
765 | | | 765 | |
766 | /* For MIPS_TX3900 */ | | 766 | /* For MIPS_TX3900 */ |
767 | #define MIPS_REV_TX3912 0x10 | | 767 | #define MIPS_REV_TX3912 0x10 |
768 | #define MIPS_REV_TX3922 0x30 | | 768 | #define MIPS_REV_TX3922 0x30 |
769 | #define MIPS_REV_TX3927 0x40 | | 769 | #define MIPS_REV_TX3927 0x40 |
770 | | | 770 | |
771 | /* For MIPS_R4000 */ | | 771 | /* For MIPS_R4000 */ |
772 | #define MIPS_REV_R4000_A 0x00 | | 772 | #define MIPS_REV_R4000_A 0x00 |
773 | #define MIPS_REV_R4000_B 0x22 | | 773 | #define MIPS_REV_R4000_B 0x22 |
774 | #define MIPS_REV_R4000_C 0x30 | | 774 | #define MIPS_REV_R4000_C 0x30 |
775 | #define MIPS_REV_R4400_A 0x40 | | 775 | #define MIPS_REV_R4400_A 0x40 |
776 | #define MIPS_REV_R4400_B 0x50 | | 776 | #define MIPS_REV_R4400_B 0x50 |
777 | #define MIPS_REV_R4400_C 0x60 | | 777 | #define MIPS_REV_R4400_C 0x60 |
778 | | | 778 | |
779 | /* For MIPS_TX4900 */ | | 779 | /* For MIPS_TX4900 */ |
780 | #define MIPS_REV_TX4927 0x22 | | 780 | #define MIPS_REV_TX4927 0x22 |
781 | | | 781 | |
782 | /* | | 782 | /* |
783 | * CPU processor revision IDs for company ID == 1 (MIPS) | | 783 | * CPU processor revision IDs for company ID == 1 (MIPS) |
784 | */ | | 784 | */ |
785 | #define MIPS_4Kc 0x80 /* MIPS 4Kc ISA 32 */ | | 785 | #define MIPS_4Kc 0x80 /* MIPS 4Kc ISA 32 */ |
786 | #define MIPS_5Kc 0x81 /* MIPS 5Kc ISA 64 */ | | 786 | #define MIPS_5Kc 0x81 /* MIPS 5Kc ISA 64 */ |
787 | #define MIPS_20Kc 0x82 /* MIPS 20Kc ISA 64 */ | | 787 | #define MIPS_20Kc 0x82 /* MIPS 20Kc ISA 64 */ |
788 | #define MIPS_4Kmp 0x83 /* MIPS 4Km/4Kp ISA 32 */ | | 788 | #define MIPS_4Kmp 0x83 /* MIPS 4Km/4Kp ISA 32 */ |
789 | #define MIPS_4KEc 0x84 /* MIPS 4KEc ISA 32 */ | | 789 | #define MIPS_4KEc 0x84 /* MIPS 4KEc ISA 32 */ |
790 | #define MIPS_4KEmp 0x85 /* MIPS 4KEm/4KEp ISA 32 */ | | 790 | #define MIPS_4KEmp 0x85 /* MIPS 4KEm/4KEp ISA 32 */ |
791 | #define MIPS_4KSc 0x86 /* MIPS 4KSc ISA 32 */ | | 791 | #define MIPS_4KSc 0x86 /* MIPS 4KSc ISA 32 */ |
792 | #define MIPS_M4K 0x87 /* MIPS M4K ISA 32 Rel 2 */ | | 792 | #define MIPS_M4K 0x87 /* MIPS M4K ISA 32 Rel 2 */ |
793 | #define MIPS_25Kf 0x88 /* MIPS 25Kf ISA 64 */ | | 793 | #define MIPS_25Kf 0x88 /* MIPS 25Kf ISA 64 */ |
794 | #define MIPS_5KE 0x89 /* MIPS 5KE ISA 64 Rel 2 */ | | 794 | #define MIPS_5KE 0x89 /* MIPS 5KE ISA 64 Rel 2 */ |
795 | #define MIPS_4KEc_R2 0x90 /* MIPS 4KEc_R2 ISA 32 Rel 2 */ | | 795 | #define MIPS_4KEc_R2 0x90 /* MIPS 4KEc_R2 ISA 32 Rel 2 */ |
796 | #define MIPS_4KEmp_R2 0x91 /* MIPS 4KEm/4KEp_R2 ISA 32 Rel 2 */ | | 796 | #define MIPS_4KEmp_R2 0x91 /* MIPS 4KEm/4KEp_R2 ISA 32 Rel 2 */ |
797 | #define MIPS_4KSd 0x92 /* MIPS 4KSd ISA 32 Rel 2 */ | | 797 | #define MIPS_4KSd 0x92 /* MIPS 4KSd ISA 32 Rel 2 */ |
798 | #define MIPS_24K 0x93 /* MIPS 24Kc/24Kf ISA 32 Rel 2 */ | | 798 | #define MIPS_24K 0x93 /* MIPS 24Kc/24Kf ISA 32 Rel 2 */ |
799 | #define MIPS_34K 0x95 /* MIPS 34K ISA 32 R2 MT */ | | 799 | #define MIPS_34K 0x95 /* MIPS 34K ISA 32 R2 MT */ |
800 | #define MIPS_24KE 0x96 /* MIPS 24KEc ISA 32 Rel 2 */ | | 800 | #define MIPS_24KE 0x96 /* MIPS 24KEc ISA 32 Rel 2 */ |
801 | #define MIPS_74K 0x97 /* MIPS 74Kc/74Kf ISA 32 Rel 2 */ | | 801 | #define MIPS_74K 0x97 /* MIPS 74Kc/74Kf ISA 32 Rel 2 */ |
802 | | | 802 | |
803 | /* | | 803 | /* |
804 | * Alchemy (company ID 3) use the processor ID field to donote the CPU core | | 804 | * Alchemy (company ID 3) use the processor ID field to donote the CPU core |
805 | * revision and the company options field do donate the SOC chip type. | | 805 | * revision and the company options field do donate the SOC chip type. |
806 | */ | | 806 | */ |
807 | /* CPU processor revision IDs */ | | 807 | /* CPU processor revision IDs */ |
808 | #define MIPS_AU_REV1 0x01 /* Alchemy Au1000 (Rev 1) ISA 32 */ | | 808 | #define MIPS_AU_REV1 0x01 /* Alchemy Au1000 (Rev 1) ISA 32 */ |
809 | #define MIPS_AU_REV2 0x02 /* Alchemy Au1000 (Rev 2) ISA 32 */ | | 809 | #define MIPS_AU_REV2 0x02 /* Alchemy Au1000 (Rev 2) ISA 32 */ |
810 | /* CPU company options IDs */ | | 810 | /* CPU company options IDs */ |
811 | #define MIPS_AU1000 0x00 | | 811 | #define MIPS_AU1000 0x00 |
812 | #define MIPS_AU1500 0x01 | | 812 | #define MIPS_AU1500 0x01 |
813 | #define MIPS_AU1100 0x02 | | 813 | #define MIPS_AU1100 0x02 |
814 | #define MIPS_AU1550 0x03 | | 814 | #define MIPS_AU1550 0x03 |
815 | | | 815 | |
816 | /* | | 816 | /* |
817 | * CPU processor revision IDs for company ID == 4 (SiByte) | | 817 | * CPU processor revision IDs for company ID == 4 (SiByte) |
818 | */ | | 818 | */ |
819 | #define MIPS_SB1 0x01 /* SiByte SB1 ISA 64 */ | | 819 | #define MIPS_SB1 0x01 /* SiByte SB1 ISA 64 */ |
820 | | | 820 | |
821 | /* | | 821 | /* |
822 | * CPU processor revision IDs for company ID == 5 (SandCraft) | | 822 | * CPU processor revision IDs for company ID == 5 (SandCraft) |
823 | */ | | 823 | */ |
824 | #define MIPS_SR7100 0x04 /* SandCraft SR7100 ISA 64 */ | | 824 | #define MIPS_SR7100 0x04 /* SandCraft SR7100 ISA 64 */ |
825 | | | 825 | |
826 | /* | | 826 | /* |
827 | * CPU processor revision IDs for company ID == 12 (RMI) | | 827 | * CPU processor revision IDs for company ID == 12 (RMI) |
828 | */ | | 828 | */ |
829 | #define MIPS_XLR732 0x00 /* RMI XLS732-C ISA 64 */ | | 829 | #define MIPS_XLR732 0x00 /* RMI XLS732-C ISA 64 */ |
830 | #define MIPS_XLR716 0x02 /* RMI XLS716-C ISA 64 */ | | 830 | #define MIPS_XLR716 0x02 /* RMI XLS716-C ISA 64 */ |
831 | #define MIPS_XLR532 0x08 /* RMI XLS532-C ISA 64 */ | | 831 | #define MIPS_XLR532 0x08 /* RMI XLS532-C ISA 64 */ |
832 | #define MIPS_XLR516 0x0a /* RMI XLS516-C ISA 64 */ | | 832 | #define MIPS_XLR516 0x0a /* RMI XLS516-C ISA 64 */ |
833 | #define MIPS_XLR508 0x0b /* RMI XLS508-C ISA 64 */ | | 833 | #define MIPS_XLR508 0x0b /* RMI XLS508-C ISA 64 */ |
834 | #define MIPS_XLR308 0x0f /* RMI XLS308-C ISA 64 */ | | 834 | #define MIPS_XLR308 0x0f /* RMI XLS308-C ISA 64 */ |
835 | #define MIPS_XLS616 0x40 /* RMI XLS616 ISA 64 */ | | 835 | #define MIPS_XLS616 0x40 /* RMI XLS616 ISA 64 */ |
836 | #define MIPS_XLS416 0x44 /* RMI XLS416 ISA 64 */ | | 836 | #define MIPS_XLS416 0x44 /* RMI XLS416 ISA 64 */ |
837 | #define MIPS_XLS608 0x4A /* RMI XLS608 ISA 64 */ | | 837 | #define MIPS_XLS608 0x4A /* RMI XLS608 ISA 64 */ |
838 | #define MIPS_XLS408 0x4E /* RMI XLS406 ISA 64 */ | | 838 | #define MIPS_XLS408 0x4E /* RMI XLS406 ISA 64 */ |
839 | #define MIPS_XLS404 0x4F /* RMI XLS404 ISA 64 */ | | 839 | #define MIPS_XLS404 0x4F /* RMI XLS404 ISA 64 */ |
840 | #define MIPS_XLS408LITE 0x88 /* RMI XLS408-Lite ISA 64 */ | | 840 | #define MIPS_XLS408LITE 0x88 /* RMI XLS408-Lite ISA 64 */ |
841 | #define MIPS_XLS404LITE 0x8C /* RMI XLS404-Lite ISA 64 */ | | 841 | #define MIPS_XLS404LITE 0x8C /* RMI XLS404-Lite ISA 64 */ |
842 | #define MIPS_XLS208 0x8E /* RMI XLS208 ISA 64 */ | | 842 | #define MIPS_XLS208 0x8E /* RMI XLS208 ISA 64 */ |
843 | #define MIPS_XLS204 0x8F /* RMI XLS204 ISA 64 */ | | 843 | #define MIPS_XLS204 0x8F /* RMI XLS204 ISA 64 */ |
844 | #define MIPS_XLS108 0xCE /* RMI XLS108 ISA 64 */ | | 844 | #define MIPS_XLS108 0xCE /* RMI XLS108 ISA 64 */ |
845 | #define MIPS_XLS104 0xCF /* RMI XLS104 ISA 64 */ | | 845 | #define MIPS_XLS104 0xCF /* RMI XLS104 ISA 64 */ |
846 | | | 846 | |
847 | /* | | 847 | /* |
848 | * FPU processor revision ID | | 848 | * FPU processor revision ID |
849 | */ | | 849 | */ |
850 | #define MIPS_SOFT 0x00 /* Software emulation ISA I */ | | 850 | #define MIPS_SOFT 0x00 /* Software emulation ISA I */ |
851 | #define MIPS_R2360 0x01 /* MIPS R2360 FPC ISA I */ | | 851 | #define MIPS_R2360 0x01 /* MIPS R2360 FPC ISA I */ |
852 | #define MIPS_R2010 0x02 /* MIPS R2010 FPC ISA I */ | | 852 | #define MIPS_R2010 0x02 /* MIPS R2010 FPC ISA I */ |
853 | #define MIPS_R3010 0x03 /* MIPS R3010 FPC ISA I */ | | 853 | #define MIPS_R3010 0x03 /* MIPS R3010 FPC ISA I */ |
854 | #define MIPS_R6010 0x04 /* MIPS R6010 FPC ISA II */ | | 854 | #define MIPS_R6010 0x04 /* MIPS R6010 FPC ISA II */ |
855 | #define MIPS_R4010 0x05 /* MIPS R4010 FPC ISA II */ | | 855 | #define MIPS_R4010 0x05 /* MIPS R4010 FPC ISA II */ |
856 | #define MIPS_R31LSI 0x06 /* LSI Logic derivate ISA I */ | | 856 | #define MIPS_R31LSI 0x06 /* LSI Logic derivate ISA I */ |
857 | #define MIPS_R3TOSH 0x22 /* Toshiba R3000 based FPU ISA I */ | | 857 | #define MIPS_R3TOSH 0x22 /* Toshiba R3000 based FPU ISA I */ |
858 | | | 858 | |
859 | #ifdef ENABLE_MIPS_TX3900 | | 859 | #ifdef ENABLE_MIPS_TX3900 |
860 | #include <mips/r3900regs.h> | | 860 | #include <mips/r3900regs.h> |
861 | #endif | | 861 | #endif |
862 | #ifdef MIPS3_5900 | | 862 | #ifdef MIPS3_5900 |
863 | #include <mips/r5900regs.h> | | 863 | #include <mips/r5900regs.h> |
864 | #endif | | 864 | #endif |
865 | #ifdef MIPS64_SB1 | | 865 | #ifdef MIPS64_SB1 |
866 | #include <mips/sb1regs.h> | | 866 | #include <mips/sb1regs.h> |
867 | #endif | | 867 | #endif |
868 | | | 868 | |
869 | #endif /* _MIPS_CPUREGS_H_ */ | | 869 | #endif /* _MIPS_CPUREGS_H_ */ |