| @@ -1,494 +1,494 @@ | | | @@ -1,494 +1,494 @@ |
1 | /* $NetBSD: ctlreg.h,v 1.29 2013/12/04 18:44:14 jdc Exp $ */ | | 1 | /* $NetBSD: ctlreg.h,v 1.30 2019/08/29 05:55:18 msaitoh Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 1996 | | 4 | * Copyright (c) 1996 |
5 | * The President and Fellows of Harvard College. All rights reserved. | | 5 | * The President and Fellows of Harvard College. All rights reserved. |
6 | * Copyright (c) 1992, 1993 | | 6 | * Copyright (c) 1992, 1993 |
7 | * The Regents of the University of California. All rights reserved. | | 7 | * The Regents of the University of California. All rights reserved. |
8 | * | | 8 | * |
9 | * This software was developed by the Computer Systems Engineering group | | 9 | * This software was developed by the Computer Systems Engineering group |
10 | * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and | | 10 | * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and |
11 | * contributed to Berkeley. | | 11 | * contributed to Berkeley. |
12 | * | | 12 | * |
13 | * All advertising materials mentioning features or use of this software | | 13 | * All advertising materials mentioning features or use of this software |
14 | * must display the following acknowledgement: | | 14 | * must display the following acknowledgement: |
15 | * This product includes software developed by Harvard University. | | 15 | * This product includes software developed by Harvard University. |
16 | * This product includes software developed by the University of | | 16 | * This product includes software developed by the University of |
17 | * California, Lawrence Berkeley Laboratory. | | 17 | * California, Lawrence Berkeley Laboratory. |
18 | * | | 18 | * |
19 | * Redistribution and use in source and binary forms, with or without | | 19 | * Redistribution and use in source and binary forms, with or without |
20 | * modification, are permitted provided that the following conditions | | 20 | * modification, are permitted provided that the following conditions |
21 | * are met: | | 21 | * are met: |
22 | * 1. Redistributions of source code must retain the above copyright | | 22 | * 1. Redistributions of source code must retain the above copyright |
23 | * notice, this list of conditions and the following disclaimer. | | 23 | * notice, this list of conditions and the following disclaimer. |
24 | * 2. Redistributions in binary form must reproduce the above copyright | | 24 | * 2. Redistributions in binary form must reproduce the above copyright |
25 | * notice, this list of conditions and the following disclaimer in the | | 25 | * notice, this list of conditions and the following disclaimer in the |
26 | * documentation and/or other materials provided with the distribution. | | 26 | * documentation and/or other materials provided with the distribution. |
27 | * 3. All advertising materials mentioning features or use of this software | | 27 | * 3. All advertising materials mentioning features or use of this software |
28 | * must display the following acknowledgement: | | 28 | * must display the following acknowledgement: |
29 | * This product includes software developed by the University of | | 29 | * This product includes software developed by the University of |
30 | * California, Berkeley and its contributors. | | 30 | * California, Berkeley and its contributors. |
31 | * 4. Neither the name of the University nor the names of its contributors | | 31 | * 4. Neither the name of the University nor the names of its contributors |
32 | * may be used to endorse or promote products derived from this software | | 32 | * may be used to endorse or promote products derived from this software |
33 | * without specific prior written permission. | | 33 | * without specific prior written permission. |
34 | * | | 34 | * |
35 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | | 35 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
36 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | 36 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
37 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | 37 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
38 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | | 38 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
39 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 39 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
40 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | | 40 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
41 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 41 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
42 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 42 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
43 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 43 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
44 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 44 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
45 | * SUCH DAMAGE. | | 45 | * SUCH DAMAGE. |
46 | * | | 46 | * |
47 | * @(#)ctlreg.h 8.1 (Berkeley) 6/11/93 | | 47 | * @(#)ctlreg.h 8.1 (Berkeley) 6/11/93 |
48 | */ | | 48 | */ |
49 | | | 49 | |
50 | /* | | 50 | /* |
51 | * Sun4m support by Aaron Brown, Harvard University. | | 51 | * Sun4m support by Aaron Brown, Harvard University. |
52 | * Changes Copyright (c) 1995 The President and Fellows of Harvard College. | | 52 | * Changes Copyright (c) 1995 The President and Fellows of Harvard College. |
53 | * All rights reserved. | | 53 | * All rights reserved. |
54 | */ | | 54 | */ |
55 | | | 55 | |
56 | /* | | 56 | /* |
57 | * Sun 4, 4c, and 4m control registers. (includes address space definitions | | 57 | * Sun 4, 4c, and 4m control registers. (includes address space definitions |
58 | * and some registers in control space). | | 58 | * and some registers in control space). |
59 | */ | | 59 | */ |
60 | | | 60 | |
61 | /* | | 61 | /* |
62 | * The Alternate address spaces. | | 62 | * The Alternate address spaces. |
63 | */ | | 63 | */ |
64 | | | 64 | |
65 | /* 0x00 unused */ | | 65 | /* 0x00 unused */ |
66 | /* 0x01 unused */ | | 66 | /* 0x01 unused */ |
67 | #define ASI_CONTROL 0x02 /* cache enable, context reg, etc */ | | 67 | #define ASI_CONTROL 0x02 /* cache enable, context reg, etc */ |
68 | #define ASI_SEGMAP 0x03 /* [4/4c] segment maps */ | | 68 | #define ASI_SEGMAP 0x03 /* [4/4c] segment maps */ |
69 | #define ASI_SRMMUFP 0x03 /* [4m] ref mmu flush/probe */ | | 69 | #define ASI_SRMMUFP 0x03 /* [4m] ref mmu flush/probe */ |
70 | #define ASI_PTE 0x04 /* [4/4c] PTE space (pmegs) */ | | 70 | #define ASI_PTE 0x04 /* [4/4c] PTE space (pmegs) */ |
71 | #define ASI_SRMMU 0x04 /* [4m] ref mmu registers */ | | 71 | #define ASI_SRMMU 0x04 /* [4m] ref mmu registers */ |
72 | #define ASI_REGMAP 0x06 /* [4/3-level MMU ] region maps */ | | 72 | #define ASI_REGMAP 0x06 /* [4/3-level MMU ] region maps */ |
73 | #define ASI_HWFLUSHSEG 0x05 /* [4/4c] hardware assisted version of FLUSHSEG */ | | 73 | #define ASI_HWFLUSHSEG 0x05 /* [4/4c] hardware assisted version of FLUSHSEG */ |
74 | #define ASI_HWFLUSHPG 0x06 /* [4/4c] hardware assisted version of FLUSHPG */ | | 74 | #define ASI_HWFLUSHPG 0x06 /* [4/4c] hardware assisted version of FLUSHPG */ |
75 | #define ASI_SRMMUDIAG 0x06 /* [4m] */ | | 75 | #define ASI_SRMMUDIAG 0x06 /* [4m] */ |
76 | #define ASI_HWFLUSHCTX 0x07 /* [4/4c] hardware assisted version of FLUSHCTX */ | | 76 | #define ASI_HWFLUSHCTX 0x07 /* [4/4c] hardware assisted version of FLUSHCTX */ |
77 | | | 77 | |
78 | #define ASI_USERI 0x08 /* I-space (user) */ | | 78 | #define ASI_USERI 0x08 /* I-space (user) */ |
79 | #define ASI_KERNELI 0x09 /* I-space (kernel) */ | | 79 | #define ASI_KERNELI 0x09 /* I-space (kernel) */ |
80 | #define ASI_USERD 0x0a /* D-space (user) */ | | 80 | #define ASI_USERD 0x0a /* D-space (user) */ |
81 | #define ASI_KERNELD 0x0b /* D-space (kernel) */ | | 81 | #define ASI_KERNELD 0x0b /* D-space (kernel) */ |
82 | | | 82 | |
83 | #define ASI_FLUSHREG 0x7 /* [4/4c] flush cache by region */ | | 83 | #define ASI_FLUSHREG 0x7 /* [4/4c] flush cache by region */ |
84 | #define ASI_FLUSHSEG 0x0c /* [4/4c] flush cache by segment */ | | 84 | #define ASI_FLUSHSEG 0x0c /* [4/4c] flush cache by segment */ |
85 | #define ASI_FLUSHPG 0x0d /* [4/4c] flush cache by page */ | | 85 | #define ASI_FLUSHPG 0x0d /* [4/4c] flush cache by page */ |
86 | #define ASI_FLUSHCTX 0x0e /* [4/4c] flush cache by context */ | | 86 | #define ASI_FLUSHCTX 0x0e /* [4/4c] flush cache by context */ |
87 | | | 87 | |
88 | #define ASI_DCACHE 0x0f /* [4] flush data cache */ | | 88 | #define ASI_DCACHE 0x0f /* [4] flush data cache */ |
89 | | | 89 | |
90 | #define ASI_ICACHETAG 0x0c /* [4m] instruction cache tag */ | | 90 | #define ASI_ICACHETAG 0x0c /* [4m] instruction cache tag */ |
91 | #define ASI_ICACHEDATA 0x0d /* [4m] instruction cache data */ | | 91 | #define ASI_ICACHEDATA 0x0d /* [4m] instruction cache data */ |
92 | #define ASI_DCACHETAG 0x0e /* [4m] data cache tag */ | | 92 | #define ASI_DCACHETAG 0x0e /* [4m] data cache tag */ |
93 | #define ASI_DCACHEDATA 0x0f /* [4m] data cache data */ | | 93 | #define ASI_DCACHEDATA 0x0f /* [4m] data cache data */ |
94 | #define ASI_IDCACHELFP 0x10 /* [4m] flush i&d cache line (page) */ | | 94 | #define ASI_IDCACHELFP 0x10 /* [4m] flush i&d cache line (page) */ |
95 | #define ASI_IDCACHELFS 0x11 /* [4m] flush i&d cache line (seg) */ | | 95 | #define ASI_IDCACHELFS 0x11 /* [4m] flush i&d cache line (seg) */ |
96 | #define ASI_IDCACHELFR 0x12 /* [4m] flush i&d cache line (reg) */ | | 96 | #define ASI_IDCACHELFR 0x12 /* [4m] flush i&d cache line (reg) */ |
97 | #define ASI_IDCACHELFC 0x13 /* [4m] flush i&d cache line (ctxt) */ | | 97 | #define ASI_IDCACHELFC 0x13 /* [4m] flush i&d cache line (ctxt) */ |
98 | #define ASI_IDCACHELFU 0x14 /* [4m] flush i&d cache line (user) */ | | 98 | #define ASI_IDCACHELFU 0x14 /* [4m] flush i&d cache line (user) */ |
99 | #define ASI_BLOCKCOPY 0x17 /* [4m] hypersparc: hardware block copy */ | | 99 | #define ASI_BLOCKCOPY 0x17 /* [4m] hypersparc: hardware block copy */ |
100 | #define ASI_BLOCKFILL 0x1f /* [4m] hypersparc: hardware block fill */ | | 100 | #define ASI_BLOCKFILL 0x1f /* [4m] hypersparc: hardware block fill */ |
101 | #define ASI_BYPASS 0x20 /* [4m] sun ref mmu bypass, | | 101 | #define ASI_BYPASS 0x20 /* [4m] sun ref mmu bypass, |
102 | ie. direct phys access */ | | 102 | ie. direct phys access */ |
103 | #define ASI_CSR 0x2f /* [4d] CPU-unit CSR space */ | | 103 | #define ASI_CSR 0x2f /* [4d] CPU-unit CSR space */ |
104 | #define ASI_ECSR 0x2f /* [4d] CPU-unit ECSR space */ | | 104 | #define ASI_ECSR 0x2f /* [4d] CPU-unit ECSR space */ |
105 | #define ASI_HICACHECLR 0x31 /* [4m] hypersparc only: I-cache flash clear */ | | 105 | #define ASI_HICACHECLR 0x31 /* [4m] hypersparc only: I-cache flash clear */ |
106 | #define ASI_ICACHECLR 0x36 /* [4m] ms1 only: I-cache flash clear */ | | 106 | #define ASI_ICACHECLR 0x36 /* [4m] ms1 only: I-cache flash clear */ |
107 | #define ASI_DCACHECLR 0x37 /* [4m] ms1 only: D-cache flash clear */ | | 107 | #define ASI_DCACHECLR 0x37 /* [4m] ms1 only: D-cache flash clear */ |
108 | #define ASI_DCACHEDIAG 0x39 /* [4m] data cache diagnostic register access */ | | 108 | #define ASI_DCACHEDIAG 0x39 /* [4m] data cache diagnostic register access */ |
109 | | | 109 | |
110 | /* | | 110 | /* |
111 | * [4/4c] Registers in the control space (ASI_CONTROL). | | 111 | * [4/4c] Registers in the control space (ASI_CONTROL). |
112 | */ | | 112 | */ |
113 | #define AC_IDPROM 0x00000000 /* [4] ID PROM */ | | 113 | #define AC_IDPROM 0x00000000 /* [4] ID PROM */ |
114 | #define AC_CONTEXT 0x30000000 /* [4/4c] context register (byte) */ | | 114 | #define AC_CONTEXT 0x30000000 /* [4/4c] context register (byte) */ |
115 | #define AC_SYSENABLE 0x40000000 /* [4/4c] system enable register (byte) */ | | 115 | #define AC_SYSENABLE 0x40000000 /* [4/4c] system enable register (byte) */ |
116 | #define AC_DVMA_ENABLE 0x50000000 /* [4] enable user dvma */ | | 116 | #define AC_DVMA_ENABLE 0x50000000 /* [4] enable user dvma */ |
117 | #define AC_BUS_ERR 0x60000000 /* [4] bus error register */ | | 117 | #define AC_BUS_ERR 0x60000000 /* [4] bus error register */ |
118 | #define AC_SYNC_ERR 0x60000000 /* [4c] sync (memory) error reg */ | | 118 | #define AC_SYNC_ERR 0x60000000 /* [4c] sync (memory) error reg */ |
119 | #define AC_SYNC_VA 0x60000004 /* [4c] sync error virtual addr */ | | 119 | #define AC_SYNC_VA 0x60000004 /* [4c] sync error virtual addr */ |
120 | #define AC_ASYNC_ERR 0x60000008 /* [4c] async error reg */ | | 120 | #define AC_ASYNC_ERR 0x60000008 /* [4c] async error reg */ |
121 | #define AC_ASYNC_VA 0x6000000c /* [4c] async error virtual addr */ | | 121 | #define AC_ASYNC_VA 0x6000000c /* [4c] async error virtual addr */ |
122 | #define AC_DIAG_REG 0x70000000 /* [4] diagnostic reg */ | | 122 | #define AC_DIAG_REG 0x70000000 /* [4] diagnostic reg */ |
123 | #define AC_CACHETAGS 0x80000000 /* [4/4c?] cache tag base address */ | | 123 | #define AC_CACHETAGS 0x80000000 /* [4/4c?] cache tag base address */ |
124 | #define AC_CACHEDATA 0x90000000 /* [4] cached data [sun4/400?] */ | | 124 | #define AC_CACHEDATA 0x90000000 /* [4] cached data [sun4/400?] */ |
125 | #define AC_DVMA_MAP 0xd0000000 /* [4] user dvma map entries */ | | 125 | #define AC_DVMA_MAP 0xd0000000 /* [4] user dvma map entries */ |
126 | #define AC_VMEINTVEC 0xe0000000 /* [4] vme interrupt vector */ | | 126 | #define AC_VMEINTVEC 0xe0000000 /* [4] vme interrupt vector */ |
127 | #define AC_SERIAL 0xf0000000 /* [4/4c] special serial port sneakiness */ | | 127 | #define AC_SERIAL 0xf0000000 /* [4/4c] special serial port sneakiness */ |
128 | /* AC_SERIAL is not used in the kernel (it is for the PROM) */ | | 128 | /* AC_SERIAL is not used in the kernel (it is for the PROM) */ |
129 | | | 129 | |
130 | /* XXX: does not belong here */ | | 130 | /* XXX: does not belong here */ |
131 | #define ME_REG_IERR 0x80 /* memory err ctrl reg error intr pending bit */ | | 131 | #define ME_REG_IERR 0x80 /* memory err ctrl reg error intr pending bit */ |
132 | | | 132 | |
133 | /* | | 133 | /* |
134 | * [4/4c] | | 134 | * [4/4c] |
135 | * Bits in sync error register. Reading the register clears these; | | 135 | * Bits in sync error register. Reading the register clears these; |
136 | * otherwise they accumulate. The error(s) occurred at the virtual | | 136 | * otherwise they accumulate. The error(s) occurred at the virtual |
137 | * address stored in the sync error address register, and may have | | 137 | * address stored in the sync error address register, and may have |
138 | * been due to, e.g., what would usually be called a page fault. | | 138 | * been due to, e.g., what would usually be called a page fault. |
139 | * Worse, the bits accumulate during instruction prefetch, so | | 139 | * Worse, the bits accumulate during instruction prefetch, so |
140 | * various bits can be on that should be off. | | 140 | * various bits can be on that should be off. |
141 | */ | | 141 | */ |
142 | #define SER_WRITE 0x8000 /* error occurred during write */ | | 142 | #define SER_WRITE 0x8000 /* error occurred during write */ |
143 | #define SER_INVAL 0x80 /* PTE had PG_V off */ | | 143 | #define SER_INVAL 0x80 /* PTE had PG_V off */ |
144 | #define SER_PROT 0x40 /* operation violated PTE prot */ | | 144 | #define SER_PROT 0x40 /* operation violated PTE prot */ |
145 | #define SER_TIMEOUT 0x20 /* bus timeout (non-existent mem) */ | | 145 | #define SER_TIMEOUT 0x20 /* bus timeout (non-existent mem) */ |
146 | #define SER_SBUSERR 0x10 /* S-Bus bus error */ | | 146 | #define SER_SBUSERR 0x10 /* S-Bus bus error */ |
147 | #define SER_MEMERR 0x08 /* memory ecc/parity error */ | | 147 | #define SER_MEMERR 0x08 /* memory ecc/parity error */ |
148 | #define SER_SZERR 0x02 /* [4/vme] size error (r/w too large) */ | | 148 | #define SER_SZERR 0x02 /* [4/vme] size error (r/w too large) */ |
149 | #define SER_WATCHDOG 0x01 /* watchdog reset (never see this) */ | | 149 | #define SER_WATCHDOG 0x01 /* watchdog reset (never see this) */ |
150 | | | 150 | |
151 | #define SER_BITS \ | | 151 | #define SER_BITS \ |
152 | "\20\20WRITE\10INVAL\7PROT\6TIMEOUT\5SBUSERR\4MEMERR\2SZERR\1WATCHDOG" | | 152 | "\20\20WRITE\10INVAL\7PROT\6TIMEOUT\5SBUSERR\4MEMERR\2SZERR\1WATCHDOG" |
153 | | | 153 | |
154 | /* | | 154 | /* |
155 | * [4/4c] | | 155 | * [4/4c] |
156 | * Bits in async error register (errors from DVMA or Sun-4 cache | | 156 | * Bits in async error register (errors from DVMA or Sun-4 cache |
157 | * writeback). The corresponding bit is also set in the sync error reg. | | 157 | * writeback). The corresponding bit is also set in the sync error reg. |
158 | * | | 158 | * |
159 | * A writeback invalid error means there is a bug in the PTE manager. | | 159 | * A writeback invalid error means there is a bug in the PTE manager. |
160 | * | | 160 | * |
161 | * The word is that the async error register does not work right. | | 161 | * The word is that the async error register does not work right. |
162 | */ | | 162 | */ |
163 | #define AER_WBINVAL 0x80 /* writeback found PTE without PG_V */ | | 163 | #define AER_WBINVAL 0x80 /* writeback found PTE without PG_V */ |
164 | #define AER_TIMEOUT 0x20 /* bus timeout */ | | 164 | #define AER_TIMEOUT 0x20 /* bus timeout */ |
165 | #define AER_DVMAERR 0x10 /* bus error during DVMA */ | | 165 | #define AER_DVMAERR 0x10 /* bus error during DVMA */ |
166 | | | 166 | |
167 | #define AER_BITS "\20\10WBINVAL\6TIMEOUT\5DVMAERR" | | 167 | #define AER_BITS "\20\10WBINVAL\6TIMEOUT\5DVMAERR" |
168 | | | 168 | |
169 | /* | | 169 | /* |
170 | * [4/4c] Bits in system enable register. | | 170 | * [4/4c] Bits in system enable register. |
171 | */ | | 171 | */ |
172 | #define SYSEN_DVMA 0x20 /* Enable dvma */ | | 172 | #define SYSEN_DVMA 0x20 /* Enable dvma */ |
173 | #define SYSEN_CACHE 0x10 /* Enable cache */ | | 173 | #define SYSEN_CACHE 0x10 /* Enable cache */ |
174 | #define SYSEN_IOCACHE 0x40 /* Enable IO cache */ | | 174 | #define SYSEN_IOCACHE 0x40 /* Enable IO cache */ |
175 | #define SYSEN_VIDEO 0x08 /* Enable on-board video */ | | 175 | #define SYSEN_VIDEO 0x08 /* Enable on-board video */ |
176 | #define SYSEN_RESET 0x04 /* Reset the hardware */ | | 176 | #define SYSEN_RESET 0x04 /* Reset the hardware */ |
177 | #define SYSEN_RESETVME 0x02 /* Reset the VME bus */ | | 177 | #define SYSEN_RESETVME 0x02 /* Reset the VME bus */ |
178 | | | 178 | |
179 | | | 179 | |
180 | /* | | 180 | /* |
181 | * [4m] Bits in ASI_CONTROL space, sun4m only. | | 181 | * [4m] Bits in ASI_CONTROL space, sun4m only. |
182 | */ | | 182 | */ |
183 | #define MXCC_STREAM_DATA 0x1c00000 /* Stream data register */ | | 183 | #define MXCC_STREAM_DATA 0x1c00000 /* Stream data register */ |
184 | #define MXCC_STREAM_SRC 0x1c00100 /* Stream source register */ | | 184 | #define MXCC_STREAM_SRC 0x1c00100 /* Stream source register */ |
185 | #define MXCC_STREAM_DST 0x1c00200 /* Stream dest register */ | | 185 | #define MXCC_STREAM_DST 0x1c00200 /* Stream dest register */ |
186 | #define MXCC_BIST 0x1c00800 /* Builtin self test register */ | | 186 | #define MXCC_BIST 0x1c00800 /* Builtin self test register */ |
187 | #define MXCC_CTRLREG 0x1c00a00 /* Control register for MXCC */ | | 187 | #define MXCC_CTRLREG 0x1c00a00 /* Control register for MXCC */ |
188 | #define MXCC_STATREG 0x1c00b00 /* Status register for MXCC */ | | 188 | #define MXCC_STATREG 0x1c00b00 /* Status register for MXCC */ |
189 | #define MXCC_MRST 0x1c00c00 /* Module reset register */ | | 189 | #define MXCC_MRST 0x1c00c00 /* Module reset register */ |
190 | #define MXCC_ERROR 0x1c00e00 /* Error register */ | | 190 | #define MXCC_ERROR 0x1c00e00 /* Error register */ |
191 | #define MXCC_MBUSPORT 0x1c00f00 /* MBus port register */ | | 191 | #define MXCC_MBUSPORT 0x1c00f00 /* MBus port register */ |
192 | | | 192 | |
193 | /* Bits in MXCC_CTRLREG */ | | 193 | /* Bits in MXCC_CTRLREG */ |
194 | #define MXCC_CTRLREG_HC 0x1 /* Half cache (Xbus only) */ | | 194 | #define MXCC_CTRLREG_HC 0x1 /* Half cache (Xbus only) */ |
195 | #define MXCC_CTRLREG_CS 0x2 /* E-cache size (Xbus only) */ | | 195 | #define MXCC_CTRLREG_CS 0x2 /* E-cache size (Xbus only) */ |
196 | #define MXCC_CTRLREG_CE 0x4 /* Enable e-cache */ | | 196 | #define MXCC_CTRLREG_CE 0x4 /* Enable e-cache */ |
197 | #define MXCC_CTRLREG_PE 0x8 /* Parity enable */ | | 197 | #define MXCC_CTRLREG_PE 0x8 /* Parity enable */ |
198 | #define MXCC_CTRLREG_MC 0x10 /* Multiple command enable */ | | 198 | #define MXCC_CTRLREG_MC 0x10 /* Multiple command enable */ |
199 | #define MXCC_CTRLREG_PF 0x20 /* Prefetch enable */ | | 199 | #define MXCC_CTRLREG_PF 0x20 /* Prefetch enable */ |
200 | #define MXCC_CTRLREG_WI 0x40 /* Write invalidate (Xbus only) */ | | 200 | #define MXCC_CTRLREG_WI 0x40 /* Write invalidate (Xbus only) */ |
201 | #define MXCC_CTRLREG_BWC_MASK 0x180 /* Bus watch count (Xbus only) */ | | 201 | #define MXCC_CTRLREG_BWC_MASK 0x180 /* Bus watch count (Xbus only) */ |
202 | #define MXCC_CTRLREG_RC 0x200 /* Read reference count */ | | 202 | #define MXCC_CTRLREG_RC 0x200 /* Read reference count */ |
203 | | | 203 | |
204 | /* Bits in MXCC_MRST */ | | 204 | /* Bits in MXCC_MRST */ |
205 | #define MXCC_MRST_SI 0x00000002 /* Software Internal reset */ | | 205 | #define MXCC_MRST_SI 0x00000002 /* Software Internal reset */ |
206 | #define MXCC_MRST_WD 0x00000004 /* Watchdog reset */ | | 206 | #define MXCC_MRST_WD 0x00000004 /* Watchdog reset */ |
207 | | | 207 | |
208 | /* | | 208 | /* |
209 | * Stream register usage: | | 209 | * Stream register usage: |
210 | * To fill a block with some value, load that value into the 64 byte | | 210 | * To fill a block with some value, load that value into the 64 byte |
211 | * stream data register (using double-word access; on Mbus only the | | 211 | * stream data register (using double-word access; on Mbus only the |
212 | * lower 32 bytes are used), then write the physical address of | | 212 | * lower 32 bytes are used), then write the physical address of |
213 | * the destination into the stream destination register. | | 213 | * the destination into the stream destination register. |
214 | * | | 214 | * |
215 | * To copy a block, write the physical address of the source into | | 215 | * To copy a block, write the physical address of the source into |
216 | * the stream source register causing the block to be transferred | | 216 | * the stream source register causing the block to be transferred |
217 | * into the stream data register, then write the physical address of | | 217 | * into the stream data register, then write the physical address of |
218 | * the destination into the stream destination register. | | 218 | * the destination into the stream destination register. |
219 | * | | 219 | * |
220 | * In both cases, or in the MXCC_STREAM_CE bit to make the transactions | | 220 | * In both cases, or in the MXCC_STREAM_CE bit to make the transactions |
221 | * cache-coherent. Note that stream operations do not cause cache | | 221 | * cache-coherent. Note that stream operations do not cause cache |
222 | * lines to be allocated. | | 222 | * lines to be allocated. |
223 | */ | | 223 | */ |
224 | #define MXCC_STREAM_BLKSZ 32 /* Unit for stream ops */ | | 224 | #define MXCC_STREAM_BLKSZ 32 /* Unit for stream ops */ |
225 | #define MXCC_STREAM_C 0x1000000000ULL /* Cacheable bit for stream ops */ | | 225 | #define MXCC_STREAM_C 0x1000000000ULL /* Cacheable bit for stream ops */ |
226 | | | 226 | |
227 | /* | | 227 | /* |
228 | * Bits in ASI_SRMMUFP space. | | 228 | * Bits in ASI_SRMMUFP space. |
229 | * Bits 8-11 determine the type of flush/probe. | | 229 | * Bits 8-11 determine the type of flush/probe. |
230 | * Address bits 12-31 hold the page frame. | | 230 | * Address bits 12-31 hold the page frame. |
231 | */ | | 231 | */ |
232 | #define ASI_SRMMUFP_L3 (0<<8) /* probe L3 | flush L3 PTE */ | | 232 | #define ASI_SRMMUFP_L3 (0<<8) /* probe L3 | flush L3 PTE */ |
233 | #define ASI_SRMMUFP_L2 (1<<8) /* probe L2 | flush L2/L3 PTE/PTD's */ | | 233 | #define ASI_SRMMUFP_L2 (1<<8) /* probe L2 | flush L2/L3 PTE/PTD's */ |
234 | #define ASI_SRMMUFP_L1 (2<<8) /* probe L1 | flush L1/L2/L3 PTE/PTD's*/ | | 234 | #define ASI_SRMMUFP_L1 (2<<8) /* probe L1 | flush L1/L2/L3 PTE/PTD's*/ |
235 | #define ASI_SRMMUFP_L0 (3<<8) /* probe L0 | flush L0/L1/L2/L3 PTE/PTD's */ | | 235 | #define ASI_SRMMUFP_L0 (3<<8) /* probe L0 | flush L0/L1/L2/L3 PTE/PTD's */ |
236 | #define ASI_SRMMUFP_LN (4<<8) /* probe all | flush all levels */ | | 236 | #define ASI_SRMMUFP_LN (4<<8) /* probe all | flush all levels */ |
237 | | | 237 | |
238 | /* | | 238 | /* |
239 | * [4m] Registers and bits in the SPARC Reference MMU (ASI_SRMMU). | | 239 | * [4m] Registers and bits in the SPARC Reference MMU (ASI_SRMMU). |
240 | */ | | 240 | */ |
241 | #define SRMMU_PCR 0x00000000 /* Processor control register */ | | 241 | #define SRMMU_PCR 0x00000000 /* Processor control register */ |
242 | #define SRMMU_CXTPTR 0x00000100 /* Context table pointer register */ | | 242 | #define SRMMU_CXTPTR 0x00000100 /* Context table pointer register */ |
243 | #define SRMMU_CXR 0x00000200 /* Context register */ | | 243 | #define SRMMU_CXR 0x00000200 /* Context register */ |
244 | #define SRMMU_SFSR 0x00000300 /* Synchronous fault status reg */ | | 244 | #define SRMMU_SFSR 0x00000300 /* Synchronous fault status reg */ |
245 | #define SRMMU_SFAR 0x00000400 /* Synchronous fault address reg */ | | 245 | #define SRMMU_SFAR 0x00000400 /* Synchronous fault address reg */ |
246 | #define SRMMU_AFSR 0x00000500 /* Asynchronous fault status reg (HS) */ | | 246 | #define SRMMU_AFSR 0x00000500 /* Asynchronous fault status reg (HS) */ |
247 | #define SRMMU_AFAR 0x00000600 /* Asynchronous fault address reg (HS)*/ | | 247 | #define SRMMU_AFAR 0x00000600 /* Asynchronous fault address reg (HS)*/ |
248 | #define SRMMU_PCFG 0x00000600 /* Processor configuration reg (TURBO)*/ | | 248 | #define SRMMU_PCFG 0x00000600 /* Processor configuration reg (TURBO)*/ |
249 | #define SRMMU_RST 0x00000700 /* Reset reg */ | | 249 | #define SRMMU_RST 0x00000700 /* Reset reg */ |
250 | #define SRMMU_TLBCTRL 0x00001000 /* TLB replacement control reg */ | | 250 | #define SRMMU_TLBCTRL 0x00001000 /* TLB replacement control reg */ |
251 | | | 251 | |
252 | | | 252 | |
253 | /* | | 253 | /* |
254 | * [4m] Bits in SRMMU control register. One set per module. | | 254 | * [4m] Bits in SRMMU control register. One set per module. |
255 | */ | | 255 | */ |
256 | | | 256 | |
257 | /* Bits 0 and 1 are common between implementations */ | | 257 | /* Bits 0 and 1 are common between implementations */ |
258 | #define SRMMU_PCR_ME 0x00000001 /* MMU Enable */ | | 258 | #define SRMMU_PCR_ME 0x00000001 /* MMU Enable */ |
259 | #define SRMMU_PCR_NF 0x00000002 /* Fault inhibit bit */ | | 259 | #define SRMMU_PCR_NF 0x00000002 /* Fault inhibit bit */ |
260 | | | 260 | |
261 | #define VIKING_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 261 | #define VIKING_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
262 | #define VIKING_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 262 | #define VIKING_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
263 | #define VIKING_PCR_PSO 0x00000080 /* Partial Store Ordering enable */ | | 263 | #define VIKING_PCR_PSO 0x00000080 /* Partial Store Ordering enable */ |
264 | #define VIKING_PCR_DCE 0x00000100 /* Data cache enable bit */ | | 264 | #define VIKING_PCR_DCE 0x00000100 /* Data cache enable bit */ |
265 | #define VIKING_PCR_ICE 0x00000200 /* SuperSPARC instr. cache enable */ | | 265 | #define VIKING_PCR_ICE 0x00000200 /* SuperSPARC instr. cache enable */ |
266 | #define VIKING_PCR_SB 0x00000400 /* Store buffer enable bit */ | | 266 | #define VIKING_PCR_SB 0x00000400 /* Store buffer enable bit */ |
267 | #define VIKING_PCR_MB 0x00000800 /* MBus mode: 0=MXCC, 1=no MXCC */ | | 267 | #define VIKING_PCR_MB 0x00000800 /* MBus mode: 0=MXCC, 1=no MXCC */ |
268 | #define VIKING_PCR_PE 0x00001000 /* Enable memory parity checking */ | | 268 | #define VIKING_PCR_PE 0x00001000 /* Enable memory parity checking */ |
269 | #define VIKING_PCR_BM 0x00002000 /* 1 iff booting */ | | 269 | #define VIKING_PCR_BM 0x00002000 /* 1 iff booting */ |
270 | #define VIKING_PCR_SE 0x00004000 /* Coherent bus snoop enable */ | | 270 | #define VIKING_PCR_SE 0x00004000 /* Coherent bus snoop enable */ |
271 | #define VIKING_PCR_AC 0x00008000 /* 1=cache non-MMU accesses */ | | 271 | #define VIKING_PCR_AC 0x00008000 /* 1=cache non-MMU accesses */ |
272 | #define VIKING_PCR_TC 0x00010000 /* 1=cache table walks */ | | 272 | #define VIKING_PCR_TC 0x00010000 /* 1=cache table walks */ |
273 | | | 273 | |
274 | #define HYPERSPARC_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 274 | #define HYPERSPARC_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
275 | #define HYPERSPARC_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 275 | #define HYPERSPARC_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
276 | #define HYPERSPARC_PCR_CE 0x00000100 /* Cache enable bit */ | | 276 | #define HYPERSPARC_PCR_CE 0x00000100 /* Cache enable bit */ |
277 | #define HYPERSPARC_PCR_CM 0x00000400 /* Cache mode: 1=write-back */ | | 277 | #define HYPERSPARC_PCR_CM 0x00000400 /* Cache mode: 1=write-back */ |
278 | #define HYPERSPARC_PCR_MR 0x00000800 /* Memory reflection: 1 = on */ | | 278 | #define HYPERSPARC_PCR_MR 0x00000800 /* Memory reflection: 1 = on */ |
279 | #define HYPERSPARC_PCR_CS 0x00001000 /* cache size: 1=256k, 0=128k */ | | 279 | #define HYPERSPARC_PCR_CS 0x00001000 /* cache size: 1=256k, 0=128k */ |
280 | #define HYPERSPARC_PCR_C 0x00002000 /* enable cache when MMU off */ | | 280 | #define HYPERSPARC_PCR_C 0x00002000 /* enable cache when MMU off */ |
281 | #define HYPERSPARC_PCR_BM 0x00004000 /* 1 iff booting */ | | 281 | #define HYPERSPARC_PCR_BM 0x00004000 /* 1 iff booting */ |
282 | #define HYPERSPARC_PCR_MID 0x00078000 /* MBus module ID MID<3:0> */ | | 282 | #define HYPERSPARC_PCR_MID 0x00078000 /* MBus module ID MID<3:0> */ |
283 | #define HYPERSPARC_PCR_WBE 0x00080000 /* Write buffer enable */ | | 283 | #define HYPERSPARC_PCR_WBE 0x00080000 /* Write buffer enable */ |
284 | #define HYPERSPARC_PCR_SE 0x00100000 /* Coherent bus snoop enable */ | | 284 | #define HYPERSPARC_PCR_SE 0x00100000 /* Coherent bus snoop enable */ |
285 | #define HYPERSPARC_PCR_CWR 0x00200000 /* Cache wrap enable */ | | 285 | #define HYPERSPARC_PCR_CWR 0x00200000 /* Cache wrap enable */ |
286 | | | 286 | |
287 | #define CYPRESS_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 287 | #define CYPRESS_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
288 | #define CYPRESS_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 288 | #define CYPRESS_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
289 | #define CYPRESS_PCR_CE 0x00000100 /* Cache enable bit */ | | 289 | #define CYPRESS_PCR_CE 0x00000100 /* Cache enable bit */ |
290 | #define CYPRESS_PCR_CL 0x00000200 /* Cache Lock (604 only) */ | | 290 | #define CYPRESS_PCR_CL 0x00000200 /* Cache Lock (604 only) */ |
291 | #define CYPRESS_PCR_CM 0x00000400 /* Cache mode: 1=write-back */ | | 291 | #define CYPRESS_PCR_CM 0x00000400 /* Cache mode: 1=write-back */ |
292 | #define CYPRESS_PCR_MR 0x00000800 /* Memory reflection: 1=on (605 only) */ | | 292 | #define CYPRESS_PCR_MR 0x00000800 /* Memory reflection: 1=on (605 only) */ |
293 | #define CYPRESS_PCR_C 0x00002000 /* enable cache when MMU off */ | | 293 | #define CYPRESS_PCR_C 0x00002000 /* enable cache when MMU off */ |
294 | #define CYPRESS_PCR_BM 0x00004000 /* 1 iff booting */ | | 294 | #define CYPRESS_PCR_BM 0x00004000 /* 1 iff booting */ |
295 | #define CYPRESS_PCR_MID 0x00078000 /* MBus module ID MID<3:0> (605 only) */ | | 295 | #define CYPRESS_PCR_MID 0x00078000 /* MBus module ID MID<3:0> (605 only) */ |
296 | #define CYPRESS_PCR_MV 0x00080000 /* Multichip Valid */ | | 296 | #define CYPRESS_PCR_MV 0x00080000 /* Multichip Valid */ |
297 | #define CYPRESS_PCR_MCM 0x00300000 /* Multichip Mask */ | | 297 | #define CYPRESS_PCR_MCM 0x00300000 /* Multichip Mask */ |
298 | #define CYPRESS_PCR_MCA 0x00c00000 /* Multichip Address */ | | 298 | #define CYPRESS_PCR_MCA 0x00c00000 /* Multichip Address */ |
299 | | | 299 | |
300 | #define MS1_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 300 | #define MS1_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
301 | #define MS1_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 301 | #define MS1_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
302 | #define MS1_PCR_DCE 0x00000100 /* Data cache enable */ | | 302 | #define MS1_PCR_DCE 0x00000100 /* Data cache enable */ |
303 | #define MS1_PCR_ICE 0x00000200 /* Instruction cache enable */ | | 303 | #define MS1_PCR_ICE 0x00000200 /* Instruction cache enable */ |
304 | #define MS1_PCR_RC 0x00000c00 /* DRAM Refresh control */ | | 304 | #define MS1_PCR_RC 0x00000c00 /* DRAM Refresh control */ |
305 | #define MS1_PCR_PE 0x00001000 /* Enable memory parity checking */ | | 305 | #define MS1_PCR_PE 0x00001000 /* Enable memory parity checking */ |
306 | #define MS1_PCR_BM 0x00004000 /* 1 iff booting */ | | 306 | #define MS1_PCR_BM 0x00004000 /* 1 iff booting */ |
307 | #define MS1_PCR_AC 0x00008000 /* 1=cache if ME==0 (and [ID]CE on) */ | | 307 | #define MS1_PCR_AC 0x00008000 /* 1=cache if ME==0 (and [ID]CE on) */ |
308 | #define MS1_PCR_ID 0x00010000 /* 1=disable ITBR */ | | 308 | #define MS1_PCR_ID 0x00010000 /* 1=disable ITBR */ |
309 | #define MS1_PCR_PC 0x00020000 /* Parity control: 0=even,1=odd */ | | 309 | #define MS1_PCR_PC 0x00020000 /* Parity control: 0=even,1=odd */ |
310 | #define MS1_PCR_MV 0x00100000 /* Memory data View (diag) */ | | 310 | #define MS1_PCR_MV 0x00100000 /* Memory data View (diag) */ |
311 | #define MS1_PCR_DV 0x00200000 /* Data View (diag) */ | | 311 | #define MS1_PCR_DV 0x00200000 /* Data View (diag) */ |
312 | #define MS1_PCR_AV 0x00400000 /* Address View (diag) */ | | 312 | #define MS1_PCR_AV 0x00400000 /* Address View (diag) */ |
313 | #define MS1_PCR_STW 0x00800000 /* Software Tablewalk enable */ | | 313 | #define MS1_PCR_STW 0x00800000 /* Software Tablewalk enable */ |
314 | | | 314 | |
315 | #define SWIFT_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 315 | #define SWIFT_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
316 | #define SWIFT_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 316 | #define SWIFT_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
317 | #define SWIFT_PCR_SA 0x00000080 /* Store Allocate */ | | 317 | #define SWIFT_PCR_SA 0x00000080 /* Store Allocate */ |
318 | #define SWIFT_PCR_DCE 0x00000100 /* Data cache enable */ | | 318 | #define SWIFT_PCR_DCE 0x00000100 /* Data cache enable */ |
319 | #define SWIFT_PCR_ICE 0x00000200 /* Instruction cache enable */ | | 319 | #define SWIFT_PCR_ICE 0x00000200 /* Instruction cache enable */ |
320 | #define SWIFT_PCR_RC 0x00003c00 /* DRAM Refresh control */ | | 320 | #define SWIFT_PCR_RC 0x00003c00 /* DRAM Refresh control */ |
321 | #define SWIFT_PCR_BM 0x00004000 /* 1 iff booting */ | | 321 | #define SWIFT_PCR_BM 0x00004000 /* 1 iff booting */ |
322 | #define SWIFT_PCR_AC 0x00008000 /* 1=cache if ME=0 (and [ID]CE on) */ | | 322 | #define SWIFT_PCR_AC 0x00008000 /* 1=cache if ME=0 (and [ID]CE on) */ |
323 | #define SWIFT_PCR_PA 0x00010000 /* TCX/SX control */ | | 323 | #define SWIFT_PCR_PA 0x00010000 /* TCX/SX control */ |
324 | #define SWIFT_PCR_PC 0x00020000 /* Parity control: 0=even,1=odd */ | | 324 | #define SWIFT_PCR_PC 0x00020000 /* Parity control: 0=even,1=odd */ |
325 | #define SWIFT_PCR_PE 0x00040000 /* Enable memory parity checking */ | | 325 | #define SWIFT_PCR_PE 0x00040000 /* Enable memory parity checking */ |
326 | #define SWIFT_PCR_PMC 0x00180000 /* Page mode control */ | | 326 | #define SWIFT_PCR_PMC 0x00180000 /* Page mode control */ |
327 | #define SWIFT_PCR_BF 0x00200000 /* Branch Folding */ | | 327 | #define SWIFT_PCR_BF 0x00200000 /* Branch Folding */ |
328 | #define SWIFT_PCR_WP 0x00400000 /* Watch point enable */ | | 328 | #define SWIFT_PCR_WP 0x00400000 /* Watch point enable */ |
329 | #define SWIFT_PCR_STW 0x00800000 /* Software Tablewalk enable */ | | 329 | #define SWIFT_PCR_STW 0x00800000 /* Software Tablewalk enable */ |
330 | | | 330 | |
331 | #define TURBOSPARC_PCR_ME SRMMU_PCR_ME /* MMU Enable */ | | 331 | #define TURBOSPARC_PCR_ME SRMMU_PCR_ME /* MMU Enable */ |
332 | #define TURBOSPARC_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ | | 332 | #define TURBOSPARC_PCR_NF SRMMU_PCR_NF /* Fault inhibit bit */ |
333 | #define TURBOSPARC_PCR_ICS 0x00000004 /* I-cache snoop enable */ | | 333 | #define TURBOSPARC_PCR_ICS 0x00000004 /* I-cache snoop enable */ |
334 | #define TURBOSPARC_PCR_PSO 0x00000008 /* Partial Store order (ro!) */ | | 334 | #define TURBOSPARC_PCR_PSO 0x00000008 /* Partial Store order (ro!) */ |
335 | #define TURBOSPARC_PCR_DCE 0x00000100 /* Data cache enable */ | | 335 | #define TURBOSPARC_PCR_DCE 0x00000100 /* Data cache enable */ |
336 | #define TURBOSPARC_PCR_ICE 0x00000200 /* Instruction cache enable */ | | 336 | #define TURBOSPARC_PCR_ICE 0x00000200 /* Instruction cache enable */ |
337 | #define TURBOSPARC_PCR_RC 0x00003c00 /* DRAM Refresh control */ | | 337 | #define TURBOSPARC_PCR_RC 0x00003c00 /* DRAM Refresh control */ |
338 | #define TURBOSPARC_PCR_BM 0x00004000 /* 1 iff booting */ | | 338 | #define TURBOSPARC_PCR_BM 0x00004000 /* 1 iff booting */ |
339 | #define TURBOSPARC_PCR_PC 0x00020000 /* Parity ctrl: 0=even,1=odd */ | | 339 | #define TURBOSPARC_PCR_PC 0x00020000 /* Parity ctrl: 0=even,1=odd */ |
340 | #define TURBOSPARC_PCR_PE 0x00040000 /* Enable parity checking */ | | 340 | #define TURBOSPARC_PCR_PE 0x00040000 /* Enable parity checking */ |
341 | #define TURBOSPARC_PCR_PMC 0x00180000 /* Page mode control */ | | 341 | #define TURBOSPARC_PCR_PMC 0x00180000 /* Page mode control */ |
342 | | | 342 | |
343 | /* The Turbosparc's Processor Configuration Register */ | | 343 | /* The Turbosparc's Processor Configuration Register */ |
344 | #define TURBOSPARC_PCFG_SCC 0x00000007 /* e-cache config */ | | 344 | #define TURBOSPARC_PCFG_SCC 0x00000007 /* e-cache config */ |
345 | #define TURBOSPARC_PCFG_SE 0x00000008 /* e-cache enable */ | | 345 | #define TURBOSPARC_PCFG_SE 0x00000008 /* e-cache enable */ |
346 | #define TURBOSPARC_PCFG_US2 0x00000010 /* microsparc II compat */ | | 346 | #define TURBOSPARC_PCFG_US2 0x00000010 /* microsparc II compat */ |
347 | #define TURBOSPARC_PCFG_WT 0x00000020 /* write-through enable */ | | 347 | #define TURBOSPARC_PCFG_WT 0x00000020 /* write-through enable */ |
348 | #define TURBOSPARC_PCFG_SBC 0x000000c0 /* SBus Clock */ | | 348 | #define TURBOSPARC_PCFG_SBC 0x000000c0 /* SBus Clock */ |
349 | #define TURBOSPARC_PCFG_WS 0x03800000 /* DRAM wait states */ | | 349 | #define TURBOSPARC_PCFG_WS 0x03800000 /* DRAM wait states */ |
350 | #define TURBOSPARC_PCFG_RAH 0x0c000000 /* DRAM Row Address Hold */ | | 350 | #define TURBOSPARC_PCFG_RAH 0x0c000000 /* DRAM Row Address Hold */ |
351 | #define TURBOSPARC_PCFG_AXC 0x30000000 /* AFX Clock */ | | 351 | #define TURBOSPARC_PCFG_AXC 0x30000000 /* AFX Clock */ |
352 | #define TURBOSPARC_PCFG_SNP 0x40000000 /* DVMA Snoop enable */ | | 352 | #define TURBOSPARC_PCFG_SNP 0x40000000 /* DVMA Snoop enable */ |
353 | #define TURBOSPARC_PCFG_IOCLK 0x80000000 /* I/O clock ratio */ | | 353 | #define TURBOSPARC_PCFG_IOCLK 0x80000000 /* I/O clock ratio */ |
354 | | | 354 | |
355 | | | 355 | |
356 | /* Implementation and Version fields are common to all modules */ | | 356 | /* Implementation and Version fields are common to all modules */ |
357 | #define SRMMU_PCR_VER 0x0f000000 /* Version of MMU implementation */ | | 357 | #define SRMMU_PCR_VER 0x0f000000 /* Version of MMU implementation */ |
358 | #define SRMMU_PCR_IMPL 0xf0000000 /* Implementation number of MMU */ | | 358 | #define SRMMU_PCR_IMPL 0xf0000000 /* Implementation number of MMU */ |
359 | | | 359 | |
360 | | | 360 | |
361 | /* [4m] Bits in the Synchronous Fault Status Register */ | | 361 | /* [4m] Bits in the Synchronous Fault Status Register */ |
362 | #define SFSR_EM 0x00020000 /* Error mode watchdog reset occurred */ | | 362 | #define SFSR_EM 0x00020000 /* Error mode watchdog reset occurred */ |
363 | #define SFSR_CS 0x00010000 /* Control Space error */ | | 363 | #define SFSR_CS 0x00010000 /* Control Space error */ |
364 | #define SFSR_SB 0x00008000 /* SS: Store Buffer Error */ | | 364 | #define SFSR_SB 0x00008000 /* SS: Store Buffer Error */ |
365 | #define SFSR_PERR 0x00006000 /* Parity error code */ | | 365 | #define SFSR_PERR 0x00006000 /* Parity error code */ |
366 | #define SFSR_P 0x00004000 /* SS: Parity error */ | | 366 | #define SFSR_P 0x00004000 /* SS: Parity error */ |
367 | #define SFSR_UC 0x00001000 /* Uncorrectable error */ | | 367 | #define SFSR_UC 0x00001000 /* Uncorrectable error */ |
368 | #define SFSR_TO 0x00000800 /* S-Bus timeout */ | | 368 | #define SFSR_TO 0x00000800 /* S-Bus timeout */ |
369 | #define SFSR_BE 0x00000400 /* S-Bus bus error */ | | 369 | #define SFSR_BE 0x00000400 /* S-Bus bus error */ |
370 | #define SFSR_LVL 0x00000300 /* Pagetable level causing the fault */ | | 370 | #define SFSR_LVL 0x00000300 /* Pagetable level causing the fault */ |
371 | #define SFSR_AT 0x000000e0 /* Access type */ | | 371 | #define SFSR_AT 0x000000e0 /* Access type */ |
372 | #define SFSR_FT 0x0000001c /* Fault type */ | | 372 | #define SFSR_FT 0x0000001c /* Fault type */ |
373 | #define SFSR_FAV 0x00000002 /* Fault Address is valid */ | | 373 | #define SFSR_FAV 0x00000002 /* Fault Address is valid */ |
374 | #define SFSR_OW 0x00000001 /* Overwritten with new fault */ | | 374 | #define SFSR_OW 0x00000001 /* Overwritten with new fault */ |
375 | | | 375 | |
376 | #define SFSR_BITS "\177\020" \ | | 376 | #define SFSR_BITS "\177\020" \ |
377 | "b\21EM\0b\20CS\0b\17SB\0f\15\2PERR\0" \ | | 377 | "b\21EM\0b\20CS\0b\17SB\0f\15\2PERR\0" \ |
378 | "b\14UC\0b\13TO\0b\12BE\0f\10\2LVL\0" \ | | 378 | "b\14UC\0b\13TO\0b\12BE\0f\10\2LVL\0" \ |
379 | "f\05\3AT\0f\02\3FT\0b\01FAV\0b\01OW" | | 379 | "f\05\3AT\0f\02\3FT\0b\01FAV\0b\01OW\0" |
380 | | | 380 | |
381 | /* [4m] Synchronous Fault Types */ | | 381 | /* [4m] Synchronous Fault Types */ |
382 | #define SFSR_FT_NONE (0 << 2) /* no fault */ | | 382 | #define SFSR_FT_NONE (0 << 2) /* no fault */ |
383 | #define SFSR_FT_INVADDR (1 << 2) /* invalid address fault */ | | 383 | #define SFSR_FT_INVADDR (1 << 2) /* invalid address fault */ |
384 | #define SFSR_FT_PROTERR (2 << 2) /* protection fault */ | | 384 | #define SFSR_FT_PROTERR (2 << 2) /* protection fault */ |
385 | #define SFSR_FT_PRIVERR (3 << 2) /* privelege violation */ | | 385 | #define SFSR_FT_PRIVERR (3 << 2) /* privelege violation */ |
386 | #define SFSR_FT_TRANSERR (4 << 2) /* translation fault */ | | 386 | #define SFSR_FT_TRANSERR (4 << 2) /* translation fault */ |
387 | #define SFSR_FT_BUSERR (5 << 2) /* access bus error */ | | 387 | #define SFSR_FT_BUSERR (5 << 2) /* access bus error */ |
388 | #define SFSR_FT_INTERR (6 << 2) /* internal error */ | | 388 | #define SFSR_FT_INTERR (6 << 2) /* internal error */ |
389 | #define SFSR_FT_RESERVED (7 << 2) /* reserved */ | | 389 | #define SFSR_FT_RESERVED (7 << 2) /* reserved */ |
390 | | | 390 | |
391 | /* [4m] Synchronous Fault Access Types */ | | 391 | /* [4m] Synchronous Fault Access Types */ |
392 | #define SFSR_AT_LDUDATA (0 << 5) /* Load user data */ | | 392 | #define SFSR_AT_LDUDATA (0 << 5) /* Load user data */ |
393 | #define SFSR_AT_LDSDATA (1 << 5) /* Load supervisor data */ | | 393 | #define SFSR_AT_LDSDATA (1 << 5) /* Load supervisor data */ |
394 | #define SFSR_AT_LDUTEXT (2 << 5) /* Load user text */ | | 394 | #define SFSR_AT_LDUTEXT (2 << 5) /* Load user text */ |
395 | #define SFSR_AT_LDSTEXT (3 << 5) /* Load supervisor text */ | | 395 | #define SFSR_AT_LDSTEXT (3 << 5) /* Load supervisor text */ |
396 | #define SFSR_AT_STUDATA (4 << 5) /* Store user data */ | | 396 | #define SFSR_AT_STUDATA (4 << 5) /* Store user data */ |
397 | #define SFSR_AT_STSDATA (5 << 5) /* Store supervisor data */ | | 397 | #define SFSR_AT_STSDATA (5 << 5) /* Store supervisor data */ |
398 | #define SFSR_AT_STUTEXT (6 << 5) /* Store user text */ | | 398 | #define SFSR_AT_STUTEXT (6 << 5) /* Store user text */ |
399 | #define SFSR_AT_STSTEXT (7 << 5) /* Store supervisor text */ | | 399 | #define SFSR_AT_STSTEXT (7 << 5) /* Store supervisor text */ |
400 | #define SFSR_AT_SUPERVISOR (1 << 5) /* Set iff supervisor */ | | 400 | #define SFSR_AT_SUPERVISOR (1 << 5) /* Set iff supervisor */ |
401 | #define SFSR_AT_TEXT (2 << 5) /* Set iff text */ | | 401 | #define SFSR_AT_TEXT (2 << 5) /* Set iff text */ |
402 | #define SFSR_AT_STORE (4 << 5) /* Set iff store */ | | 402 | #define SFSR_AT_STORE (4 << 5) /* Set iff store */ |
403 | | | 403 | |
404 | /* [4m] Synchronous Fault PT Levels */ | | 404 | /* [4m] Synchronous Fault PT Levels */ |
405 | #define SFSR_LVL_0 (0 << 8) /* Context table entry */ | | 405 | #define SFSR_LVL_0 (0 << 8) /* Context table entry */ |
406 | #define SFSR_LVL_1 (1 << 8) /* Region table entry */ | | 406 | #define SFSR_LVL_1 (1 << 8) /* Region table entry */ |
407 | #define SFSR_LVL_2 (2 << 8) /* Segment table entry */ | | 407 | #define SFSR_LVL_2 (2 << 8) /* Segment table entry */ |
408 | #define SFSR_LVL_3 (3 << 8) /* Page table entry */ | | 408 | #define SFSR_LVL_3 (3 << 8) /* Page table entry */ |
409 | | | 409 | |
410 | /* [4m] Asynchronous Fault Status Register bits */ | | 410 | /* [4m] Asynchronous Fault Status Register bits */ |
411 | #define AFSR_AFO 0x00000001 /* Async. fault occurred */ | | 411 | #define AFSR_AFO 0x00000001 /* Async. fault occurred */ |
412 | #define AFSR_AFA 0x000000f0 /* Bits <35:32> of faulting phys addr */ | | 412 | #define AFSR_AFA 0x000000f0 /* Bits <35:32> of faulting phys addr */ |
413 | #define AFSR_AFA_RSHIFT 4 /* Shift to get AFA to bit 0 */ | | 413 | #define AFSR_AFA_RSHIFT 4 /* Shift to get AFA to bit 0 */ |
414 | #define AFSR_AFA_LSHIFT 28 /* Shift to get AFA to bit 32 */ | | 414 | #define AFSR_AFA_LSHIFT 28 /* Shift to get AFA to bit 32 */ |
415 | #define AFSR_BE 0x00000400 /* Bus error */ | | 415 | #define AFSR_BE 0x00000400 /* Bus error */ |
416 | #define AFSR_TO 0x00000800 /* Bus timeout */ | | 416 | #define AFSR_TO 0x00000800 /* Bus timeout */ |
417 | #define AFSR_UC 0x00001000 /* Uncorrectable error */ | | 417 | #define AFSR_UC 0x00001000 /* Uncorrectable error */ |
418 | #define AFSR_SE 0x00002000 /* System error */ | | 418 | #define AFSR_SE 0x00002000 /* System error */ |
419 | | | 419 | |
420 | #define AFSR_BITS "\177\020" \ | | 420 | #define AFSR_BITS "\177\020" \ |
421 | "b\15SE\0b\14UC\0b\13TO\0b\12BE\0f\04\4AFA\0b\0AFO\0" | | 421 | "b\15SE\0b\14UC\0b\13TO\0b\12BE\0f\04\4AFA\0b\0AFO\0" |
422 | | | 422 | |
423 | /* [4m] TLB Replacement Control Register bits */ | | 423 | /* [4m] TLB Replacement Control Register bits */ |
424 | #define TLBC_DISABLE 0x00000020 /* Disable replacement counter */ | | 424 | #define TLBC_DISABLE 0x00000020 /* Disable replacement counter */ |
425 | #define TLBC_RCNTMASK 0x0000001f /* Replacement counter (0-31) */ | | 425 | #define TLBC_RCNTMASK 0x0000001f /* Replacement counter (0-31) */ |
426 | | | 426 | |
427 | /* [4m] SRMMU Reset Register bits */ | | 427 | /* [4m] SRMMU Reset Register bits */ |
428 | #define SRMMU_RST_SI 0x00000002 /* Software Internal reset */ | | 428 | #define SRMMU_RST_SI 0x00000002 /* Software Internal reset */ |
429 | #define SRMMU_RST_WD 0x00000004 /* Watchdog reset */ | | 429 | #define SRMMU_RST_WD 0x00000004 /* Watchdog reset */ |
430 | | | 430 | |
431 | /* | | 431 | /* |
432 | * The Ross Hypersparc has an Instruction Cache Control Register (ICCR) | | 432 | * The Ross Hypersparc has an Instruction Cache Control Register (ICCR) |
433 | * It contains an enable bit for the on-chip instruction cache and a bit | | 433 | * It contains an enable bit for the on-chip instruction cache and a bit |
434 | * that controls whether a FLUSH instruction causes an Unimplemented | | 434 | * that controls whether a FLUSH instruction causes an Unimplemented |
435 | * Flush Trap or just flushes the appropriate instruction cache line. | | 435 | * Flush Trap or just flushes the appropriate instruction cache line. |
436 | * The ICCR register is implemented as Ancillary State register number 31. | | 436 | * The ICCR register is implemented as Ancillary State register number 31. |
437 | */ | | 437 | */ |
438 | #define HYPERSPARC_ICCR_ICE 1 /* Instruction cache enable */ | | 438 | #define HYPERSPARC_ICCR_ICE 1 /* Instruction cache enable */ |
439 | #define HYPERSPARC_ICCR_FTD 2 /* Unimpl. flush trap disable */ | | 439 | #define HYPERSPARC_ICCR_FTD 2 /* Unimpl. flush trap disable */ |
440 | #define HYPERSPARC_ASRNUM_ICCR 31 /* ICCR == ASR#31 */ | | 440 | #define HYPERSPARC_ASRNUM_ICCR 31 /* ICCR == ASR#31 */ |
441 | | | 441 | |
442 | | | 442 | |
443 | /* | | 443 | /* |
444 | * microSPARC-IIep has control space registers in PA[30:28] = 0x1 | | 444 | * microSPARC-IIep has control space registers in PA[30:28] = 0x1 |
445 | */ | | 445 | */ |
446 | | | 446 | |
447 | /* Asynchronous memory Fault Status/Address Registers */ | | 447 | /* Asynchronous memory Fault Status/Address Registers */ |
448 | #define MSIIEP_AFSR 0x10001000 | | 448 | #define MSIIEP_AFSR 0x10001000 |
449 | #define MSIIEP_AFAR 0x10001004 | | 449 | #define MSIIEP_AFAR 0x10001004 |
450 | | | 450 | |
451 | #define MSIIEP_AFSR_ERR 0x80000000 /* summary bit: LE || TO || BE */ | | 451 | #define MSIIEP_AFSR_ERR 0x80000000 /* summary bit: LE || TO || BE */ |
452 | #define MSIIEP_AFSR_LE 0x40000000 /* late error */ | | 452 | #define MSIIEP_AFSR_LE 0x40000000 /* late error */ |
453 | #define MSIIEP_AFSR_TO 0x20000000 /* time out */ | | 453 | #define MSIIEP_AFSR_TO 0x20000000 /* time out */ |
454 | #define MSIIEP_AFSR_BE 0x10000000 /* bus error */ | | 454 | #define MSIIEP_AFSR_BE 0x10000000 /* bus error */ |
455 | #define MSIIEP_AFSR_S 0x01000000 /* supervisor */ | | 455 | #define MSIIEP_AFSR_S 0x01000000 /* supervisor */ |
456 | #define MSIIEP_AFSR_ME 0x00080000 /* multiple error */ | | 456 | #define MSIIEP_AFSR_ME 0x00080000 /* multiple error */ |
457 | #define MSIIEP_AFSR_RD 0x00040000 /* read operation */ | | 457 | #define MSIIEP_AFSR_RD 0x00040000 /* read operation */ |
458 | #define MSIIEP_AFSR_FAV 0x00020000 /* fault address valid */ | | 458 | #define MSIIEP_AFSR_FAV 0x00020000 /* fault address valid */ |
459 | | | 459 | |
460 | #define MSIIEP_AFSR_BITS "\177\20" \ | | 460 | #define MSIIEP_AFSR_BITS "\177\20" \ |
461 | "b\37ERR\0" "b\36LE\0" "b\35TO\0" "b\34BE\0" \ | | 461 | "b\37ERR\0" "b\36LE\0" "b\35TO\0" "b\34BE\0" \ |
462 | "b\30S\0" "b\23ME\0" "b\22RD\0" "b\21FAV\0" | | 462 | "b\30S\0" "b\23ME\0" "b\22RD\0" "b\21FAV\0" |
463 | | | 463 | |
464 | | | 464 | |
465 | /* Memory Fault Status/Address Registers (parity faults) */ | | 465 | /* Memory Fault Status/Address Registers (parity faults) */ |
466 | #define MSIIEP_MFSR 0x10001050 | | 466 | #define MSIIEP_MFSR 0x10001050 |
467 | #define MSIIEP_MFAR 0x10001054 | | 467 | #define MSIIEP_MFAR 0x10001054 |
468 | | | 468 | |
469 | #define MSIIEP_MFSR_ERR 0x80000000 /* summary bit */ | | 469 | #define MSIIEP_MFSR_ERR 0x80000000 /* summary bit */ |
470 | #define MSIIEP_MFSR_S 0x01000000 /* supervisor */ | | 470 | #define MSIIEP_MFSR_S 0x01000000 /* supervisor */ |
471 | #define MSIIEP_MFSR_CP 0x00800000 /* CPU transaction */ | | 471 | #define MSIIEP_MFSR_CP 0x00800000 /* CPU transaction */ |
472 | #define MSIIEP_MFSR_ME 0x00080000 /* multiple error */ | | 472 | #define MSIIEP_MFSR_ME 0x00080000 /* multiple error */ |
473 | #define MSIIEP_MFSR_ATO 0x00008000 /* PCI local bus timeout */ | | 473 | #define MSIIEP_MFSR_ATO 0x00008000 /* PCI local bus timeout */ |
474 | #define MSIIEP_MFSR_PERR_1 0x00004000 /* parity error [1] */ | | 474 | #define MSIIEP_MFSR_PERR_1 0x00004000 /* parity error [1] */ |
475 | #define MSIIEP_MFSR_PERR_0 0x00002000 /* parity error [0] */ | | 475 | #define MSIIEP_MFSR_PERR_0 0x00002000 /* parity error [0] */ |
476 | #define MSIIEP_MFSR_BM 0x00001000 /* boot mode */ | | 476 | #define MSIIEP_MFSR_BM 0x00001000 /* boot mode */ |
477 | #define MSIIEP_MFSR_C 0x00000800 /* cacheable */ | | 477 | #define MSIIEP_MFSR_C 0x00000800 /* cacheable */ |
478 | #define MSIIEP_MFSR_REQ 0x000000f0 /* request type */ | | 478 | #define MSIIEP_MFSR_REQ 0x000000f0 /* request type */ |
479 | | | 479 | |
480 | #define MSIIEP_MFSR_REQ_NOP 0x00 | | 480 | #define MSIIEP_MFSR_REQ_NOP 0x00 |
481 | #define MSIIEP_MFSR_REQ_RD64 0x10 | | 481 | #define MSIIEP_MFSR_REQ_RD64 0x10 |
482 | #define MSIIEP_MFSR_REQ_RD128 0x20 | | 482 | #define MSIIEP_MFSR_REQ_RD128 0x20 |
483 | #define MSIIEP_MFSR_REQ_RD256 0x40 | | 483 | #define MSIIEP_MFSR_REQ_RD256 0x40 |
484 | #define MSIIEP_MFSR_REQ_WR8 0x90 | | 484 | #define MSIIEP_MFSR_REQ_WR8 0x90 |
485 | #define MSIIEP_MFSR_REQ_WR16 0xa0 | | 485 | #define MSIIEP_MFSR_REQ_WR16 0xa0 |
486 | #define MSIIEP_MFSR_REQ_WR32 0xb0 | | 486 | #define MSIIEP_MFSR_REQ_WR32 0xb0 |
487 | #define MSIIEP_MFSR_REQ_WR64 0xc0 | | 487 | #define MSIIEP_MFSR_REQ_WR64 0xc0 |
488 | | | 488 | |
489 | #define MSIIEP_MFSR_BITS "\177\20" \ | | 489 | #define MSIIEP_MFSR_BITS "\177\20" \ |
490 | "b\37ERR\0" "b\30S\0" "b\27CP\0" "b\23ME\0" "b\17ATO\0" \ | | 490 | "b\37ERR\0" "b\30S\0" "b\27CP\0" "b\23ME\0" "b\17ATO\0" \ |
491 | "b\16PERR1\0" "b\15PERR0\0" "b\14BM\0" "b\13C\0" \ | | 491 | "b\16PERR1\0" "b\15PERR0\0" "b\14BM\0" "b\13C\0" \ |
492 | "f\4\4REQ\0" ":\0(NOP)\0" ":\1(RD64)\0" ":\2(RD128)\0" \ | | 492 | "f\4\4REQ\0" ":\0(NOP)\0" ":\1(RD64)\0" ":\2(RD128)\0" \ |
493 | ":\4(RD256)\0" ":\11(WR8)\0" ":\12(WR16)\0" ":\13(WR32)\0" \ | | 493 | ":\4(RD256)\0" ":\11(WR8)\0" ":\12(WR16)\0" ":\13(WR32)\0" \ |
494 | ":\14(WR64)\0" | | 494 | ":\14(WR64)\0" |