Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * Hypervisor Software File: error_tables.c | |
5 | * | |
6 | * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. | |
7 | * | |
8 | * - Do no alter or remove copyright notices | |
9 | * | |
10 | * - Redistribution and use of this software in source and binary forms, with | |
11 | * or without modification, are permitted provided that the following | |
12 | * conditions are met: | |
13 | * | |
14 | * - Redistribution of source code must retain the above copyright notice, | |
15 | * this list of conditions and the following disclaimer. | |
16 | * | |
17 | * - Redistribution in binary form must reproduce the above copyright notice, | |
18 | * this list of conditions and the following disclaimer in the | |
19 | * documentation and/or other materials provided with the distribution. | |
20 | * | |
21 | * Neither the name of Sun Microsystems, Inc. or the names of contributors | |
22 | * may be used to endorse or promote products derived from this software | |
23 | * without specific prior written permission. | |
24 | * | |
25 | * This software is provided "AS IS," without a warranty of any kind. | |
26 | * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, | |
27 | * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A | |
28 | * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN | |
29 | * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR | |
30 | * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR | |
31 | * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN | |
32 | * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR | |
33 | * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE | |
34 | * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, | |
35 | * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF | |
36 | * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. | |
37 | * | |
38 | * You acknowledge that this software is not designed, licensed or | |
39 | * intended for use in the design, construction, operation or maintenance of | |
40 | * any nuclear facility. | |
41 | * | |
42 | * ========== Copyright Header End ============================================ | |
43 | */ | |
44 | /* | |
45 | * Copyright 2007 Sun Microsystems, Inc. All rights reserved. | |
46 | * Use is subject to license terms. | |
47 | */ | |
48 | ||
49 | #pragma ident "@(#)error_tables.c 1.13 07/09/11 SMI" | |
50 | ||
51 | #include <error_defs.h> | |
52 | #include <offsets.h> | |
53 | ||
54 | /* | |
55 | * statically allocate buffers FERG/SUN4V reporting | |
56 | */ | |
57 | err_sun4v_rprt_t err_sun4v_rprt[MAX_ERROR_REPORT_BUFS]; | |
58 | err_diag_rprt_t err_diag_rprt[MAX_ERROR_REPORT_BUFS]; | |
59 | ||
60 | /* | |
61 | * common functions | |
62 | */ | |
63 | extern void clear_soc(void); | |
64 | extern void clear_ssi(void); | |
65 | ||
66 | /* | |
67 | * Diagnosis Engine report functions | |
68 | * These are used to populate the ereport sent to the SP for the | |
69 | * FERG. | |
70 | */ | |
71 | extern void dump_store_buffer(void); | |
72 | extern void itlb_dump(void); | |
73 | extern void dtlb_dump(void); | |
74 | extern void dump_scratchpad(void); | |
75 | extern void dump_trapstack(void); | |
76 | extern void dump_dbu_data(void); | |
77 | extern void dump_mra(void); | |
78 | extern void dump_mamu(void); | |
79 | extern void dump_soc(void); | |
80 | extern void dump_soc_fbr(void); | |
81 | extern void dump_tick_compare(void); | |
82 | extern void dump_icache(void); | |
83 | extern void dump_dcache(void); | |
84 | extern void dump_l2_cache(void); | |
85 | extern void dump_reg_ecc(void); | |
86 | extern void dump_ssi(void); | |
87 | extern void dump_no_error(void); | |
88 | extern void dump_hvabort(void); | |
89 | ||
90 | /* | |
91 | * correction functions | |
92 | */ | |
93 | extern void itlb_demap_all(void); | |
94 | extern void itlb_demap_page(void); | |
95 | extern void dtlb_demap_all(void); | |
96 | extern void correct_trapstack(void); | |
97 | extern void correct_tick_compare(void); | |
98 | extern void correct_tick_tccp(void); | |
99 | extern void correct_tick_tccd(void); | |
100 | extern void correct_l2_ildau(void); | |
101 | extern void correct_l2_dldau(void); | |
102 | extern void correct_l2_dldac(void); | |
103 | extern void correct_stb(void); | |
104 | extern void correct_frfc(void); | |
105 | extern void correct_frfu(void); | |
106 | extern void correct_irfc(void); | |
107 | extern void correct_irfu(void); | |
108 | extern void correct_imra(void); | |
109 | extern void correct_dmra(void); | |
110 | extern void correct_scac(void); | |
111 | extern void correct_scau(void); | |
112 | extern void clear_tick_compare(void); | |
113 | extern void reset_soc_fbr(void); | |
114 | ||
115 | /* | |
116 | * sun4v guest report functions | |
117 | * populate the sun4v guest ereport packet with error-specific data | |
118 | */ | |
119 | extern void stb_sun4v_report(void); | |
120 | extern void sca_sun4v_report(void); | |
121 | extern void tick_sun4v_report(void); | |
122 | extern void tsa_sun4v_report(void); | |
123 | extern void l2_sun4v_report(void); | |
124 | extern void irf_sun4v_report(void); | |
125 | extern void frf_sun4v_report(void); | |
126 | extern void soc_sun4v_report(void); | |
127 | ||
128 | /* | |
129 | * storm functions | |
130 | */ | |
131 | extern void l2_ce_storm(void); | |
132 | extern void tick_cmp_storm(void); | |
133 | extern void soc_storm(void); | |
134 | extern void icache_storm(void); | |
135 | extern void dcache_storm(void); | |
136 | extern void dram_storm(void); | |
137 | ||
138 | /* | |
139 | * error-specific print functions | |
140 | */ | |
141 | extern void itlb_print(void); | |
142 | extern void dtlb_print(void); | |
143 | extern void mra_print(void); | |
144 | extern void l2_cache_print(void); | |
145 | extern void print_soc(void); | |
146 | ||
147 | /* | |
148 | * Errata: Filter out Addr parity err synd reported by N2 MCU on scrub (DSU) | |
149 | */ | |
150 | extern void verify_dsu_error(void); | |
151 | ||
152 | /* | |
153 | * S/W error table for use with hvabort | |
154 | */ | |
155 | error_table_entry_t sw_abort_errors[] = { | |
156 | { "HVABORT (asm)", dump_hvabort, null_fcn, null_fcn, null_fcn, | |
157 | null_fcn, /* DEBUG print function */ | |
158 | ERR_FATAL|ERR_ABORT_ASM, | |
159 | SUN4V_NO_REPORT, | |
160 | (SER_TYPE_ABORT << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
161 | ERR_DIAG_ABORT_DATA + ERR_ABORT_DATA_SIZE}, | |
162 | { "HVABORT (C)", dump_hvabort, null_fcn, null_fcn, null_fcn, | |
163 | null_fcn, /* DEBUG print function */ | |
164 | ERR_FATAL|ERR_ABORT_C|ERR_LAST_IN_TABLE, | |
165 | SUN4V_NO_REPORT, | |
166 | (SER_TYPE_ABORT << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
167 | ERR_DIAG_ABORT_DATA + ERR_ABORT_DATA_SIZE}, | |
168 | }; | |
169 | ||
170 | /* | |
171 | * Note: The addresses stored in the tables must be relocated | |
172 | * at runtime before use. | |
173 | */ | |
174 | ||
175 | error_table_entry_t instruction_access_MMU_errors[] = { | |
176 | { "IAMU UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
177 | null_fcn, /* DEBUG print function */ | |
178 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
179 | SUN4V_NO_REPORT, | |
180 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
181 | ERR_DIAG_DATA_OFFSET}, | |
182 | { "ITTM", itlb_dump, null_fcn, itlb_demap_all, null_fcn, | |
183 | itlb_print, /* DEBUG print function */ | |
184 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
185 | SUN4V_NO_REPORT, | |
186 | (SER_TYPE_ITLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
187 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
188 | { "ITTP", itlb_dump, null_fcn, itlb_demap_all, null_fcn, | |
189 | itlb_print, /* DEBUG print function */ | |
190 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
191 | SUN4V_NO_REPORT, | |
192 | (SER_TYPE_ITLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
193 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
194 | { "ITDP", itlb_dump, null_fcn, itlb_demap_all, null_fcn, | |
195 | itlb_print, /* DEBUG print function */ | |
196 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
197 | SUN4V_NO_REPORT, | |
198 | (SER_TYPE_ITLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
199 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
200 | { "ITMU", dump_mra, null_fcn, correct_imra, null_fcn, | |
201 | mra_print, /* DEBUG print function */ | |
202 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
203 | SUN4V_NO_REPORT, | |
204 | (SER_TYPE_ITLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
205 | ERR_DIAG_DATA_OFFSET + ERR_MMU_ERR_REGS_SIZE}, | |
206 | { "ITL2U", dump_l2_cache, l2_sun4v_report, correct_l2_ildau, null_fcn, | |
207 | l2_cache_print, /* DEBUG print function */ | |
208 | ERR_UE|ERR_GL_STORED|ERR_NON_RESUMABLE|ERR_STRANDS_PARKED| | |
209 | ERR_CHECK_LINE_STATE, | |
210 | SUN4V_MEM_RPRT, | |
211 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
212 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
213 | { "ITL2ND", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
214 | l2_cache_print, /* DEBUG print function */ | |
215 | ERR_UE|ERR_GL_STORED|ERR_NON_RESUMABLE| | |
216 | ERR_STRANDS_PARKED|ERR_LAST_IN_TABLE|ERR_NO_DRAM_DUMP, | |
217 | SUN4V_MEM_RPRT, | |
218 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
219 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE} | |
220 | }; | |
221 | ||
222 | ||
223 | error_table_entry_t data_access_MMU_errors[] = { | |
224 | { "DAMU UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
225 | null_fcn, /* DEBUG print function */ | |
226 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
227 | SUN4V_NO_REPORT, | |
228 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
229 | ERR_DIAG_DATA_OFFSET}, | |
230 | { "DTTM", dtlb_dump, null_fcn, dtlb_demap_all, null_fcn, | |
231 | dtlb_print, /* DEBUG print function */ | |
232 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
233 | SUN4V_NO_REPORT, | |
234 | (SER_TYPE_DTLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
235 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
236 | { "DTTP", dtlb_dump, null_fcn, dtlb_demap_all, null_fcn, | |
237 | null_fcn, /* DEBUG print function */ | |
238 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
239 | SUN4V_NO_REPORT, | |
240 | (SER_TYPE_DTLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
241 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
242 | { "DTDP", dtlb_dump, null_fcn, dtlb_demap_all, null_fcn, | |
243 | dtlb_print, /* DEBUG print function */ | |
244 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
245 | SUN4V_NO_REPORT, | |
246 | (SER_TYPE_DTLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
247 | ERR_DIAG_DATA_OFFSET + ERR_TLB_SIZE}, | |
248 | { "DTMU", dump_mra, null_fcn, correct_dmra, null_fcn, | |
249 | mra_print, /* DEBUG print function */ | |
250 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
251 | SUN4V_NO_REPORT, | |
252 | (SER_TYPE_DTLB << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
253 | ERR_DIAG_DATA_OFFSET + ERR_MMU_ERR_REGS_SIZE}, | |
254 | { "DTL2U", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
255 | l2_cache_print, /* DEBUG print function */ | |
256 | ERR_UE|ERR_GL_STORED|ERR_NON_RESUMABLE| | |
257 | ERR_STRANDS_PARKED|ERR_CHECK_LINE_STATE, | |
258 | SUN4V_MEM_RPRT, | |
259 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
260 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
261 | { "DTL2ND", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
262 | l2_cache_print, /* DEBUG print function */ | |
263 | ERR_UE|ERR_GL_STORED|ERR_NON_RESUMABLE| | |
264 | ERR_STRANDS_PARKED|ERR_LAST_IN_TABLE|ERR_NO_DRAM_DUMP, | |
265 | SUN4V_MEM_RPRT, | |
266 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
267 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE} | |
268 | }; | |
269 | ||
270 | error_table_entry_t internal_processor_errors[] = { | |
271 | { "IPE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
272 | null_fcn, /* DEBUG print function */ | |
273 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
274 | SUN4V_NO_REPORT, | |
275 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
276 | ERR_DIAG_DATA_OFFSET}, | |
277 | { "IRFU", dump_reg_ecc, irf_sun4v_report, correct_irfu, null_fcn, | |
278 | null_fcn, /* DEBUG print function */ | |
279 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED|ERR_NON_RESUMABLE, | |
280 | SUN4V_IRF_RPRT, | |
281 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
282 | ERR_DIAG_DATA_OFFSET + ERR_REG_SIZE}, | |
283 | { "IRFC", dump_reg_ecc, null_fcn, correct_irfc, null_fcn, | |
284 | null_fcn, /* DEBUG print function */ | |
285 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
286 | SUN4V_NO_REPORT, | |
287 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
288 | ERR_DIAG_DATA_OFFSET + ERR_REG_SIZE}, | |
289 | { "FRFU", dump_reg_ecc, frf_sun4v_report, correct_frfu, null_fcn, | |
290 | null_fcn, /* DEBUG print function */ | |
291 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED|ERR_NON_RESUMABLE, | |
292 | SUN4V_FRF_RPRT, | |
293 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
294 | ERR_DIAG_DATA_OFFSET + ERR_REG_SIZE}, | |
295 | { "FRFC", dump_reg_ecc, null_fcn, correct_frfc, null_fcn, | |
296 | null_fcn, /* DEBUG print function */ | |
297 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
298 | SUN4V_NO_REPORT, | |
299 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
300 | ERR_DIAG_DATA_OFFSET + ERR_REG_SIZE}, | |
301 | { "SBDLC", dump_store_buffer, null_fcn, correct_stb, null_fcn, | |
302 | null_fcn, /* DEBUG print function */ | |
303 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
304 | SUN4V_NO_REPORT, | |
305 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
306 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
307 | { "SBDLU", dump_store_buffer, stb_sun4v_report, correct_stb, null_fcn, | |
308 | null_fcn, /* DEBUG print function */ | |
309 | ERR_UE|ERR_GL_STORED| | |
310 | ERR_STRANDS_PARKED|ERR_NON_RESUMABLE, | |
311 | SUN4V_MEM_RPRT, | |
312 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
313 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
314 | { "MRAU", dump_mra, null_fcn, correct_dmra, null_fcn, | |
315 | mra_print, /* DEBUG print function */ | |
316 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
317 | SUN4V_NO_REPORT, | |
318 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
319 | ERR_DIAG_DATA_OFFSET + ERR_MMU_ERR_REGS_SIZE}, | |
320 | { "TSAC", dump_trapstack, null_fcn, correct_trapstack, null_fcn, | |
321 | null_fcn, /* DEBUG print function */ | |
322 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
323 | SUN4V_NO_REPORT, | |
324 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
325 | ERR_DIAG_DATA_OFFSET + ERR_TSA_SIZE}, | |
326 | { "TSAU", dump_trapstack, tsa_sun4v_report, null_fcn, null_fcn, | |
327 | null_fcn, /* DEBUG print function */ | |
328 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED|ERR_NON_RESUMABLE, | |
329 | SUN4V_PREG_RPRT, | |
330 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
331 | ERR_DIAG_DATA_OFFSET + ERR_TSA_SIZE}, | |
332 | { "SCAC", dump_scratchpad, null_fcn, correct_scac, null_fcn, | |
333 | null_fcn, /* DEBUG print function */ | |
334 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
335 | SUN4V_NO_REPORT, | |
336 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
337 | ERR_DIAG_DATA_OFFSET + ERR_SCRATCHPAD_SIZE}, | |
338 | { "SCAU", dump_scratchpad, sca_sun4v_report, correct_scau, null_fcn, | |
339 | null_fcn, /* DEBUG print function */ | |
340 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED|ERR_NON_RESUMABLE, | |
341 | SUN4V_ASI_RPRT, | |
342 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
343 | ERR_DIAG_DATA_OFFSET + ERR_SCRATCHPAD_SIZE}, | |
344 | { "TCCP", dump_tick_compare, null_fcn, correct_tick_tccp, null_fcn, | |
345 | null_fcn, /* DEBUG print function */ | |
346 | ERR_CE|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
347 | SUN4V_NO_REPORT, | |
348 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
349 | ERR_DIAG_DATA_OFFSET + ERR_TCA_SIZE}, | |
350 | { "TCUP", dump_tick_compare, tick_sun4v_report, | |
351 | clear_tick_compare, null_fcn, | |
352 | null_fcn, /* DEBUG print function */ | |
353 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
354 | ERR_NON_RESUMABLE|ERR_LAST_IN_TABLE, | |
355 | SUN4V_ASR_RPRT, | |
356 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
357 | ERR_DIAG_DATA_OFFSET + ERR_TCA_SIZE} | |
358 | }; | |
359 | ||
360 | error_table_entry_t hw_corrected_errors[] = { | |
361 | { "HCE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
362 | null_fcn, /* DEBUG print function */ | |
363 | ERR_FATAL, | |
364 | SUN4V_NO_REPORT, | |
365 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
366 | ERR_DIAG_DATA_OFFSET}, | |
367 | { "ICVP", dump_icache, null_fcn, null_fcn, icache_storm, | |
368 | null_fcn, /* DEBUG print function */ | |
369 | ERR_CE, | |
370 | SUN4V_NO_REPORT, | |
371 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
372 | ERR_DIAG_DATA_OFFSET + ERR_ICACHE_SIZE}, | |
373 | { "ICTP", dump_icache, null_fcn, null_fcn, icache_storm, | |
374 | null_fcn, /* DEBUG print function */ | |
375 | ERR_CE, | |
376 | SUN4V_NO_REPORT, | |
377 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
378 | ERR_DIAG_DATA_OFFSET + ERR_ICACHE_SIZE}, | |
379 | { "ICTM", dump_icache, null_fcn, null_fcn, icache_storm, | |
380 | null_fcn, /* DEBUG print function */ | |
381 | ERR_CE, | |
382 | SUN4V_NO_REPORT, | |
383 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
384 | ERR_DIAG_DATA_OFFSET + ERR_ICACHE_SIZE}, | |
385 | { "ICDP", dump_icache, null_fcn, null_fcn, icache_storm, | |
386 | null_fcn, /* DEBUG print function */ | |
387 | ERR_CE, | |
388 | SUN4V_NO_REPORT, | |
389 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
390 | ERR_DIAG_DATA_OFFSET + ERR_ICACHE_SIZE}, | |
391 | { "DCVP", dump_dcache, null_fcn, null_fcn, dcache_storm, | |
392 | null_fcn, /* DEBUG print function */ | |
393 | ERR_CE, | |
394 | SUN4V_NO_REPORT, | |
395 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
396 | ERR_DIAG_DATA_OFFSET + ERR_ICACHE_SIZE}, | |
397 | { "DCTP", dump_dcache, null_fcn, null_fcn, dcache_storm, | |
398 | null_fcn, /* DEBUG print function */ | |
399 | ERR_CE, | |
400 | SUN4V_NO_REPORT, | |
401 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
402 | ERR_DIAG_DATA_OFFSET + 0}, | |
403 | { "DCTM", dump_dcache, null_fcn, null_fcn, dcache_storm, | |
404 | null_fcn, /* DEBUG print function */ | |
405 | ERR_CE, | |
406 | SUN4V_NO_REPORT, | |
407 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
408 | ERR_DIAG_DATA_OFFSET + ERR_DCACHE_SIZE}, | |
409 | { "DCDP", dump_dcache, null_fcn, null_fcn, dcache_storm, | |
410 | null_fcn, /* DEBUG print function */ | |
411 | ERR_CE, | |
412 | SUN4V_NO_REPORT, | |
413 | (SER_TYPE_L1C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
414 | ERR_DIAG_DATA_OFFSET + ERR_DCACHE_SIZE}, | |
415 | { "L2C (HCE)", null_fcn, null_fcn, null_fcn, null_fcn, | |
416 | null_fcn, /* DEBUG print function */ | |
417 | ERR_CE|ERR_USE_L2_CACHE_TABLE|ERR_USE_DRAM_TABLE, | |
418 | SUN4V_NO_REPORT, | |
419 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
420 | 0}, | |
421 | { "SBDPC", dump_store_buffer, null_fcn, null_fcn, null_fcn, | |
422 | null_fcn, /* DEBUG print function */ | |
423 | ERR_CE, | |
424 | SUN4V_NO_REPORT, | |
425 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
426 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
427 | { "SOCC", dump_soc, null_fcn, reset_soc_fbr, null_fcn, | |
428 | null_fcn, /* DEBUG print function */ | |
429 | ERR_CE|ERR_USE_SOC_TABLE|ERR_LAST_IN_TABLE|ERR_CLEAR_SOC, | |
430 | SUN4V_NO_REPORT, | |
431 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
432 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE} | |
433 | }; | |
434 | ||
435 | error_table_entry_t store_errors[] = { | |
436 | { "SE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
437 | null_fcn, /* DEBUG print function */ | |
438 | ERR_FATAL, | |
439 | SUN4V_NO_REPORT, | |
440 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
441 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
442 | { "SBDIOU", dump_store_buffer, stb_sun4v_report, null_fcn, null_fcn, | |
443 | null_fcn, /* DEBUG print function */ | |
444 | ERR_UE|ERR_GL_STORED|ERR_NON_RESUMABLE, | |
445 | SUN4V_MEM_RPRT, | |
446 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_DEFERRED_NONRESUMABLE, | |
447 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
448 | { "SBAPP", dump_store_buffer, stb_sun4v_report, null_fcn, null_fcn, | |
449 | null_fcn, /* DEBUG print function */ | |
450 | ERR_FATAL|ERR_GL_STORED|ERR_NON_RESUMABLE|ERR_LAST_IN_TABLE, | |
451 | SUN4V_MEM_RPRT, | |
452 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_DEFERRED_NONRESUMABLE, | |
453 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE} | |
454 | }; | |
455 | ||
456 | error_table_entry_t data_access_errors[] = { | |
457 | { "DAE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
458 | null_fcn, /* DEBUG print function */ | |
459 | #ifdef DEBUG_LEGION | |
460 | ERR_IO_PROT| | |
461 | #endif | |
462 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
463 | SUN4V_NO_REPORT, | |
464 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
465 | ERR_DIAG_DATA_OFFSET}, | |
466 | { "DCL2U", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
467 | null_fcn, /* DEBUG print function */ | |
468 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
469 | ERR_CHECK_LINE_STATE|ERR_IO_PROT|ERR_NON_RESUMABLE| | |
470 | ERR_CHECK_DAU_TYPE, | |
471 | SUN4V_MEM_RPRT, | |
472 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
473 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
474 | { "DCL2ND", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
475 | null_fcn, /* DEBUG print function */ | |
476 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
477 | ERR_NON_RESUMABLE|ERR_NO_DRAM_DUMP, | |
478 | SUN4V_MEM_RPRT, | |
479 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
480 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE}, | |
481 | { "DAE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
482 | null_fcn, /* DEBUG print function */ | |
483 | ERR_FATAL, | |
484 | SUN4V_NO_REPORT, | |
485 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
486 | ERR_DIAG_DATA_OFFSET}, | |
487 | { "NCU PIO", dump_soc, soc_sun4v_report, clear_soc, null_fcn, | |
488 | print_soc, /* DEBUG print function */ | |
489 | ERR_IO_PROT|ERR_UE|ERR_GL_STORED| | |
490 | ERR_STRANDS_PARKED|ERR_NON_RESUMABLE|ERR_LAST_IN_TABLE, | |
491 | SUN4V_ASI_RPRT, | |
492 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
493 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
494 | }; | |
495 | ||
496 | error_table_entry_t sw_recoverable_errors[] = { | |
497 | { "SRE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
498 | null_fcn, /* DEBUG print function */ | |
499 | ERR_FATAL, | |
500 | SUN4V_NO_REPORT, | |
501 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
502 | ERR_DIAG_DATA_OFFSET}, | |
503 | { "ITL2C", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
504 | null_fcn, /* DEBUG print function */ | |
505 | ERR_CE, | |
506 | SUN4V_NO_REPORT, | |
507 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
508 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
509 | { "ICL2C", dump_l2_cache, null_fcn, correct_l2_dldac, icache_storm, | |
510 | null_fcn, /* DEBUG print function */ | |
511 | ERR_CE, | |
512 | SUN4V_NO_REPORT, | |
513 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
514 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
515 | { "DTL2C", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
516 | null_fcn, /* DEBUG print function */ | |
517 | ERR_CE, | |
518 | SUN4V_NO_REPORT, | |
519 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
520 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
521 | { "DCL2C", dump_l2_cache, null_fcn, correct_l2_dldac, dcache_storm, | |
522 | null_fcn, /* DEBUG print function */ | |
523 | ERR_CE, | |
524 | SUN4V_NO_REPORT, | |
525 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
526 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
527 | { "SRE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
528 | null_fcn, /* DEBUG print function */ | |
529 | ERR_FATAL, | |
530 | SUN4V_NO_REPORT, | |
531 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
532 | ERR_DIAG_DATA_OFFSET}, | |
533 | { "SBDPU", dump_store_buffer, null_fcn, correct_stb, null_fcn, | |
534 | null_fcn, /* DEBUG print function */ | |
535 | ERR_UE, | |
536 | SUN4V_NO_REPORT, | |
537 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
538 | ERR_DIAG_DATA_OFFSET + ERR_STB_SIZE}, | |
539 | { "MAMU", dump_mamu, null_fcn, null_fcn, null_fcn, | |
540 | null_fcn, /* DEBUG print function */ | |
541 | ERR_UE, | |
542 | SUN4V_NO_REPORT, | |
543 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
544 | ERR_DIAG_DATA_OFFSET + ERR_MAMU_SIZE}, | |
545 | { "MAL2C", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
546 | null_fcn, /* DEBUG print function */ | |
547 | ERR_CE, | |
548 | SUN4V_NO_REPORT, | |
549 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
550 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
551 | { "MAL2U", dump_l2_cache, null_fcn, correct_l2_dldau, null_fcn, | |
552 | null_fcn, /* DEBUG print function */ | |
553 | ERR_UE|ERR_CHECK_DAU_TYPE, | |
554 | SUN4V_NO_REPORT, | |
555 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
556 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
557 | { "MAL2ND", dump_l2_cache, null_fcn, null_fcn, null_fcn, | |
558 | null_fcn, /* DEBUG print function */ | |
559 | ERR_UE|ERR_NO_DRAM_DUMP, | |
560 | SUN4V_NO_REPORT, | |
561 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
562 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE}, | |
563 | { "CWQL2C", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
564 | null_fcn, /* DEBUG print function */ | |
565 | ERR_CE, | |
566 | SUN4V_NO_REPORT, | |
567 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
568 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
569 | { "CWQL2U", dump_l2_cache, null_fcn, correct_l2_dldau, null_fcn, | |
570 | null_fcn, /* DEBUG print function */ | |
571 | ERR_UE|ERR_CHECK_DAU_TYPE, | |
572 | SUN4V_NO_REPORT, | |
573 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
574 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
575 | { "CWQL2ND", dump_l2_cache, null_fcn, null_fcn, null_fcn, | |
576 | null_fcn, /* DEBUG print function */ | |
577 | ERR_UE|ERR_NO_DRAM_DUMP, | |
578 | SUN4V_NO_REPORT, | |
579 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
580 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE}, | |
581 | { "TCCD", dump_tick_compare, null_fcn, correct_tick_tccd, | |
582 | tick_cmp_storm, | |
583 | null_fcn, /* DEBUG print function */ | |
584 | ERR_CE, | |
585 | SUN4V_NO_REPORT, | |
586 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
587 | ERR_DIAG_DATA_OFFSET + ERR_TCA_SIZE}, | |
588 | { "TCUD", dump_tick_compare, tick_sun4v_report, | |
589 | clear_tick_compare, null_fcn, | |
590 | null_fcn, /* DEBUG print function */ | |
591 | ERR_UE, | |
592 | SUN4V_ASR_RPRT, | |
593 | (SER_TYPE_CMP << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
594 | ERR_DIAG_DATA_OFFSET + ERR_TCA_SIZE}, | |
595 | { "L2U", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
596 | null_fcn, /* DEBUG print function */ | |
597 | ERR_UE|ERR_USE_L2_CACHE_TABLE|ERR_CHECK_LINE_STATE, | |
598 | SUN4V_MEM_RPRT, | |
599 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
600 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
601 | { "L2ND", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
602 | null_fcn, /* DEBUG print function */ | |
603 | ERR_UE|ERR_NO_DRAM_DUMP, | |
604 | SUN4V_MEM_RPRT, | |
605 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
606 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE}, | |
607 | { "SRE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
608 | null_fcn, /* DEBUG print function */ | |
609 | ERR_FATAL, | |
610 | SUN4V_NO_REPORT, | |
611 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
612 | ERR_DIAG_DATA_OFFSET}, | |
613 | { "SOCU SRE", dump_soc, null_fcn, clear_soc, null_fcn, | |
614 | print_soc, /* DEBUG print function */ | |
615 | ERR_IO_PROT|ERR_UE, | |
616 | SUN4V_NO_REPORT, | |
617 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
618 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
619 | { "L2C (SRE)", null_fcn, null_fcn, null_fcn, null_fcn, | |
620 | null_fcn, /* DEBUG print function */ | |
621 | ERR_CE|ERR_USE_L2_CACHE_TABLE|ERR_LAST_IN_TABLE, | |
622 | SUN4V_NO_REPORT, | |
623 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
624 | 0} | |
625 | }; | |
626 | ||
627 | error_table_entry_t instruction_access_errors[] = { | |
628 | { "IAE UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
629 | null_fcn, /* DEBUG print function */ | |
630 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
631 | SUN4V_NO_REPORT, | |
632 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
633 | ERR_DIAG_DATA_OFFSET}, | |
634 | { "ICL2U", dump_l2_cache, l2_sun4v_report, correct_l2_ildau, null_fcn, | |
635 | null_fcn, /* DEBUG print function */ | |
636 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
637 | ERR_CHECK_LINE_STATE|ERR_NON_RESUMABLE| | |
638 | ERR_CHECK_DAU_TYPE, | |
639 | SUN4V_MEM_RPRT, | |
640 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
641 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
642 | { "ICL2ND", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
643 | null_fcn, /* DEBUG print function */ | |
644 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
645 | ERR_LAST_IN_TABLE|ERR_NON_RESUMABLE|ERR_NO_DRAM_DUMP, | |
646 | SUN4V_MEM_RPRT, | |
647 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
648 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE - ERR_DRAM_CONTENTS_SIZE} | |
649 | }; | |
650 | ||
651 | /* | |
652 | * Boot ROM (SSI) errors | |
653 | * | |
654 | * We could just ignore these as per previous platforms but that | |
655 | * seems gratuitously lazy, even for us, so we will just report | |
656 | * them to the SP. | |
657 | */ | |
658 | error_table_entry_t ssi_errors[] = { | |
659 | { "TOUT", dump_ssi, null_fcn, clear_ssi, null_fcn, | |
660 | null_fcn, /* DEBUG print function */ | |
661 | ERR_CE, | |
662 | SUN4V_NO_REPORT, | |
663 | (SER_TYPE_SSI << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
664 | ERR_DIAG_DATA_OFFSET + ERR_SSI_SIZE}, | |
665 | { "PARITY", dump_ssi, null_fcn, clear_ssi, null_fcn, | |
666 | null_fcn, /* DEBUG print function */ | |
667 | ERR_CE|ERR_LAST_IN_TABLE, | |
668 | SUN4V_NO_REPORT, | |
669 | (SER_TYPE_SSI << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
670 | ERR_DIAG_DATA_OFFSET + ERR_SSI_SIZE} | |
671 | }; | |
672 | ||
673 | /* | |
674 | * We use the following sub-table to distinquish between the various | |
675 | * L2 errors. This table is based on the L2 ESR | |
676 | */ | |
677 | error_table_entry_t l2c_errors[] = { | |
678 | /* | |
679 | * Note: L2 ESR entries start at bit[34] | |
680 | */ | |
681 | { "LVC", dump_l2_cache, null_fcn, null_fcn, null_fcn, | |
682 | null_fcn, /* DEBUG print function */ | |
683 | ERR_CE, | |
684 | SUN4V_NO_REPORT, | |
685 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
686 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
687 | /* VEU bit */ | |
688 | { "L2C UNKNOWN (1)", dump_no_error, null_fcn, null_fcn, null_fcn, | |
689 | null_fcn, /* DEBUG print function */ | |
690 | ERR_FATAL, | |
691 | SUN4V_NO_REPORT, | |
692 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
693 | ERR_DIAG_DATA_OFFSET}, | |
694 | /* VEC bit */ | |
695 | { "L2C UNKNOWN (2)", dump_no_error, null_fcn, null_fcn, null_fcn, | |
696 | null_fcn, /* DEBUG print function */ | |
697 | ERR_FATAL, | |
698 | SUN4V_NO_REPORT, | |
699 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
700 | ERR_DIAG_DATA_OFFSET}, | |
701 | { "DSU", dump_l2_cache, l2_sun4v_report, verify_dsu_error, null_fcn, | |
702 | null_fcn, /* DEBUG print function */ | |
703 | ERR_UE|ERR_USE_DRAM_TABLE, | |
704 | SUN4V_MEM_RPRT, | |
705 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
706 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
707 | { "DSC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
708 | null_fcn, /* DEBUG print function */ | |
709 | ERR_CE|ERR_USE_DRAM_TABLE, | |
710 | SUN4V_NO_REPORT, | |
711 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
712 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
713 | { "DRU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
714 | null_fcn, /* DEBUG print function */ | |
715 | ERR_UE, | |
716 | SUN4V_MEM_RPRT, | |
717 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
718 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
719 | { "DRC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
720 | null_fcn, /* DEBUG print function */ | |
721 | ERR_CE, | |
722 | SUN4V_NO_REPORT, | |
723 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
724 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
725 | { "DAU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
726 | null_fcn, /* DEBUG print function */ | |
727 | ERR_UE|ERR_USE_DRAM_TABLE, | |
728 | SUN4V_MEM_RPRT, | |
729 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
730 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
731 | { "DAC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
732 | null_fcn, /* DEBUG print function */ | |
733 | ERR_CE|ERR_CHECK_LINE_STATE|ERR_USE_DRAM_TABLE, | |
734 | SUN4V_NO_REPORT, | |
735 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
736 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
737 | { "LVF", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
738 | null_fcn, /* DEBUG print function */ | |
739 | ERR_UE|ERR_CHECK_LINE_STATE|ERR_NON_RESUMABLE, | |
740 | SUN4V_MEM_RPRT, | |
741 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
742 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
743 | { "LRF", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
744 | null_fcn, /* DEBUG print function */ | |
745 | ERR_UE|ERR_NON_RESUMABLE, | |
746 | SUN4V_MEM_RPRT, | |
747 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
748 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
749 | { "LTC", dump_l2_cache, l2_sun4v_report, null_fcn, l2_ce_storm, | |
750 | null_fcn, /* DEBUG print function */ | |
751 | ERR_CE, | |
752 | SUN4V_NO_REPORT, | |
753 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
754 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
755 | { "LDSU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
756 | null_fcn, /* DEBUG print function */ | |
757 | ERR_UE|ERR_CHECK_LINE_STATE, | |
758 | SUN4V_MEM_RPRT, | |
759 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
760 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
761 | { "LDSC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
762 | null_fcn, /* DEBUG print function */ | |
763 | ERR_CE, | |
764 | SUN4V_NO_REPORT, | |
765 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
766 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
767 | { "LDRU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
768 | null_fcn, /* DEBUG print function */ | |
769 | ERR_UE|ERR_CHECK_LINE_STATE, | |
770 | SUN4V_MEM_RPRT, | |
771 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
772 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
773 | { "LDRC", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
774 | null_fcn, /* DEBUG print function */ | |
775 | ERR_CE, | |
776 | SUN4V_NO_REPORT, | |
777 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
778 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
779 | { "LDWU", dump_l2_cache, l2_sun4v_report, null_fcn, null_fcn, | |
780 | null_fcn, /* DEBUG print function */ | |
781 | ERR_UE|ERR_CHECK_LINE_STATE, | |
782 | SUN4V_MEM_RPRT, | |
783 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
784 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
785 | { "LDWC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
786 | null_fcn, /* DEBUG print function */ | |
787 | ERR_CE, | |
788 | SUN4V_NO_REPORT, | |
789 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
790 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
791 | { "LDAU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
792 | null_fcn, /* DEBUG print function */ | |
793 | ERR_UE|ERR_CHECK_LINE_STATE, | |
794 | SUN4V_MEM_RPRT, | |
795 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
796 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
797 | { "LDAC", dump_l2_cache, null_fcn, correct_l2_dldac, l2_ce_storm, | |
798 | null_fcn, /* DEBUG print function */ | |
799 | ERR_CE|ERR_LAST_IN_TABLE, | |
800 | SUN4V_NO_REPORT, | |
801 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
802 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE} | |
803 | }; | |
804 | ||
805 | /* | |
806 | * We use the following sub-table to distinquish between the various | |
807 | * DRAM errors. This table is based on the DRAM ESR | |
808 | */ | |
809 | error_table_entry_t dram_errors[] = { | |
810 | /* | |
811 | * Note: DRAM ESR entries start at bit[54] | |
812 | */ | |
813 | { "FBR", dump_soc_fbr, null_fcn, reset_soc_fbr, dram_storm, | |
814 | null_fcn, /* DEBUG print function */ | |
815 | ERR_CE|ERR_CLEAR_AMB_ERRORS, | |
816 | SUN4V_NO_REPORT, | |
817 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
818 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
819 | { "FBU", dump_l2_cache, null_fcn, null_fcn, null_fcn, | |
820 | null_fcn, /* DEBUG print function */ | |
821 | ERR_UE|ERR_NON_RESUMABLE|ERR_CLEAR_AMB_ERRORS|ERR_FORCE_SIR, | |
822 | SUN4V_MEM_RPRT, | |
823 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
824 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
825 | { "MEB", dump_no_error, null_fcn, null_fcn, null_fcn, | |
826 | null_fcn, /* DEBUG print function */ | |
827 | ERR_FATAL, | |
828 | SUN4V_NO_REPORT, | |
829 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
830 | ERR_DIAG_DATA_OFFSET}, | |
831 | { "DBU", dump_dbu_data, null_fcn, null_fcn, null_fcn, | |
832 | null_fcn, /* DEBUG print function */ | |
833 | ERR_FATAL, | |
834 | SUN4V_NO_REPORT, | |
835 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
836 | ERR_DIAG_DATA_OFFSET + (ERR_TRAP_REGS_SIZE * MAXTL)}, | |
837 | { "DSU", dump_l2_cache, l2_sun4v_report, verify_dsu_error, null_fcn, | |
838 | null_fcn, /* DEBUG print function */ | |
839 | ERR_UE, | |
840 | SUN4V_MEM_RPRT, | |
841 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
842 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
843 | { "DSC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
844 | null_fcn, /* DEBUG print function */ | |
845 | ERR_CE, | |
846 | SUN4V_NO_REPORT, | |
847 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
848 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
849 | { "DAU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
850 | null_fcn, /* DEBUG print function */ | |
851 | ERR_UE, | |
852 | SUN4V_MEM_RPRT, | |
853 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
854 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
855 | { "DAC", dump_l2_cache, null_fcn, null_fcn, l2_ce_storm, | |
856 | null_fcn, /* DEBUG print function */ | |
857 | ERR_CE|ERR_CHECK_LINE_STATE|ERR_LAST_IN_TABLE, | |
858 | SUN4V_NO_REPORT, | |
859 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
860 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE}, | |
861 | }; | |
862 | ||
863 | error_table_entry_t precise_dau_errors[] = { | |
864 | { "DAU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
865 | null_fcn, /* DEBUG print function */ | |
866 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
867 | ERR_CHECK_LINE_STATE|ERR_IO_PROT|ERR_LAST_IN_TABLE, | |
868 | SUN4V_MEM_RPRT, | |
869 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UE_RESUMABLE, | |
870 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE} | |
871 | }; | |
872 | ||
873 | error_table_entry_t precise_ldau_errors[] = { | |
874 | { "LDAU", dump_l2_cache, l2_sun4v_report, correct_l2_dldau, null_fcn, | |
875 | null_fcn, /* DEBUG print function */ | |
876 | ERR_UE|ERR_GL_STORED|ERR_STRANDS_PARKED|ERR_NON_RESUMABLE| | |
877 | ERR_CHECK_LINE_STATE|ERR_IO_PROT|ERR_LAST_IN_TABLE, | |
878 | SUN4V_MEM_RPRT, | |
879 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_PRECISE_NONRESUMABLE, | |
880 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE} | |
881 | }; | |
882 | ||
883 | /* | |
884 | * These are for CWQ/MAU errors which cause sw-recoverable_error trap. | |
885 | * These traps will always occur in HPRIV mode as the hypervisor | |
886 | * must access the CWQ/MAU hardware on behalf of the guest. However | |
887 | * we do not want to terminate when we encounter one of these errors | |
888 | * so these do not have the ERR_NON_RESUMABLE flag set. | |
889 | */ | |
890 | error_table_entry_t disrupting_dau_errors[] = { | |
891 | { "DAU", dump_l2_cache, null_fcn, correct_l2_dldau, null_fcn, | |
892 | null_fcn, /* DEBUG print function */ | |
893 | ERR_UE|ERR_CHECK_LINE_STATE| | |
894 | ERR_LAST_IN_TABLE, | |
895 | SUN4V_NO_REPORT, | |
896 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
897 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE} | |
898 | }; | |
899 | ||
900 | error_table_entry_t disrupting_ldau_errors[] = { | |
901 | { "LDAU", dump_l2_cache, null_fcn, correct_l2_dldau, null_fcn, | |
902 | null_fcn, /* DEBUG print function */ | |
903 | ERR_UE|ERR_CHECK_LINE_STATE| | |
904 | ERR_LAST_IN_TABLE, | |
905 | SUN4V_NO_REPORT, | |
906 | (SER_TYPE_L2C << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
907 | ERR_DIAG_DATA_OFFSET + ERR_L2_SIZE} | |
908 | }; | |
909 | ||
910 | /* | |
911 | * We use the following sub-table to distinquish between the various | |
912 | * SOC errors. This table is based on the SOC ESR | |
913 | */ | |
914 | error_table_entry_t soc_errors[] = { | |
915 | { "SIINIUCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
916 | print_soc, /* DEBUG print function */ | |
917 | ERR_FATAL, | |
918 | SUN4V_NO_REPORT, | |
919 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
920 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
921 | { "SIIDMUCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
922 | print_soc, /* DEBUG print function */ | |
923 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
924 | SUN4V_NO_REPORT, | |
925 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
926 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
927 | { "SIINIUCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
928 | print_soc, /* DEBUG print function */ | |
929 | ERR_CE, | |
930 | SUN4V_NO_REPORT, | |
931 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
932 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
933 | { "SIIDMUCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
934 | print_soc, /* DEBUG print function */ | |
935 | ERR_CE, | |
936 | SUN4V_NO_REPORT, | |
937 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
938 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
939 | { "SIINIUAPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
940 | print_soc, /* DEBUG print function */ | |
941 | ERR_FATAL, | |
942 | SUN4V_NO_REPORT, | |
943 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
944 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
945 | { "SIIDMUDPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
946 | print_soc, /* DEBUG print function */ | |
947 | ERR_FATAL, | |
948 | SUN4V_NO_REPORT, | |
949 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
950 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
951 | { "SIINIUDPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
952 | print_soc, /* DEBUG print function */ | |
953 | ERR_FATAL, | |
954 | SUN4V_NO_REPORT, | |
955 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
956 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
957 | { "SIIDMUAPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
958 | print_soc, /* DEBUG print function */ | |
959 | ERR_FATAL, | |
960 | SUN4V_NO_REPORT, | |
961 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
962 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
963 | { "DMUINTERNAL", dump_soc, null_fcn, clear_soc, null_fcn, | |
964 | print_soc, /* DEBUG print function */ | |
965 | ERR_FATAL, | |
966 | SUN4V_NO_REPORT, | |
967 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
968 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
969 | { "DMUNCUCREDIT", dump_soc, null_fcn, clear_soc, null_fcn, | |
970 | print_soc, /* DEBUG print function */ | |
971 | ERR_FATAL, | |
972 | SUN4V_NO_REPORT, | |
973 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
974 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
975 | { "DMUCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
976 | print_soc, /* DEBUG print function */ | |
977 | ERR_CE, | |
978 | SUN4V_NO_REPORT, | |
979 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
980 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
981 | { "DMUCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
982 | print_soc, /* DEBUG print function */ | |
983 | ERR_FATAL, | |
984 | SUN4V_NO_REPORT, | |
985 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
986 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
987 | { "DMUSIICREDIT", dump_soc, null_fcn, clear_soc, null_fcn, | |
988 | print_soc, /* DEBUG print function */ | |
989 | ERR_FATAL, | |
990 | SUN4V_NO_REPORT, | |
991 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
992 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
993 | { "DMUDATAPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
994 | print_soc, /* DEBUG print function */ | |
995 | ERR_FATAL, | |
996 | SUN4V_NO_REPORT, | |
997 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
998 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
999 | { "NCUDATAPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
1000 | print_soc, /* DEBUG print function */ | |
1001 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
1002 | SUN4V_NO_REPORT, | |
1003 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1004 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1005 | { "NCUMONDOTABLE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1006 | print_soc, /* DEBUG print function */ | |
1007 | ERR_FATAL, | |
1008 | SUN4V_NO_REPORT, | |
1009 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1010 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1011 | { "NCUMONDOFIFO", dump_soc, null_fcn, clear_soc, null_fcn, | |
1012 | print_soc, /* DEBUG print function */ | |
1013 | ERR_FATAL, | |
1014 | SUN4V_NO_REPORT, | |
1015 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1016 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1017 | { "NCUINTTABLE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1018 | print_soc, /* DEBUG print function */ | |
1019 | ERR_FATAL, | |
1020 | SUN4V_NO_REPORT, | |
1021 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1022 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1023 | { "NCUPCXDATA", dump_soc, null_fcn, clear_soc, null_fcn, | |
1024 | print_soc, /* DEBUG print function */ | |
1025 | ERR_FATAL, | |
1026 | SUN4V_NO_REPORT, | |
1027 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1028 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1029 | { "NCUPCXUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1030 | print_soc, /* DEBUG print function */ | |
1031 | ERR_FATAL, | |
1032 | SUN4V_NO_REPORT, | |
1033 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1034 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1035 | { "NCUCPXUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1036 | print_soc, /* DEBUG print function */ | |
1037 | ERR_FATAL, | |
1038 | SUN4V_NO_REPORT, | |
1039 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1040 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1041 | { "NCUDMUUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1042 | print_soc, /* DEBUG print function */ | |
1043 | ERR_FATAL, | |
1044 | SUN4V_NO_REPORT, | |
1045 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1046 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1047 | { "NCUCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1048 | print_soc, /* DEBUG print function */ | |
1049 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED, | |
1050 | SUN4V_NO_REPORT, | |
1051 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1052 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1053 | { "NCUCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
1054 | print_soc, /* DEBUG print function */ | |
1055 | ERR_CE, | |
1056 | SUN4V_NO_REPORT, | |
1057 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1058 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1059 | { "SOC UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
1060 | print_soc, /* DEBUG print function */ | |
1061 | ERR_FATAL, | |
1062 | SUN4V_NO_REPORT, | |
1063 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1064 | ERR_DIAG_DATA_OFFSET}, | |
1065 | { "SIOCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1066 | print_soc, /* DEBUG print function */ | |
1067 | ERR_FATAL, | |
1068 | SUN4V_NO_REPORT, | |
1069 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1070 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1071 | { "SIOCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
1072 | print_soc, /* DEBUG print function */ | |
1073 | ERR_CE, | |
1074 | SUN4V_NO_REPORT, | |
1075 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1076 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1077 | { "NIUCTAGCE", dump_soc, null_fcn, clear_soc, soc_storm, | |
1078 | print_soc, /* DEBUG print function */ | |
1079 | ERR_CE, | |
1080 | SUN4V_NO_REPORT, | |
1081 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1082 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1083 | { "NIUCTAGUE", dump_soc, null_fcn, clear_soc, null_fcn, | |
1084 | print_soc, /* DEBUG print function */ | |
1085 | ERR_FATAL, | |
1086 | SUN4V_NO_REPORT, | |
1087 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1088 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1089 | { "NIUDATAPARITY", dump_soc, null_fcn, clear_soc, null_fcn, | |
1090 | print_soc, /* DEBUG print function */ | |
1091 | ERR_FATAL, | |
1092 | SUN4V_NO_REPORT, | |
1093 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1094 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1095 | { "SOC UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
1096 | print_soc, /* DEBUG print function */ | |
1097 | ERR_FATAL, | |
1098 | SUN4V_NO_REPORT, | |
1099 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1100 | ERR_DIAG_DATA_OFFSET}, | |
1101 | { "MCU0FBR", dump_soc_fbr, null_fcn, reset_soc_fbr, null_fcn, | |
1102 | print_soc, /* DEBUG print function */ | |
1103 | ERR_CE|ERR_CLEAR_AMB_ERRORS|ERR_CLEAR_SOC, | |
1104 | SUN4V_NO_REPORT, | |
1105 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1106 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1107 | { "MCU0ECC", dump_soc, null_fcn, clear_soc, soc_storm, | |
1108 | print_soc, /* DEBUG print function */ | |
1109 | ERR_CE, | |
1110 | SUN4V_NO_REPORT, | |
1111 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1112 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1113 | { "SOC UNKNOWN", dump_no_error, null_fcn, null_fcn, soc_storm, | |
1114 | print_soc, /* DEBUG print function */ | |
1115 | ERR_FATAL, | |
1116 | SUN4V_NO_REPORT, | |
1117 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1118 | ERR_DIAG_DATA_OFFSET}, | |
1119 | { "MCU1FBR", dump_soc_fbr, null_fcn, reset_soc_fbr, null_fcn, | |
1120 | print_soc, /* DEBUG print function */ | |
1121 | ERR_CE|ERR_CLEAR_AMB_ERRORS|ERR_CLEAR_SOC, | |
1122 | SUN4V_NO_REPORT, | |
1123 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1124 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1125 | { "MCU1ECC", dump_soc, null_fcn, clear_soc, soc_storm, | |
1126 | print_soc, /* DEBUG print function */ | |
1127 | ERR_CE, | |
1128 | SUN4V_NO_REPORT, | |
1129 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1130 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1131 | { "SOC UNKNOWN", dump_no_error, null_fcn, null_fcn, soc_storm, | |
1132 | print_soc, /* DEBUG print function */ | |
1133 | ERR_FATAL, | |
1134 | SUN4V_NO_REPORT, | |
1135 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1136 | ERR_DIAG_DATA_OFFSET}, | |
1137 | { "MCU2FBR", dump_soc_fbr, null_fcn, reset_soc_fbr, null_fcn, | |
1138 | print_soc, /* DEBUG print function */ | |
1139 | ERR_CE|ERR_CLEAR_AMB_ERRORS|ERR_CLEAR_SOC, | |
1140 | SUN4V_NO_REPORT, | |
1141 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1142 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1143 | { "MCU2ECC", dump_soc, null_fcn, clear_soc, soc_storm, | |
1144 | print_soc, /* DEBUG print function */ | |
1145 | ERR_CE, | |
1146 | SUN4V_NO_REPORT, | |
1147 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1148 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1149 | { "SOC UNKNOWN", dump_no_error, null_fcn, null_fcn, null_fcn, | |
1150 | print_soc, /* DEBUG print function */ | |
1151 | ERR_FATAL, | |
1152 | SUN4V_NO_REPORT, | |
1153 | (SER_TYPE_UNDEF << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1154 | ERR_DIAG_DATA_OFFSET}, | |
1155 | { "MCU3FBR", dump_soc_fbr, null_fcn, reset_soc_fbr, null_fcn, | |
1156 | print_soc, /* DEBUG print function */ | |
1157 | ERR_CE|ERR_CLEAR_AMB_ERRORS|ERR_CLEAR_SOC, | |
1158 | SUN4V_NO_REPORT, | |
1159 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1160 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1161 | { "MCU3ECC", dump_soc, null_fcn, clear_soc, soc_storm, | |
1162 | print_soc, /* DEBUG print function */ | |
1163 | ERR_CE, | |
1164 | SUN4V_NO_REPORT, EDESC_UNDEF, | |
1165 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE}, | |
1166 | { "NCUDMUCREDIT", dump_soc, null_fcn, clear_soc, null_fcn, | |
1167 | print_soc, /* DEBUG print function */ | |
1168 | ERR_FATAL|ERR_LAST_IN_TABLE, | |
1169 | SUN4V_NO_REPORT, | |
1170 | (SER_TYPE_SOC << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1171 | ERR_DIAG_DATA_OFFSET + ERR_SOC_SIZE} | |
1172 | }; | |
1173 | ||
1174 | error_table_entry_t dbu_errors[] = { | |
1175 | { "DBU", dump_dbu_data, null_fcn, null_fcn, null_fcn, | |
1176 | null_fcn, /* DEBUG print function */ | |
1177 | ERR_FATAL|ERR_GL_STORED|ERR_STRANDS_PARKED| | |
1178 | ERR_IO_PROT|ERR_NON_RESUMABLE| | |
1179 | ERR_LAST_IN_TABLE, | |
1180 | SUN4V_NO_REPORT, | |
1181 | (SER_TYPE_DRAM << SER_TYPE_SHIFT) | EDESC_UNDEF, | |
1182 | ERR_DIAG_DATA_OFFSET + (ERR_TRAP_REGS_SIZE * MAXTL)} | |
1183 | }; | |
1184 | ||
1185 | /* | |
1186 | * ECC syndrome table for register file errors | |
1187 | */ | |
1188 | ecc_syndrome_table_entry irf_ecc_syndrome_table[] = { | |
1189 | /* 0x0 - 0xf */ | |
1190 | ECC_ne, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1191 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1192 | /* 0x10 - 0x1f */ | |
1193 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1194 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1195 | /* 0x20 - 0x2f */ | |
1196 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1197 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1198 | /* 0x30 - 0x3f */ | |
1199 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1200 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1201 | /* 0x40 - 0x4f */ | |
1202 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1203 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1204 | /* 0x50 - 0x5f */ | |
1205 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1206 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1207 | /* 0x60 - 0x6f */ | |
1208 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1209 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1210 | /* 0x70 - 0x7f */ | |
1211 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1212 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1213 | /* 0x80 - 0x8f */ | |
1214 | ECC_C7, ECC_C0, ECC_C1, 0, ECC_C2, 1, 2, 3, | |
1215 | ECC_C3, 4, 5, 6, 7, 8, 9, 10, | |
1216 | /* 0x90 - 0x9f */ | |
1217 | ECC_C4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, | |
1218 | /* 0xa0 - 0xaf */ | |
1219 | ECC_C5, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, | |
1220 | /* 0xb0 - 0xbf */ | |
1221 | 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, | |
1222 | /* 0xc0 - 0xcf */ | |
1223 | ECC_C6, 57, 58, 59, 60, 61, 62, 63, ECC_M, ECC_M, ECC_M, | |
1224 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1225 | /* 0xd0 - 0xdf */ | |
1226 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1227 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1228 | /* 0xe0 - 0xef */ | |
1229 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1230 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1231 | /* 0xf0 - 0xff */ | |
1232 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1233 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M | |
1234 | }; | |
1235 | ||
1236 | /* | |
1237 | * Syndrome table for L2 Data, FRF and Store Buffer errors | |
1238 | */ | |
1239 | ecc_syndrome_table_entry l2_ecc_syndrome_table[] = { | |
1240 | /* 0x0 - 0xf */ | |
1241 | ECC_ne, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1242 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1243 | /* 0x10 - 0x1f */ | |
1244 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1245 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1246 | /* 0x20 - 0x2f */ | |
1247 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1248 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1249 | /* 0x30 - 0x3f */ | |
1250 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1251 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1252 | /* 0x40 - 0x4f */ | |
1253 | ECC_C6, ECC_C0, ECC_C1, 0, ECC_C2, 1, 2, 3, ECC_C3, | |
1254 | 4, 5, 6, 7, 8, 9, 10, | |
1255 | /* 0x50 - 0x5f */ | |
1256 | ECC_C4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, | |
1257 | /* 0x60 - 0x6f */ | |
1258 | ECC_C5, 26, 27, 28, 29, 30, 31, ECC_M, ECC_M, ECC_M, | |
1259 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1260 | /* 0x70 - 0x7f */ | |
1261 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1262 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_N_M | |
1263 | }; | |
1264 | /* | |
1265 | * Syndrome Table for TSA, TCA, and SCA Data ECC Code | |
1266 | */ | |
1267 | ecc_syndrome_table_entry core_array_ecc_syndrome_table[] = { | |
1268 | /* 0x0 - 0xf */ | |
1269 | ECC_ne, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1270 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1271 | /* 0x10 - 0x1f */ | |
1272 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1273 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1274 | /* 0x20 - 0x2f */ | |
1275 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1276 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1277 | /* 0x30 - 0x3f */ | |
1278 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1279 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1280 | /* 0x40 - 0x4f */ | |
1281 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1282 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1283 | /* 0x50 - 0x5f */ | |
1284 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1285 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1286 | /* 0x60 - 0x6f */ | |
1287 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1288 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1289 | /* 0x70 - 0x7f */ | |
1290 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1291 | ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, ECC_U, | |
1292 | /* 0x80 - 0x8f */ | |
1293 | ECC_M, ECC_C0, ECC_C1, 0, ECC_C2, 1, 2, 3, ECC_C3, 4, 5, 6, 7, 8, 9, 10, | |
1294 | /* 0x90 - 0x9f */ | |
1295 | ECC_C4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, | |
1296 | /* 0xa0 - 0xaf */ | |
1297 | ECC_C5, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, | |
1298 | /* 0xb0 - 0xbf */ | |
1299 | 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, | |
1300 | /* 0xc0 - 0xcf */ | |
1301 | ECC_C6, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, | |
1302 | ECC_M, ECC_M, ECC_M, ECC_M, | |
1303 | /* 0xd0 - 0xdf */ | |
1304 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1305 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1306 | /* 0xe0 - 0xef */ | |
1307 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1308 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1309 | /* 0xf0 - 0xff */ | |
1310 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, | |
1311 | ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M, ECC_M | |
1312 | }; | |
1313 | ||
1314 | /* | |
1315 | * Masks used in the calculation of check bits {6:0} for | |
1316 | * floating point (FRF) errors. | |
1317 | */ | |
1318 | ecc_mask_table_entry frfc_ecc_mask_table[] = { | |
1319 | /* C6 */ | |
1320 | 0x2da65cb7, | |
1321 | /* C5 */ | |
1322 | 0xfc000000, | |
1323 | /* C4 */ | |
1324 | 0x03fff800, | |
1325 | /* C3 */ | |
1326 | 0x03fc07f0, | |
1327 | /* C2 */ | |
1328 | 0xe3c3c78e, | |
1329 | /* C1 */ | |
1330 | 0x9b33366d, | |
1331 | /* C0 */ | |
1332 | 0x56aaad5b | |
1333 | }; | |
1334 | ||
1335 | #ifdef CONFIG_CLEANSER | |
1336 | /* BEGIN CSTYLED */ | |
1337 | /* | |
1338 | * From L2 Tag ECC Table E-8, N2 PRM rev. 1.3 | |
1339 | */ | |
1340 | ecc_syndrome_table_entry l2_tag_ecc_table[] = { | |
1341 | /* 0 1 2 3 4 5 6 7*/ | |
1342 | /*00*/ 0x007, 0x00B, 0x00D, 0x00E, 0x013, 0x015, 0x016, 0x019, | |
1343 | /*08*/ 0x01A, 0x01C, 0x01F, 0x023, 0x025, 0x026, 0x029, 0x02A, | |
1344 | /*10*/ 0x02C, 0x02F, 0x031, 0x032, 0x034, 0x037, | |
1345 | /* Now we have the check bits */ | |
1346 | /* C0 C1 C2 C3 C4 C5*/ | |
1347 | 0x001, 0x002, 0x004, 0x008, 0x010, 0x020, | |
1348 | }; | |
1349 | /* END CSTYLED */ | |
1350 | #endif /* CONFIG_CLEANSER */ |