blob: 02e7beaf03e854209309a72e0af173aa34c865ed (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_OPL_OLYMPUS_REGS_H
#define _SYS_OPL_OLYMPUS_REGS_H
#include <sys/machasi.h>
#include <sys/cpu_impl.h>
/*
* This file is cpu dependent.
*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _ASM
/*
* assembler doesn't understand the 'ull' suffix for C constants so
* use the inttypes.h macros and undefine them here for assembly code
*/
#undef INT64_C
#define INT64_C(x) (x)
#undef UINT64_C
#define UINT64_C(x) (x)
#endif /* _ASM */
/*
* Synchronous Fault Physical Address Register
*/
#define OPL_MMU_SFPAR 0x78
/*
* ASI_MCNTL: MEMORY CONTROL Register layout (ASI 0x45, VA 8)
*
* +-------------------------+---------+--------+--------+-----+---------+
* | reserved [63:17] | NC_Cache|fw_fITLB|fw_fDTLB|00000|JPS1_TSBP|
* +-------------------------+---------+--------+--------+-----+---------+
* 16 15 14 13-9 8
* +---------+---------+------+
* |mpg_sITLB|mpg_sDTLB|000000|
* +---------+---------+------+
* 7 6 5-0
*/
#define ASI_MCNTL 0x45
#define LSU_MCNTL 0x8 /* vaddr offset of ASI_MCNTL */
#define MCNTL_FW_FDTLB INT64_C(0x0000000000004000)
#define MCNTL_FW_FITLB INT64_C(0x0000000000008000)
#define MCNTL_JPS1_TSBP INT64_C(0x0000000000000100)
#define MCNTL_MPG_SITLB INT64_C(0x0000000000000080)
#define MCNTL_MPG_SDTLB INT64_C(0x0000000000000040)
#define MCNTL_SPECULATIVE_SHIFT 41 /* bit 41 is speculative mode bit */
/*
* ASI_UGESR: URGENT ERROR STATES layout (ASI 0x4C, VA 0x8)
*
* +--------+---+----+----+---+---+--+--+---+---+-+----+----+----+
* |0[63:23]|CRE|TSBX|TSBP|PST|TST| F| R|SDC|WDT|0|DTLB|ITLB|CORE|
* +--------+---+----+----+---+---+--+--+---+---+-+----+----+----+
* 22 21 20 19 18 17 16 15 14 10 9 8
* +-------+----+---+---+---+
* |INSTEND|PRIV|DAE|IAE|UGE|
* +-------+----+---+---+---+
* 5 4 3 2 1 0
*
*/
#define ASI_UGERSR 0x8
#define UGESR_IAUG_CRE INT64_C(0x0000000000400000)
#define UGESR_IAUG_TSBCTXT INT64_C(0x0000000000200000)
#define UGESR_IUG_TSBP INT64_C(0x0000000000100000)
#define UGESR_IUG_PSTATE INT64_C(0x0000000000080000)
#define UGESR_IUG_TSTATE INT64_C(0x0000000000040000)
#define UGESR_IUG_F INT64_C(0x0000000000020000)
#define UGESR_IUG_R INT64_C(0x0000000000010000)
#define UGESR_AUG_SDC INT64_C(0x0000000000008000)
#define UGESR_IUG_WDT INT64_C(0x0000000000004000)
#define UGESR_IUG_DTLB INT64_C(0x0000000000000400)
#define UGESR_IUG_ITLB INT64_C(0x0000000000000200)
#define UGESR_IUG_COREERR INT64_C(0x0000000000000100)
#define UGESR_PRIV INT64_C(0x0000000000000008)
#define UGESR_MULTI_DAE INT64_C(0x0000000000000004)
#define UGESR_MULTI_IAE INT64_C(0x0000000000000002)
#define UGESR_MULTI_UGE INT64_C(0x0000000000000001)
#define UGESR_CAN_RECOVER (UGESR_IUG_DTLB | \
UGESR_IUG_ITLB | \
UGESR_IUG_COREERR)
#define UGESR_MULTI (UGESR_MULTI_DAE | \
UGESR_MULTI_IAE | \
UGESR_MULTI_UGE)
#define UGESR_NOSYNC_PANIC (UGESR_IAUG_CRE | \
UGESR_AUG_SDC | \
UGESR_MULTI_DAE | \
UGESR_MULTI_IAE | \
UGESR_MULTI_UGE)
/*
* The value means 10000 Mz per 10ms.
*/
#define OPL_UGER_STICK_DIFF 10000
/*
* ASI_ECR: Control of Error Action layout (ASI 0x4C, VA 0x10)
*
* +-------------------------+------+--------+-----+-------+-----------+
* | reserved [63:10] |RTE_UE|RTE_CEDG|0...0|WEAK_ED|UGE_HANDLER|
* +-------------------------+------+--------+-----+-------+-----------+
* 9 8 7 - 2 1 0
*
*/
#define ASI_ECR ASI_AFSR
#define AFSR_ECR 0x10
#define ASI_ECR_RTE_UE INT64_C(0x0000000000000200)
#define ASI_ECR_RTE_CEDG INT64_C(0x0000000000000100)
#define ASI_ECR_WEAK_ED INT64_C(0x0000000000000002)
#define ASI_ECR_UGE_HANDLER INT64_C(0x0000000000000001)
/*
* ASI_L2_CTRL: Level-2 Cache Control Register (ASI 0x6A, VA 0x10)
*
* +---------------------+--------+-----+---------+----+--------+
* | reserved[63:25] |UGE_TRAP|0...0|NUMINSWAY|0..0|U2_FLUSH|
* +---------------------+--------+-----+---------+----+--------+
* 24 23 19 18 16 15 1 0
*
*/
#define ASI_L2_CTRL 0x6A /* L2$ Control Register */
#define ASI_L2_CTRL_RW_ADDR 0x10
#define ASI_L2_CTRL_UGE_TRAP INT64_C(0x0000000001000000)
#define ASI_L2_CTRL_NUMINSWAY_MASK INT64_C(0x0000000000070000)
#define ASI_L2_CTRL_U2_FLUSH INT64_C(0x0000000000000001)
/*
* Synchronous Fault Status Register Layout (ASI 0x50/0x58, VA 0x18)
*
* IMMU and DMMU maintain their own SFSR Register
*
* +----+----+-----+----+--+-----+--+---+-+----+--+--+-----+--+-+
* |TLB#|0..0|index|0..0|MK| EID |UE|UPA|0|mTLB|NC|NF| ASI |TM|0|
* +----+----+-----+----+--+-----+--+---+-+----+--+--+-----+--+-+
* 63 62 61 58 48 46 45 32 31 30 28 27 25 24 23 16 15 14
* +----+-+---+--+-+--+--+
* | FT |E| CT|PR|W|OW|FV|
* +----+-+---+--+-+--+--+
* 13 7 6 5 4 3 2 1 0
*
*/
#define SFSR_MK_UE INT64_C(0x0000400000000000)
#define SFSR_EID_MOD INT64_C(0x0000300000000000)
#define SFSR_EID_SID INT64_C(0x00000FFF00000000)
#define SFSR_UE INT64_C(0x0000000080000000)
#define SFSR_BERR INT64_C(0x0000000040000000)
#define SFSR_TO INT64_C(0x0000000020000000)
#define SFSR_TLB_MUL INT64_C(0x0000000008000000)
#define SFSR_TLB_PRT INT64_C(0x0000000004000000)
#define SFSR_EID_MOD_SHIFT 44
#define SFSR_EID_SID_SHIFT 32
/*
* Error Mark ID: Module Type
*/
#define OPL_ERRID_MEM 0
#define OPL_ERRID_CHANNEL 1
#define OPL_ERRID_CPU 2
#define OPL_ERRID_PATH 3
#define SFSR_ERRS (SFSR_UE | SFSR_BERR | \
SFSR_TO | SFSR_TLB_MUL | \
SFSR_TLB_PRT)
#define SFSR_MEMORY (SFSR_UE | \
SFSR_BERR | \
SFSR_TO)
/*
* Miscellaneous ASI definitions
*/
#define ASI_IIU_INST_TRAP 0x60 /* Instruction breakpoint */
#define ASI_ALL_FLUSH_L1I 0x67 /* Flush Level-1 Inst. cache */
#define ASI_L2_TAG_READ 0x6B /* L2 Diagnostics Tag Read */
#define ASI_L2_TAG_READ_REG 0x6C /* L2 Diagnostics Tag Read Register */
#define ASI_EIDR 0x6E /* Urgent errors */
#define ASI_CACHE_INV 0x74 /* Cache invalidation */
#define ASI_ERR_INJCT 0x76 /* Error injection */
/*
* Address of ASI scratch register. ASI 0x4F
*/
#define OPL_SCRATCHPAD_SAVE_AG1 0x00 /* used for saving global registers */
#define OPL_SCRATCHPAD_SAVE_AG2 0x08 /* used for saving global registers */
#define OPL_SCRATCHPAD_SAVE_AG3 0x10 /* used for saving global registers */
#define OPL_SCRATCHPAD_ERRLOG 0x18 /* keeps EIDR, log's PA & err counter */
#define OPL_SCRATCHPAD_UTSBREG4 0x20
#define OPL_SCRATCHPAD_UTSBREG5 0x28
#define OPL_SCRATCHPAD_UTSBREG6 0x30
#define OPL_SCRATCHPAD_UNUSED7 0x38
/*
* Error log scratchpad register format.
*
* +--------+-------------------+----------+
* |ASI_EIDR| PA to logging buf | # of err |
* +--------+-------------------+----------+
* 63 50 49 6 5 0
*
*/
#define ERRLOG_REG_LOGPA_MASK INT64_C(0x0003ffffffffffc0) /* PA to log */
#define ERRLOG_REG_NUMERR_MASK INT64_C(0x000000000000003f) /* Counter */
#define ERRLOG_REG_EIDR_MASK INT64_C(0x0000000000003fff) /* EIDR */
#define ERRLOG_REG_EIDR_SHIFT 50
#define ERRLOG_REG_ERR_SHIFT 6
#define ERRLOG_REG_EIDR(reg) ((reg >> ERRLOG_REG_EIDR_SHIFT) & \
ERRLOG_REG_EIDR_MASK)
#define ERRLOG_REG_LOGPA(reg) (reg & ERRLOG_REG_LOGPA_MASK)
#define ERRLOG_REG_NUMERR(reg) (reg & ERRLOG_REG_NUMERR_MASK)
#define ERRLOG_BUFSZ 0x2000
#define ERRLOG_SZ (1 << ERRLOG_REG_ERR_SHIFT)
#define ERRLOG_ALLOC_SZ (ERRLOG_BUFSZ * 512)
/*
* Olympus-C default cache parameters.
*/
#define OPL_DCACHE_SIZE 0x20000
#define OPL_DCACHE_LSIZE 0x40
#define OPL_ICACHE_SIZE 0x20000
#define OPL_ICACHE_LSIZE 0x40
#define OPL_ECACHE_SIZE 0x600000
#define OPL_ECACHE_LSIZE 0x100
#define OPL_ECACHE_NWAY 12
#define OPL_ECACHE_SETSIZE 0x80000
/*
* OPL platform has no vac consistent issue. So set it to 8KB.
*/
#define OPL_VAC_SIZE 0x2000
/* these are field offsets for opl_errlog structure */
#define LOG_STICK_OFF 0x0
#define LOG_TL_OFF 0x8
#define LOG_ASI3_OFF 0x10
#define LOG_SFSR_OFF 0x18
#define LOG_SFAR_OFF 0x20
#define LOG_UGER_OFF 0x18
#define LOG_TSTATE_OFF 0x20
#define LOG_TPC_OFF 0x28
#ifndef _ASM
typedef struct opl_errlog {
uint64_t stick;
uint32_t tl;
uint32_t tt;
uint64_t asi3;
union {
struct {
uint64_t sfsr;
union {
uint64_t sfar;
uint64_t sfpar;
} sync_addr;
} sync;
struct {
uint64_t ugesr;
uint64_t tstate;
} ugesr;
} reg;
uint64_t tpc;
} opl_errlog_t;
#endif /* _ASM */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_OPL_OLYMPUS_REGS_H */
|