Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / hypervisor / src / greatlakes / huron / src / error_tables.c
CommitLineData
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 */
57err_sun4v_rprt_t err_sun4v_rprt[MAX_ERROR_REPORT_BUFS];
58err_diag_rprt_t err_diag_rprt[MAX_ERROR_REPORT_BUFS];
59
60/*
61 * common functions
62 */
63extern void clear_soc(void);
64extern 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 */
71extern void dump_store_buffer(void);
72extern void itlb_dump(void);
73extern void dtlb_dump(void);
74extern void dump_scratchpad(void);
75extern void dump_trapstack(void);
76extern void dump_dbu_data(void);
77extern void dump_mra(void);
78extern void dump_mamu(void);
79extern void dump_soc(void);
80extern void dump_soc_fbr(void);
81extern void dump_tick_compare(void);
82extern void dump_icache(void);
83extern void dump_dcache(void);
84extern void dump_l2_cache(void);
85extern void dump_reg_ecc(void);
86extern void dump_ssi(void);
87extern void dump_no_error(void);
88extern void dump_hvabort(void);
89
90/*
91 * correction functions
92 */
93extern void itlb_demap_all(void);
94extern void itlb_demap_page(void);
95extern void dtlb_demap_all(void);
96extern void correct_trapstack(void);
97extern void correct_tick_compare(void);
98extern void correct_tick_tccp(void);
99extern void correct_tick_tccd(void);
100extern void correct_l2_ildau(void);
101extern void correct_l2_dldau(void);
102extern void correct_l2_dldac(void);
103extern void correct_stb(void);
104extern void correct_frfc(void);
105extern void correct_frfu(void);
106extern void correct_irfc(void);
107extern void correct_irfu(void);
108extern void correct_imra(void);
109extern void correct_dmra(void);
110extern void correct_scac(void);
111extern void correct_scau(void);
112extern void clear_tick_compare(void);
113extern void reset_soc_fbr(void);
114
115/*
116 * sun4v guest report functions
117 * populate the sun4v guest ereport packet with error-specific data
118 */
119extern void stb_sun4v_report(void);
120extern void sca_sun4v_report(void);
121extern void tick_sun4v_report(void);
122extern void tsa_sun4v_report(void);
123extern void l2_sun4v_report(void);
124extern void irf_sun4v_report(void);
125extern void frf_sun4v_report(void);
126extern void soc_sun4v_report(void);
127
128/*
129 * storm functions
130 */
131extern void l2_ce_storm(void);
132extern void tick_cmp_storm(void);
133extern void soc_storm(void);
134extern void icache_storm(void);
135extern void dcache_storm(void);
136extern void dram_storm(void);
137
138/*
139 * error-specific print functions
140 */
141extern void itlb_print(void);
142extern void dtlb_print(void);
143extern void mra_print(void);
144extern void l2_cache_print(void);
145extern void print_soc(void);
146
147/*
148 * Errata: Filter out Addr parity err synd reported by N2 MCU on scrub (DSU)
149 */
150extern void verify_dsu_error(void);
151
152/*
153 * S/W error table for use with hvabort
154 */
155error_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
175error_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
223error_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
270error_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
360error_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
435error_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
456error_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
496error_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
627error_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 */
658error_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 */
677error_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 */
809error_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
863error_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
873error_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 */
890error_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
900error_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 */
914error_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
1174error_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 */
1188ecc_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 */
1239ecc_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 */
1267ecc_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 */
1318ecc_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 */
1340ecc_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 */