Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / legion / src / procs / sunsparc / libniagara2 / niagara2_err_trap.c
/*
* ========== Copyright Header Begin ==========================================
*
* OpenSPARC T2 Processor File: niagara2_err_trap.c
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
*
* The above named program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License version 2 as published by the Free Software Foundation.
*
* The above named program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*
* ========== Copyright Header End ============================================
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "@(#)niagara2_err_trap.c 1.18 07/02/28 SMI"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h> /* memcpy/memset */
#include <strings.h>
#include <thread.h>
#include "ss_common.h"
#include "niagara2.h"
#if ERROR_TRAP_GEN /* { */
/* Core error registers */
EAR_DEFINITION( isfsr );
EIR_DEFINITION( isfsr );
EAR_DEFINITION( dsfsr );
EIR_DEFINITION( dsfsr );
EAR_DEFINITION( desr );
EIR_DEFINITION( desr );
EAR_DEFINITION( c_erer );
EAR_DEFINITION( s_eter );
EAR_DEFINITION( clesr );
EAR_DEFINITION( dfesr );
EIR_DEFINITION( dfesr );
/* L2$ error registers */
EAR_DEFINITION( l2_b0_eer );
EAR_DEFINITION( l2_b1_eer );
EAR_DEFINITION( l2_b2_eer );
EAR_DEFINITION( l2_b3_eer );
EAR_DEFINITION( l2_b4_eer );
EAR_DEFINITION( l2_b5_eer );
EAR_DEFINITION( l2_b6_eer );
EAR_DEFINITION( l2_b7_eer );
EAR_DEFINITION( l2_b0_esr );
EAR_DEFINITION( l2_b1_esr );
EAR_DEFINITION( l2_b2_esr );
EAR_DEFINITION( l2_b3_esr );
EAR_DEFINITION( l2_b4_esr );
EAR_DEFINITION( l2_b5_esr );
EAR_DEFINITION( l2_b6_esr );
EAR_DEFINITION( l2_b7_esr );
EIR_DEFINITION( l2_b0_esr );
EIR_DEFINITION( l2_b1_esr );
EIR_DEFINITION( l2_b2_esr );
EIR_DEFINITION( l2_b3_esr );
EIR_DEFINITION( l2_b4_esr );
EIR_DEFINITION( l2_b5_esr );
EIR_DEFINITION( l2_b6_esr );
EIR_DEFINITION( l2_b7_esr );
EAR_DEFINITION( l2nd_b0_esr );
EAR_DEFINITION( l2nd_b1_esr );
EAR_DEFINITION( l2nd_b2_esr );
EAR_DEFINITION( l2nd_b3_esr );
EAR_DEFINITION( l2nd_b4_esr );
EAR_DEFINITION( l2nd_b5_esr );
EAR_DEFINITION( l2nd_b6_esr );
EAR_DEFINITION( l2nd_b7_esr );
EIR_DEFINITION( l2nd_b0_esr );
EIR_DEFINITION( l2nd_b1_esr );
EIR_DEFINITION( l2nd_b2_esr );
EIR_DEFINITION( l2nd_b3_esr );
EIR_DEFINITION( l2nd_b4_esr );
EIR_DEFINITION( l2nd_b5_esr );
EIR_DEFINITION( l2nd_b6_esr );
EIR_DEFINITION( l2nd_b7_esr );
/* DRAM error registers */
EAR_DEFINITION( dram_b0_esr );
EAR_DEFINITION( dram_b1_esr );
EAR_DEFINITION( dram_b2_esr );
EAR_DEFINITION( dram_b3_esr );
EAR_DEFINITION( dram_b4_esr );
EAR_DEFINITION( dram_b5_esr );
EAR_DEFINITION( dram_b6_esr );
EAR_DEFINITION( dram_b7_esr );
EIR_DEFINITION( dram_b0_esr );
EIR_DEFINITION( dram_b1_esr );
EIR_DEFINITION( dram_b2_esr );
EIR_DEFINITION( dram_b3_esr );
EIR_DEFINITION( dram_b4_esr );
EIR_DEFINITION( dram_b5_esr );
EIR_DEFINITION( dram_b6_esr );
EIR_DEFINITION( dram_b7_esr );
static bool_t l2_esr_inject (int idx, EIR_ARGS);
static uint64_t l2_esr_access (int idx, EAR_ARGS);
static uint64_t l2_eer_access (int idx, EAR_ARGS);
static bool_t l2nd_esr_inject (int idx, EIR_ARGS);
static uint64_t l2nd_esr_access (int idx, EAR_ARGS);
static bool_t dram_esr_inject (int idx, EIR_ARGS);
static uint64_t dram_esr_access (int idx, EAR_ARGS);
/*
* This routine will initilize all error trap
* related state which is associated with a
* particular ss_proc_t struct. For now just
* provides CPU error for generating traps which
* are not associated with any particular error.
*/
void ss_error_trap_proc_init(config_proc_t * config_procp) {
/*
* Table of Error Registers supported by Niagara2:
* For Starters, we are only supporting:
*
* ESRs: ASI_CLESR
* ASI_DESR
*
* EERs: ASI_CERER
* ASI_SETER
*
*
*/
static ss_err_reg_t err_reg_table[] = {
/* ESRs: */
/* ASI VA Access Routine */
{ SS_ASI_IMMU, 0x18, EAR( isfsr ) },
{ SS_ASI_DMMU, 0x18, EAR( dsfsr ) },
{ N2_ASI_DESR, 0x0, EAR( desr ) },
{ N2_ASI_DESR, 0x20, EAR( clesr ) },
{ N2_ASI_DESR, 0x8, EAR( dfesr ) },
/* EERs: */
/* ASI VA Access Routine */
{ N2_ASI_DESR, 0x10, EAR( c_erer ) },
{ N2_ASI_DESR, 0x18, EAR( s_eter ) },
/* ASI VA Access Routine */
{ INVALID_ASI, 0, NULL },
};
/*
* CPU specific table of CPU errors for which Legion supports
* error trap injection.
*
* For Starters, we only supporting
*
* ERRORs: ICVP
* ICTP
* ICTM
* ICDP
* DCVP
* DCTP
* DCTM
* DCDP
* L2C
* SBDPC
*
*/
static ss_error_entry_t error_table[] = {
/* Error, Trap Type, Trap Class, persistent?, Target Strand */
/* (init val only) */
{ "ICVP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(56,56) | MASK64(2,2) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(18,18) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "ICTP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(57,57) | MASK64(2,2) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(17,17) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "ICTM", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(57,56) | MASK64(2,2) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(16,16) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "ICDP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(58,58) | MASK64(2,2) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(15,15) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "DCVP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ {EAR( desr ), EIR( desr ), ( MASK64(58,58) | MASK64(56,56) | MASK64(2,2) | MASK64(0,0) ), DESR_MASK },
/* error_record[] */ {EAR( c_erer ), MASK64(14,14)},
/* error_report[] */ {EAR( s_eter ), MASK64(60,60)},
},
{ "DCTP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(58,57) | MASK64(2,2) | MASK64(0,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(13,13) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "DCTM", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(58,56) | MASK64(2,2) | MASK64(0,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(12,12) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "DCDP", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(59,59) | MASK64(2,2) | MASK64(0,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(11,11) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "L2C", SS_trap_hw_corrected_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(59,59) | MASK64(56,56) | MASK64(1,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(21,21) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "L2C_CE_ECC", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(60,60) | MASK64(58,58) | MASK64(1,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(21,21) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "SBDPC", SS_trap_hw_corrected_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), ( MASK64(59,59) | MASK64(57,57) | MASK64(1,0) ), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(10,10) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "SBDPU", SS_trap_sw_recoverable_error, DISRUPTING_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(58,57) | MASK64(2,1), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(9,9) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "ITTM", SS_trap_instruction_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(61,61) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ITTP", SS_trap_instruction_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(1,1),MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(63,63) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ITDP", SS_trap_instruction_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(1,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(62,62) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ITMU", SS_trap_instruction_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(2,2), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(59,59) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTTM", SS_trap_data_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(47,47) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTTP", SS_trap_data_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(1,1), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(48,48) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTDP", SS_trap_data_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(1,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(46,46) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTMU", SS_trap_data_access_MMU_error, PRECISE_TT, true, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,2), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(59,59) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ITL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(56,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "ICL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(57,57), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(55,55) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "DTL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(57,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "DCL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need set esr to ERRORSTEER */
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(58,58), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(40,40) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "MAL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need to assign to the STRAND field of MA_CTL reg*/
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,59), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(5,5) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "CWQL2C", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* For now assigning it to current strand. Need to assign to the CoreID field of the CWQ entry*/
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,59)|MASK64(57,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(2,2) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "IRFU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(52,52) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "IRFC", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(1,1), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(52,52) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "FRFU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(1,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(50,50) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "FRFC", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,2), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(50,50) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "SBDLU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,1), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(36,36) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "SBDLC", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,2)|MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(37,37) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "SCAC", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,3)|MASK64(1,1), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(30,30) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "SCAU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,3)|MASK64(1,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(29,29) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "TCCP", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,2), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(28,28) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "TCUP", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,2)|MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(27,27) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "TCCD", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,57), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(7,7) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "TCUD", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(6,6) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "TSAC", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,3), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(32,32) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "TSAU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(3,3)|MASK64(0,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(31,31) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "MRAU", SS_trap_internal_processor_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,0), MMU_SFSR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(33,33) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "SBDIOU", N2_trap_store_error, DEFERRED_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dfesr ), EIR( dfesr ), MASK64(60,60), DFESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(9,9) },
/* error_report[] */ { NULL, 0 },
},
{ "SBAPP", N2_trap_store_error, DEFERRED_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dfesr ), EIR( dfesr ), MASK64(61,61), DFESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(23,23) },
/* error_report[] */ { NULL, 0 },
},
{ "ITL2U", SS_trap_instruction_access_MMU_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(2,2)|MASK64(0,0), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTL2U", SS_trap_data_access_MMU_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,2)|MASK64(0,0), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ICL2U", SS_trap_instruction_access_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(0,0), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(54,54) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DCL2U", SS_trap_data_access_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(0,0), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(39,39) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "L2U", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(60,60), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(20,20) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "L2U_PART_ST", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(60,60), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(20,20) },
/* error_report[] */ { EAR( s_eter ), MASK64(60,60) },
},
{ "CWQL2U", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,58), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(1,1) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "MAL2U", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,59)|MASK64(56,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(4,4) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "ITL2ND", SS_trap_instruction_access_MMU_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(2,1), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DTL2ND", SS_trap_data_access_MMU_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(2,1), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(58,58) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "ICL2ND", SS_trap_instruction_access_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( isfsr ), EIR( isfsr ), MASK64(1,1), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(53,53) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "DCL2ND", SS_trap_data_access_error, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dsfsr ), EIR( dsfsr ), MASK64(1,1), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(38,38) },
/* error_report[] */ { EAR( s_eter ), MASK64(62,62) },
},
{ "L2ND", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(60,60)|MASK64(56,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(19,19) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "CWQL2ND", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,58)|MASK64(56,56), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(0,0) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
{ "MAL2ND", SS_trap_sw_recoverable_error, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( desr ), EIR( desr ), MASK64(59,59)|MASK64(57,57), DESR_MASK },
/* error_record[] */ { EAR( c_erer ), MASK64(3,3) },
/* error_report[] */ { EAR( s_eter ), MASK64(61,61) },
},
/*
* L2$ Errors. These errors are not persistent because the framework doesn't have the required functionality for
* for these error. The functionality will be added if required in the future.
*/
{ "LDWC_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDWC_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDWC_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDWC_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDWC_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDWC_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LDWC_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDWC_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(51,51), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDSC_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDSC_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDSC_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDSC_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDSC_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDSC_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LDSC_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDSC_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(47,47), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LTC_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LTC_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LTC_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LTC_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LTC_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LTC_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LTC_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LTC_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(45,45), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LVC_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LVC_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LVC_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LVC_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LVC_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LVC_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LVC_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LVC_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(34,34), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "ITL2C_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "ITL2C_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "ITL2C_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "ITL2C_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "ITL2C_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "ITL2C_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "ITL2C_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "ITL2C_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "ITL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "ICL2C_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "ICL2C_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "ICL2C_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "ICL2C_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "ICL2C_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "ICL2C_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "ICL2C_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "ICL2C_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "ICL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "DTL2C_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "DTL2C_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "DTL2C_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "DTL2C_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "DTL2C_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "DTL2C_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "DTL2C_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "DTL2C_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "DTL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
/* Load Hit DCL2C Errors */
{ "DCL2C_LD_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "DCL2C_LD_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "DCL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
/* Prefetch Hit Errors */
{ "L2C_PREFETCH_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "L2C_PREFETCH_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
/* Partial Store Hit/CWQ Partial Store Hit DCL2C Errors */
{ "DCL2C_ST_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "DCL2C_ST_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "MAL2C_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "MAL2C_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "MAL2C_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "MAL2C_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "MAL2C_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "MAL2C_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "MAL2C_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "MAL2C_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "MAL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "CWQL2C_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "CWQL2C_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "CWQL2C_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "CWQL2C_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "CWQL2C_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "CWQL2C_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "CWQL2C_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "CWQL2C_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(53,53), NULL, "CWQL2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_RD_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(49,49), NULL, "L2C_CE_ECC" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDRC_DMA_PART_WR_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(49,49), NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "ITL2U_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "ITL2U_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "ITL2U_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "ITL2U_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "ITL2U_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "ITL2U_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "ITL2U_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "ITL2U_7", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "ITL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "DTL2U_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "DTL2U_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "DTL2U_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "DTL2U_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "DTL2U_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "DTL2U_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "DTL2U_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "DTL2U_7", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "DTL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "ICL2U_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "ICL2U_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "ICL2U_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "ICL2U_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "ICL2U_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "ICL2U_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "ICL2U_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "ICL2U_7", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "ICL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "DCL2U_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "DCL2U_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "DCL2U_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "DCL2U_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "DCL2U_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "DCL2U_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "DCL2U_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "DCL2U_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "DCL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
/* Prefetch Hit Errors */
{ "L2U_PREFETCH_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "L2U_PREFETCH_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
/* Partial Store Hit/CWQ Partial Store Hit Errors */
{ "L2U_ST_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "L2U_ST_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "L2U_ST_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "L2U_ST_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "L2U_ST_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "L2U_ST_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "L2U_ST_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "L2U_ST_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "L2U_PART_ST" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "CWQL2U_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "CWQL2U_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "CWQL2U_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "CWQL2U_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "CWQL2U_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "CWQL2U_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "CWQL2U_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "CWQL2U_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "CWQL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "MAL2U_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "MAL2U_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "MAL2U_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "MAL2U_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "MAL2U_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "MAL2U_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "MAL2U_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "MAL2U_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(52,52), NULL, "MAL2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "ITL2ND_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "ITL2ND_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "ITL2ND_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "ITL2ND_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "ITL2ND_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "ITL2ND_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "ITL2ND_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "ITL2ND_7", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(49,49), NULL, "ITL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "DTL2ND_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "DTL2ND_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "DTL2ND_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "DTL2ND_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "DTL2ND_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "DTL2ND_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "DTL2ND_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "DTL2ND_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "DTL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "ICL2ND_0", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "ICL2ND_1", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "ICL2ND_2", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "ICL2ND_3", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "ICL2ND_4", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "ICL2ND_5", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "ICL2ND_6", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "ICL2ND_7", SS_UE_trap_forward_2_core, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(52,52), NULL, "ICL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "DCL2ND_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(1,1) },
},
{ "DCL2ND_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(1,1) },
},
{ "DCL2ND_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(1,1) },
},
{ "DCL2ND_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(1,1) },
},
{ "DCL2ND_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(1,1) },
},
{ "DCL2ND_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(1,1) },
},
{ "DCL2ND_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(1,1) },
},
{ "DCL2ND_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(49,49), NULL, "DCL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(1,1) },
},
{ "L2ND_PREFETCH_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "L2ND_PREFETCH_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(49,49), NULL, "L2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "CWQL2ND_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "CWQL2ND_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "CWQL2ND_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "CWQL2ND_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "CWQL2ND_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "CWQL2ND_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "CWQL2ND_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "CWQL2ND_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(49,49), NULL, "CWQL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "MAL2ND_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b0_esr ), EIR( l2nd_b0_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "MAL2ND_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b1_esr ), EIR( l2nd_b1_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "MAL2ND_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b2_esr ), EIR( l2nd_b2_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "MAL2ND_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b3_esr ), EIR( l2nd_b3_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "MAL2ND_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b4_esr ), EIR( l2nd_b4_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "MAL2ND_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b5_esr ), EIR( l2nd_b5_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b5_eer ), MASK64(0,0) },
},
{ "MAL2ND_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b6_esr ), EIR( l2nd_b6_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "MAL2ND_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2nd_b7_esr ), EIR( l2nd_b7_esr ), MASK64(49,49), NULL, "MAL2ND" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDWU_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDWU_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDWU_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDWU_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDWU_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDWU_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDWU_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDWU_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(50,50), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDRU_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDRU_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDRU_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDRU_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDRU_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDRU_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDRU_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDRU_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(48,48), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
{ "LDSU_0", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b0_esr ), EIR( l2_b0_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDSU_1", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b1_esr ), EIR( l2_b1_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b1_eer ), MASK64(0,0) },
},
{ "LDSU_2", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b2_esr ), EIR( l2_b2_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b2_eer ), MASK64(0,0) },
},
{ "LDSU_3", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b3_esr ), EIR( l2_b3_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b3_eer ), MASK64(0,0) },
},
{ "LDSU_4", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b4_esr ), EIR( l2_b4_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b4_eer ), MASK64(0,0) },
},
{ "LDSU_5", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b5_esr ), EIR( l2_b5_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b0_eer ), MASK64(0,0) },
},
{ "LDSU_6", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b6_esr ), EIR( l2_b6_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b6_eer ), MASK64(0,0) },
},
{ "LDSU_7", SS_UE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( l2_b7_esr ), EIR( l2_b7_esr ), MASK64(46,46), NULL, "L2U" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { EAR( l2_b7_eer ), MASK64(0,0) },
},
/* DRAM Errors */
{ "DAC_LD_FTCH_TTE_MISS_0_L2_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_0_L2_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_1_L2_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_1_L2_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_2_L2_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_2_L2_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_3_L2_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_LD_FTCH_TTE_MISS_3_L2_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_0_L2_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_0_L2_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_1_L2_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_1_L2_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_2_L2_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_2_L2_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_3_L2_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_ATOMIC_MISS_3_L2_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
/* Partial Store Miss / CWQ Partial Store Miss */
{ "DAC_PART_STX_MISS_0_L2_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_0_L2_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_1_L2_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_1_L2_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_2_L2_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_2_L2_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_3_L2_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_PART_STX_MISS_3_L2_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
/* Store Miss / Modular Arithmetic Store Miss/ CWQ Store Miss */
{ "DAC_STX_MISS_0_L2_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_0_L2_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_1_L2_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_1_L2_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_2_L2_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_2_L2_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_3_L2_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DAC_STX_MISS_3_L2_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DAC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_0_L2_0", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_0_L2_1", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b0_esr ), EIR( dram_b0_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_1_L2_2", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_1_L2_3", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b1_esr ), EIR( dram_b1_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_2_L2_4", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_2_L2_5", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b2_esr ), EIR( dram_b2_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_3_L2_6", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
{ "DSC_3_L2_7", SS_CE_trap_forward_2_core, DISRUPTING_TT, false, TARGET_MYSELF,
/* error_status[] */ { EAR( dram_b3_esr ), EIR( dram_b3_esr), DRAM_DSC_bit, NULL, "L2C" },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
/*
* Special case for generating traps which are not associated
* with any particular error.
*/
{ TRAP_ERR_STRING, TRAP_ONLY_TT, PRECISE_TT, false, TARGET_MYSELF,
/* error_status[] */ { NULL, NULL, 0, NULL },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
/*
* Special case for generating service processor interrupts
* which are not associated with any particular error.
*/
{ SP_INTR_ERR_STRING, SS_generate_SP_interrupt, SP_INTR, false, TARGET_SP,
/* error_status */ { NULL, NULL, 0, NULL },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
/*
* Special case for marking the end of the table.
*/
{ END_ERR_STRING, INVALID_TRAP, 0, 0, 0,
/* error_status */ { NULL, NULL, 0, NULL },
/* error_record[] */ { NULL, 0 },
/* error_report[] */ { NULL, 0 },
},
};
/*
* CPU specific table of CPU errors for which Legion supports
* SP interrupt generation
*/
static ss_sp_error_t sp_error_table[] = {
{ SP_INTR_ERR_STRING, NULL },
{ END_ERR_STRING, NULL },
};
ss_proc_t * rpp;
cpu_error_state_t *cpu_es;
rpp = (ss_proc_t*)(config_procp->procp);
rpp->ss_err_state.inj_error_trap = NULL;
rpp->ss_err_state.ready_for_next_injection = true;
rpp->ss_err_state.esrs_clear = true;
#if (ERROR_TRAP_GEN > 1)
lprintf(-1, "\n\nERROR_TRAP_GEN: ss_proc_t.ss_err_state = 0x%llx\n", &rpp->ss_err_state);
lprintf(-1, " &(...inj_error_trap) = 0x%llx\n", &(rpp->ss_err_state.inj_error_trap));
lprintf(-1, " &(...ready_for_next_injection) = 0x%llx\n", &(rpp->ss_err_state.ready_for_next_injection));
lprintf(-1, " &(...esrs_clear) = 0x%llx\n", &(rpp->ss_err_state.esrs_clear));
lprintf(-1, " &(...err_lock) = 0x%llx\n\n", &(rpp->ss_err_state.err_lock));
#endif
/*
* Allocate space for and initialize the
* CPU-specific Error Trap Injection state.
*/
cpu_es = Xcalloc(1, cpu_error_state_t);
rpp->cpu_err_statep = cpu_es;
rpp->ss_err_state.err_reg_tbl = err_reg_table;
rpp->ss_err_state.err_event_tbl = error_table;
rpp->ss_err_state.sp_err_tbl = sp_error_table;
#if (ERROR_TRAP_GEN > 1)
lprintf(-1, "ERROR_TRAP_GEN: ss_proc_t->cpu_err_statep = 0x%llx\n", rpp->cpu_err_statep);
lprintf(-1, " &(...->desr[0]) = 0x%llx\n", &(rpp->cpu_err_statep->desr[0]));
lprintf(-1, " &(...->c_erer[0]) = 0x%llx\n", &(rpp->cpu_err_statep->c_erer[0]));
lprintf(-1, " &(...->s_eter) = 0x%llx\n", &(rpp->cpu_err_statep->s_eter));
lprintf(-1, " &(...->dfesr[0]) = 0x%llx\n", &(rpp->cpu_err_statep->dfesr[0]));
#endif
lprintf(-1, "\nERROR_TRAP_GEN: CPU Error Table\n");
dump_cpu_error_table(-1, error_table);
lprintf(-1, "ERROR_TRAP_GEN: END CPU Error Table\n\n");
lprintf(-1, "ERROR_TRAP_GEN: Supported CPU Error Register Table\n");
dump_cpu_error_reg_table(-1, err_reg_table);
lprintf(-1, "ERROR_TRAP_GEN: END Supported CPU Error Register Table\n\n");
lprintf(-1, "ERROR_TRAP_GEN: initial Error Event list:\n");
dump_error_event_list(-1, rpp->ss_err_state.error_event_list_rootp);
lprintf(-1, "ERROR_TRAP_GEN: END initial Error Event list:\n\n");
lprintf(-1, "ERROR_TRAP_GEN: initial Error ASI Override list\n");
dump_error_asi_list(-1, rpp->ss_err_state.error_asi_list_rootp);
lprintf(-1, "ERROR_TRAP_GEN: END Error ASI Override list\n\n");
pthread_mutex_init(&rpp->ss_err_state.injection_lock, NULL);
pthread_mutex_init(&rpp->ss_err_state.err_lock, NULL);
}
void ss_error_trap_strand_init(config_proc_t * config_procp, simcpu_t * sp) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
cpu_error_state_t *cpu_es;
cpu_error_reg_t *cpu_er;
int strand_id;
int core_num;
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
rpp = (ss_proc_t*)(config_procp->procp);
cpu_es = rpp->cpu_err_statep;
/*
* Allocate space for and initialize the
* per strand access pointers. This struct
* simply defines direct pointers from the
* strand to the various register values
* stored in the chip's cpu_error_state_t
* struct.
*/
strand_id = rsp->vcore_id;
core_num = rsp->core;
cpu_er = Xcalloc(1, cpu_error_reg_t);
cpu_er->desr_ptr = &(cpu_es->desr[strand_id]);
cpu_er->clesr_ptr = &(cpu_es->clesr[core_num]);
cpu_er->c_erer_ptr = &(cpu_es->c_erer[core_num]);
cpu_er->s_eter_ptr = &(cpu_es->s_eter[strand_id]);
cpu_er->dfesr_ptr = &(cpu_es->dfesr[strand_id]);
rsp->cpu_err_regp = cpu_er;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: For Strand ID = %d we have initialized:\n", strand_id);
lprintf(sp->gid, " ss_strand_t->cpu_err_regp = 0x%llx\n", rsp->cpu_err_regp);
lprintf(sp->gid, " rsp->cpu_err_regp->desr_ptr = 0x%llx\n", rsp->cpu_err_regp->desr_ptr);
lprintf(sp->gid, " rsp->cpu_err_regp->c_erer_ptr = 0x%llx core_num=%d\n",
rsp->cpu_err_regp->c_erer_ptr, core_num);
lprintf(sp->gid, " rsp->cpu_err_regp->s_eter_ptr = 0x%llx\n", rsp->cpu_err_regp->s_eter_ptr);
lprintf(sp->gid, " rsp->error.isfsr = 0x%llx\n", &(rsp->error.isfsr));
lprintf(sp->gid, " rsp->error.dsfsr = 0x%llx\n", &(rsp->error.dsfsr));
lprintf(sp->gid, " rsp->error.dsfar = 0x%llx\n\n", &(rsp->error.dsfar));
lprintf(sp->gid, " rsp->cpu_err_regp->dfesr_ptr = 0x%llx\n", rsp->cpu_err_regp->dfesr_ptr);
#endif
/*
* See if there are any other events which may need to
* be triggered on this CPU.
*/
check_pending_error_events(sp);
}
/*
* One register per chip.
*
* This is a read only register. Much like the
* HW implementation, we don't store any state
* associated with this register. When there is
* an access to this register, we simply go read
* all the F bits of the other ESRs which are
* latched to bits in this register and return
* the result.
*/
EAR_DEFINITION( clesr ) {
uint64_t val = 0;
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
cpu_error_state_t *cesp;
int strand_id, core_num, strand;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
strand_id = rsp->vcore_id;
core_num = rsp->core;
strand = core_num * 8;
cesp = rpp->cpu_err_statep;
if (!is_load) {
/*
* Not expected. I'm not sure if we should
* generate a DAX at this point or not. For
* now a warning message will do.
*/
EXEC_WARNING(("ASI_CLESR is not writeble.\n"));
return 0;
}
/* Core_num/strand0 desr */
if (cesp->desr[strand] & MASK64(63,63))
val |= BIT(49);
/* Core_num/strand1 desr */
if (cesp->desr[strand + 1] & MASK64(63,63))
val |= BIT(51);
/* Core_num/strand2 desr */
if (cesp->desr[strand + 2] & MASK64(63,63))
val |= BIT(53);
/* Core_num/strand3 desr */
if (cesp->desr[strand + 3] & MASK64(63,63))
val |= BIT(55);
/* Core_num/strand4 desr */
if (cesp->desr[strand + 4] & MASK64(63,63))
val |= BIT(57);
/* Core_num/strand5 desr */
if (cesp->desr[strand + 5] & MASK64(63,63))
val |= BIT(59);
/* Core_num/strand6 desr */
if (cesp->desr[strand + 6] & MASK64(63,63))
val |= BIT(61);
/* Core_num/strand7 desr */
if (cesp->desr[strand + 7] & MASK64(63,63))
val |= BIT(63);
/* bits 47:0 reserved */
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to clesr. returning val 0x%llx\n", val););
return val;
}
/*
* One register per strand
* but we define one access routine.
*
* Use sp to identify register being
* accessed.
*/
EAR_DEFINITION( isfsr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t val;
int idx;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = rsp->error.isfsr;
/*
* isfsr:
* .----------------------------------------.
* | R E S E R V E D | ERRTYPE |
* `----------------------------------------'
* 63:3 2:0
* ^ ^
* | |
* | *----> RW
* *-----------------------> RO
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to isfsr. returning val 0x%llx\n", val););
return (val);
}
/*
* synchronize the read/modify/write
*/
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & MMU_SFSR_MASK;
rsp->error.isfsr = val;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to isfsr. storing val 0x%llx\n", rsp->error.isfsr););
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
/*
* One register per strand.
* but we define one access routine.
*
* Use sp to identify register for
* injection.
*/
EIR_DEFINITION( isfsr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
ss_error_entry_t *ep;
uint64_t val;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = rsp->error.isfsr;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting isfsr. old value 0x%llx\n", val);
#endif
/*
* See Register diagram in the register
* access routine for isfsr.
*/
/*
* There is no latching of the first error. If another
* error occurs before the ISFSR has been examined, the
* new error information is captured in the ISFSR, overwriting
* the old information.
*/
/*
* Inject the ESR bit(s) specified
*/
val = mask;
rsp->error.isfsr = val;
/*
*Update TPC[TL] with VA
*/
v9p->tpc[(v9p->tl)] = sp->eep->address.addr;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting isfsr. new value 0x%llx\n", rsp->error.isfsr);
#endif
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return true;
}
/*
* One register per strand
* but we define one access routine.
*
* Use sp to identify register being
* accessed.
*/
EAR_DEFINITION( dsfsr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t val;
int idx;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = rsp->error.dsfsr;
/*
* dsfsr:
* .----------------------------------------.
* | R E S E R V E D | ERRTYPE |
* `----------------------------------------'
* 63:3 2:0
* ^ ^
* | |
* | *----> RW
* *-----------------------> RO
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to dsfsr. returning val 0x%llx\n", val););
return (val);
}
/*
* synchronize the read/modify/write
*/
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & MMU_SFSR_MASK;
rsp->error.dsfsr = val;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to dsfsr. storing val 0x%llx\n", val););
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
/*
* One register per strand.
* but we define one access routine.
*
* Use sp to identify register for
* injection.
*/
EIR_DEFINITION( dsfsr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
ss_error_entry_t *ep;
uint64_t val;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = rsp->error.dsfsr;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dsfsr. old value 0x%llx\n", val);
#endif
/*
* See Register diagram in the register
* access routine for dsfsr.
*/
/*
* There is no latching of the first error. If another
* error occurs before the DSFSR has been examined, the
* new error information is captured in the DSFSR, overwriting
* the old information.
*/
/*
* Inject the ESR bit(s) specified
*/
val = mask;
rsp->error.dsfsr = val;
/*
*Update dsfar with VA
*/
rsp->error.dsfar = sp->eep->address.addr & MASK64(47,0);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dsfsr. new value 0x%llx\n", rsp->error.dsfsr);
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dsfar. new value 0x%llx\n", rsp->error.dsfar);
#endif
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return true;
}
/*
* One register per strand
* but we define one access routine.
*
* Use sp to identify register being
* accessed.
*/
EAR_DEFINITION( desr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t *regp;
uint64_t val;
int idx;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
/*
* We are only interested in the register
* associated with the strand in question.
*/
regp = rsp->cpu_err_regp->desr_ptr;
/*
* desr:
* .----------------------------------------.
* | F | ME | S | ERRTYPE | RSVD | ERRADDR |
* `----------------------------------------'
* 63 62 61 60:56 55:11 10:0
* ^ ^ ^ ^ ^ ^
* | | | | | *----> RO
* | | | | *------------> RC
* | | | *--------------------> RC
* | | *---------------------------> RC
* | *---------------------------------> RC
* *-------------------------------------> RC
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to desr. returning val 0x%llx\n", *regp););
val = *regp;
/* Most of the fields of this register are clear on read when accessed by HV.
* legion_access flag is used to prevent clearing this reg when legion accesses it.
*/
if (!legion_access) /* HV Access */
*regp = 0; /* Clear all fields on read */
return (val);
}
else {
/* The ASI_DESR is clear on read, a store is not expected */
EXEC_WARNING(("ASI_DESR is not writeble.\n"));
return 0;
}
}
/*
* One register per strand.
* but we define one access routine.
*
* Use sp to identify register for
* injection.
*/
EIR_DEFINITION( desr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
ss_error_entry_t *ep;
uint64_t val;
bool_t new_trap;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = *(rsp->cpu_err_regp->desr_ptr);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting desr. old value 0x%llx\n", val);
#endif
/*
* See Register diagram in the register
* access routine for desr.
*/
if (errp->trap_type == SS_trap_sw_recoverable_error) {
if (val & MASK64(63,63)) { /* Checking the F bit */
if (val & MASK64(61,61)) { /* Checking the S bit */
val |= MASK64(62,62); /* Only turn on the ME bit */
new_trap = false;
} else {
val |= mask; /* Update DESR.Errortype field */
val |= MASK64(63,61); /* Turn on F, Me & S bits */
new_trap = false;
}
} else { /* F bit is turned off */
val |= mask; /* Update DESR.Errortype field */
val |= (MASK64(63,63)|MASK64(61,61)); /* Turn on F & S bits */
/*Modify the additional bits if its CWQL2U/MAL2U error*/
if (strcmp(sp->eep->error_str, "CWQL2U") == 0) {
rpp->stream_cwq_p->cwq_CSR & CWQ_CSR_HWE & ~CWQ_CSR_BUSY & ~CWQ_CSR_ENABLED;
} else if (strcmp(sp->eep->error_str, "MAL2U") == 0) {
rpp->mod_arith_p->HWE = 1;
rpp->mod_arith_p->busy = 0;
}
new_trap = true;
}
} else if (errp->trap_type == SS_trap_hw_corrected_error) {
if (val & MASK64(63,63)) {
/*
* Only turn on the ME bit.
*/
val |= MASK64(62,62);
new_trap = false;
} else {
/*
* Inject the ESR bit(s) specified
* and update the F bit.
*/
val |= mask;
if (val & MASK64(60,56)) {
/* make sure F bit is on */
val |= MASK64(63,63);
}
new_trap = true;
}
}
*(rsp->cpu_err_regp->desr_ptr) = val;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting desr. new value 0x%llx\n", val);
#endif
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return (new_trap);
}
/* One register per strand
* but we define one access routine.
*
* Use sp to identify register being
* accessed.
*/
EAR_DEFINITION( dfesr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t *regp;
uint64_t val;
int idx;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
/*
* We are only interested in the register
* associated with the strand in question.
*/
regp = rsp->cpu_err_regp->dfesr_ptr;
/*
* dfesr:
* .----------------------------------------.
* | RSVD | TYPE | PRIV | STBIDX | RESERVED |
* `----------------------------------------'
* 63:62 61:60 59:58 57:55 54:0
* ^ ^ ^ ^ ^
* | | | | |
* | | | | *---> RC
* | | | *--------------> RC
* | | *---------------------> RC
* | *-----------------------------> RC
* *------------------------------------> RC
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to dfesr. returning val 0x%llx\n", *regp););
val = *regp;
/* All the fields of this register are cleared on read when accessed by HV.
* legion_access flag is used to prevent clearing this reg when legion accesses it.
*/
if (!legion_access) /* HV Access */
*regp = 0; /* Clear all fields on read */
return (val);
}
else {
/* The ASI_DESR is clear on read, a store is not expected */
EXEC_WARNING(("ASI_DESR (DFESR) is not writeble.\n"));
return 0;
}
}
/*
* One register per strand.
* but we define one access routine.
*
* Use sp to identify register for
* injection.
*/
EIR_DEFINITION( dfesr ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t val;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
/*
* We are only interested in the register
* associated with the strand in question.
*/
val = *(rsp->cpu_err_regp->dfesr_ptr);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dfesr. old value 0x%llx\n", val);
#endif
val |= mask;
/*Setting the priv level of this error as specified in error.conf*/
switch (sp->eep->priv) {
case V9_User:
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: %s priv level = USER\n", sp->eep->error_str);
#endif
break;
case V9_Priv:
val |= MASK64(58,58);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: %s priv level = PRIVILEDGED\n", sp->eep->error_str);
#endif
break;
case V9_HyperPriv:
val |= MASK64(59,59);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: %s priv level = HYPERPRIVILEDGED\n", sp->eep->error_str);
#endif
break;
default:
val |= MASK64(58,58);
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: No priv level specified for %s, defaulting to PRIVILEDGED\n", sp->eep->error_str);
#endif
}/*switch*/
*(rsp->cpu_err_regp->dfesr_ptr) = val;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dfesr. new value 0x%llx\n", val);
#endif
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return true;
}
/*
* One register per core. (8 total)
* but we define one access routine.
*
* Use sp to identify register being
* accessed.
*/
EAR_DEFINITION( c_erer ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
ss_error_entry_t *ep;
uint64_t *regp;
uint64_t val;
int idx;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
/*
* We are only interested in the register
* associated with the strand in question.
*/
regp = rsp->cpu_err_regp->c_erer_ptr;
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to c_erer. returning val 0x%llx\n", *regp););
return (*regp);
}
val = store_val & CERER_MASK;
*regp = val;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to c_erer. storing val 0x%llx\n", *regp););
return 0; /* ignored for store operations */
}
/*
* One register per strand.
*/
EAR_DEFINITION( s_eter ) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
ss_error_entry_t *ep;
uint64_t *regp;
uint64_t val;
int idx;
ss_error_entry_t *error_table;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
error_table = rpp->ss_err_state.err_event_tbl;
regp = rsp->cpu_err_regp->s_eter_ptr;
/*
* s_eter:
* .---------------------------------------------.
* | RSVD | PSCCE | DE | DHCCE | RSVD |
* `---------------------------------------------'
* 63 62 61 60 59:0
* ^ ^ ^ ^ ^
* | | | | *-> R
* | | | |
* | | | *---------------> R/W
* | | *---------------------> R/W
* | *----------------------------> R/W
* *------------------------------------> R
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to s_eter. returning val 0x%llx\n", *regp););
return (*regp);
}
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & MASK64(62,60);
*regp = val;
/*
* Get new StrandID value for disrupting traps
*/
val = rsp->vcore_id;
/*
* Update the trap target StrandID value for
* all disrupting traps in our global error
* table.
*/
for (idx=0; error_table[idx].trap_type != INVALID_TRAP; idx++) {
if (error_table[idx].trap_class == DISRUPTING_TT) {
error_table[idx].trap_target = val;
}
}
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: access to s_eter. storing val 0x%llx\n", *regp);
lprintf(sp->gid, "ERROR_TRAP_GEN: access to s_eter: Updated all disrupting trap targets to CPU 0x%x\n", val);
lprintf(sp->gid, "ERROR_TRAP_GEN: Updated CPU Error Table\n");
dump_cpu_error_table(sp->gid, error_table);
lprintf(sp->gid, "ERROR_TRAP_GEN: END Updated CPU Error Table\n\n");
#endif
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
/*
* One register per l2$ bank (8 total)
* we define separate access routines.
*/
EAR_DEFINITION( l2_b0_esr ) {
return (l2_esr_access(0, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b1_esr ) {
return (l2_esr_access(1, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b2_esr ) {
return (l2_esr_access(2, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b3_esr ) {
return (l2_esr_access(3, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b4_esr ) {
return (l2_esr_access(4, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b5_esr ) {
return (l2_esr_access(5, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b6_esr ) {
return (l2_esr_access(6, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b7_esr ) {
return (l2_esr_access(7, sp, asi, addr, is_load, store_val, legion_access));
}
uint64_t l2_esr_access (int bank, EAR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
uint64_t val;
l2c_t *l2p;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
l2p = rpp->l2p;
reg = l2p->error_status[bank];
/*
* l2_esr:
* .--------------------------------------------------------------.
* |MEU|MEC|RW|MODA| VCID |LDAC|LDAU|LDWC|LDWU|LDRC|LDRU|LDSC|LDSU|
* `--------------------------------------------------------------'
* 63 62 61 60 59:54 53 52 51 50 49 48 47 46
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
* | | | | | | | | | | | | |
* | | | | | *----*----*----*----*----*----*----*
* | | | | | |
* | | | | | *--------------------> R/W1C
* | | | | *-----------------------------------------> RW
* | | | *-----------------------------------------------> RW
* | | *---------------------------------------------------> RW
* | *-------------------------------------------------------> R/W1C
* *-----------------------------------------------------------> R/W1C
*
* .------------------------------------------------------------.
* |LTC|LRF|LVF|DAC|DAU|DRC|DRU|DSC|DSU|VEC|VEU|LVC| RSVD1 |SYND|
* `------------------------------------------------------------'
* 45 44 43 42 41 40 39 38 37 36 35 34 33:28 27:0
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
* | | | | | | | | | | | | | |
* *---*---*---*---*----*---*---*---*---*---*---* | *-> RW
* | *--------> RO
* *-------------------------------------> R/W1C
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2_b%d_esr. returning val 0x%llx\n", bank, reg););
return (reg);
}
/*
* synchronize the read/modify/write
*/
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & ( MASK64(63,62)|MASK64(53,34) );
reg = reg & ~(val);
/*
* Update the MODA bit
*/
if (!(reg & ( MASK64(63,62)|MASK64(53,34) ))){
/* make sure MODA bit is off */
reg &= ~(MASK64(60,60));
}
l2p->error_status[bank] = reg;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2_b%d_esr. storing val 0x%llx\n", bank, reg););
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
EIR_DEFINITION( l2_b0_esr ) {
return (l2_esr_inject(0, sp, mask, errp));
}
EIR_DEFINITION( l2_b1_esr ) {
return (l2_esr_inject(1, sp, mask, errp));
}
EIR_DEFINITION( l2_b2_esr ) {
return (l2_esr_inject(2, sp, mask, errp));
}
EIR_DEFINITION( l2_b3_esr ) {
return (l2_esr_inject(3, sp, mask, errp));
}
EIR_DEFINITION( l2_b4_esr ) {
return (l2_esr_inject(4, sp, mask, errp));
}
EIR_DEFINITION( l2_b5_esr ) {
return (l2_esr_inject(5, sp, mask, errp));
}
EIR_DEFINITION( l2_b6_esr ) {
return (l2_esr_inject(6, sp, mask, errp));
}
EIR_DEFINITION( l2_b7_esr ) {
return (l2_esr_inject(7, sp, mask, errp));
}
bool_t l2_esr_inject (int bank, EIR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
bool_t new_trap, is_ready;
l2c_t *l2p;
char *err_string;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
l2p = rpp->l2p;
err_string = errp->error_status.err_inject_name;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
reg = l2p->error_status[bank];
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting l2_b%d_esr. old value 0x%llx\n", bank, reg);
#endif
/*
* See Register diagram in the register
* access routine for l2_esr.
*/
if (mask & CE_MASK) { /* Correctable Error */
if (l2_esr_access (bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(36,36)) {
/* VEC bit is already set in l2_esr
* Update the MEC bit
*/
reg |= MASK64(62,62);
new_trap = false;
} else {
/*
* Inject the ESR bit(s) specified
* and update the VEC bit.
*/
reg |= mask;
if (reg & CE_MASK) {
/* make sure VEC bit is on */
reg |= MASK64(36,36);
if (strncmp(sp->eep->error_str, "MAL2C_", 6) == 0)
reg |= MASK64(60,60); /* Set the MODA bit */
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting l2_b%d_esr. new value 0x%llx\n", bank, reg);
#endif
l2p->error_status[bank] = reg;
is_ready = false;
/* This error will be forwarded to the core and the error name
* defined by error_inject_name field of this error_entry will be
* injected into the core. The core error injection code will try
* to grab this lock so releasing it here before injecting core error
*/
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
/*
* Checking L2_eer to see if CEEN is set
*/
if (l2_eer_access(bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(0,0)){
is_ready = true;
/*
* The hw correctable L2$ error are posted as L2C disrupting traps
*/
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: This L2$ error in l2_b%d_esr is actually posted as %s error trap\n", bank, err_string);
#endif
ss_inject_error_trap(sp, err_string, 0, 0);
}
/*
* The trap has already been posted as L2C error trap.
* Hence setting new_trap to false
*/
new_trap = false;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: CEEN in L2 Error Enable Register is %s\n",
is_ready ? "ON" : "OFF" );
#endif
}
}
} else { /*Uncorrectable Error*/
if (l2_esr_access (bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(35,35)) {
/* VEU bit is already set in l2_esr
* Update the MEU bit
*/
reg |= MASK64(63,63);
new_trap = false;
} else {
/*
* Inject the ESR bit(s) specified
* and update the VEU bit.
*/
reg |= mask;
if (reg & UE_MASK) {
/* make sure VEU bit is on */
reg |= MASK64(35,35);
if (strncmp(sp->eep->error_str, "MAL2U_", 6) == 0)
reg |= MASK64(60,60); /* Set the MODA bit */
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting l2_b%d_esr. new value 0x%llx\n", bank, reg);
#endif
l2p->error_status[bank] = reg;
is_ready = false;
/* This error will be forwarded to the core and the error name
* defined by error_inject_name field of this error_entry will be
* injected into the core. The core error injection code will try
* to grab this lock so releasing it here before injecting core error
*/
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
/*
* Checking L2_eer to see if NCEEN is set
*/
if (l2_eer_access(bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(1,1)){
is_ready = true;
/*
* The hw uncorrectable L2$ error are posted as precise traps
*/
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: This L2$ error in l2_b%d_esr is actually posted as %s error trap\n", bank, err_string);
#endif
ss_inject_error_trap(sp, err_string, 0, 0);
}
/*
* The trap has already been posted as L2C error trap.
* Hence setting new_trap to false
*/
new_trap = false;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: NCEEN in L2 Error Enable Register is %s\n",
is_ready ? "ON" : "OFF" );
#endif
}
}
}
return (new_trap);
}
/*
* One register per l2$ bank (8 total)
* we define separate access routines.
*/
EAR_DEFINITION( l2_b0_eer ) {
return (l2_eer_access(0, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b1_eer ) {
return (l2_eer_access(1, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b2_eer ) {
return (l2_eer_access(2, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b3_eer ) {
return (l2_eer_access(3, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b4_eer ) {
return (l2_eer_access(4, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b5_eer ) {
return (l2_eer_access(5, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b6_eer ) {
return (l2_eer_access(6, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2_b7_eer ) {
return (l2_eer_access(7, sp, asi, addr, is_load, store_val, legion_access));
}
uint64_t l2_eer_access (int bank, EAR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
l2c_t *l2p;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
l2p = rpp->l2p;
reg = l2p->error_enable[bank];
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2_b%d_eer. returning val 0x%llx\n", bank, reg););
return (reg);
}
reg = store_val & MASK64(2,0);
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2_b%d_eer. storing val 0x%llx\n", bank, reg););
return 0; /* ignored for store operations */
}
/*
* L2 notdata registers, one per l2$ bank (8 total)
* we define separate access routines.
*/
EAR_DEFINITION( l2nd_b0_esr ) {
return (l2nd_esr_access(0, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b1_esr ) {
return (l2nd_esr_access(1, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b2_esr ) {
return (l2_esr_access(2, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b3_esr ) {
return (l2nd_esr_access(3, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b4_esr ) {
return (l2nd_esr_access(4, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b5_esr ) {
return (l2nd_esr_access(5, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b6_esr ) {
return (l2nd_esr_access(6, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( l2nd_b7_esr ) {
return (l2nd_esr_access(7, sp, asi, addr, is_load, store_val, legion_access));
}
uint64_t l2nd_esr_access (int bank, EAR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
uint64_t val;
l2c_t *l2p;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
l2p = rpp->l2p;
reg = l2p->error_notdata[bank];
/*
* l2nd_esr:
*
* .-------------------------------------------------------------.
* | RESERVED |MEND|RW|NDSP|NDDM| RSVD | VCID | ADDRESS | RSVD |
* `-------------------------------------------------------------'
* 63:52 51 50 49 48 47:46 45:40 39:4 3:0
* ^ ^ ^ ^ ^ ^ ^ ^ ^
* | | | | | | | | |
* | | | *----* | *---------* *---> RO
* | | | | | |
* | | | | | *---------------> RW
* | | | | *----------------------------> RO
* | | | *-------------------------------------> R/W1C
* | | *-------------------------------------------> RW
* | *-----------------------------------------------> R/W1C
* *-------------------------------------------------------> RO
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2nd_b%d_esr. returning val 0x%llx\n", bank, reg););
return (reg);
}
/*
* synchronize the read/modify/write
*/
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & ( MASK64(51,51)|MASK64(49,48) );
reg = reg & ~(val);
l2p->error_notdata[bank] = reg;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to l2nd_b%d_esr. storing val 0x%llx\n", bank, reg););
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
EIR_DEFINITION( l2nd_b0_esr ) {
return (l2nd_esr_inject(0, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b1_esr ) {
return (l2nd_esr_inject(1, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b2_esr ) {
return (l2nd_esr_inject(2, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b3_esr ) {
return (l2nd_esr_inject(3, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b4_esr ) {
return (l2nd_esr_inject(4, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b5_esr ) {
return (l2nd_esr_inject(5, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b6_esr ) {
return (l2nd_esr_inject(6, sp, mask, errp));
}
EIR_DEFINITION( l2nd_b7_esr ) {
return (l2nd_esr_inject(7, sp, mask, errp));
}
bool_t l2nd_esr_inject (int bank, EIR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
bool_t new_trap, is_ready;
l2c_t *l2p;
char *err_string;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
l2p = rpp->l2p;
err_string = errp->error_status.err_inject_name;
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
reg = l2p->error_notdata[bank];
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting l2nd_b%d_esr. old value 0x%llx\n", bank, reg);
#endif
/*
* See Register diagram in the register
* access routine for l2nd_esr.
*/
if (l2_esr_access (bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(49,48)) {
/*
* Multiple Not Data errors, update the MEND bit
*/
reg |= MASK64(51,51);
new_trap = false;
} else {
/*
* Inject the ESR bit(s) specified
*/
reg |= mask;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting l2nd_b%d_esr. new value 0x%llx\n", bank, reg);
#endif
l2p->error_notdata[bank] = reg;
is_ready = false;
/* This error will be forwarded to the core and the error name
* defined by error_inject_name field of this error_entry will be
* injected into the core. The core error injection code will try
* to grab this lock so releasing it here before injecting core error
*/
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
/*
* Checking L2_eer to see if NCEEN is set
*/
if (l2_eer_access(bank, sp, ASI_NA, ADDR_NA, true, 0, true) & MASK64(1,1)){
is_ready = true;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: This L2$ not data error in l2nd_b%d_esr is actually posted as %s error trap\n", bank, err_string);
#endif
ss_inject_error_trap(sp, err_string, 0, 0);
}
/*
* The trap has already been posted.
* Hence setting new_trap to false
*/
new_trap = false;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: NCEEN in L2 Error Enable Register is %s\n",
is_ready ? "ON" : "OFF" );
#endif
}
return (new_trap);
}
/*
* One register per dram channel(8 total)
* we define separate access routines.
*/
EAR_DEFINITION( dram_b0_esr ) {
return (dram_esr_access(0, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( dram_b1_esr ) {
return (dram_esr_access(1, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( dram_b2_esr ) {
return (dram_esr_access(2, sp, asi, addr, is_load, store_val, legion_access));
}
EAR_DEFINITION( dram_b3_esr ) {
return (dram_esr_access(3, sp, asi, addr, is_load, store_val, legion_access));
}
uint64_t dram_esr_access (int bank, EAR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
uint64_t val;
mcu_bank_t *mbankp;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
mbankp = rpp->mbankp;
reg = mbankp->error_status;
/*
* dram_esr:
* .-------------------------------------------------------------------------.
* | MEU | MEC | DAC | DAU | DSC | DSU | DBU | MEB | FBU | FBR | RSVD | SYND |
* `-------------------------------------------------------------------------'
* 63 62 61 60 59 58 57 56 55 54 53:16 15:0
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
* | | | | | | | | | | | |
* *-----*-----*-----*-----*-----*-----*-----*-----*-----* | *----> RW
* | *-----------> RO
* *-----------------------------------------------> R/W1C
*
*/
if (is_load) {
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to dram_b%d_esr. returning val 0x%llx\n", bank, reg););
return (reg);
}
/*
* synchronize the read/modify/write
*/
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
val = store_val & MASK64(63,54);
reg = reg & ~(val);
mbankp->error_status = reg;
DBGERRTRAP( lprintf(sp->gid, "ERROR_TRAP_GEN: access to dram_b%d_esr. storing val 0x%llx\n", bank, reg););
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
return 0; /* ignored for store operations */
}
EIR_DEFINITION( dram_b0_esr ) {
return (dram_esr_inject(0, sp, mask, errp));
}
EIR_DEFINITION( dram_b1_esr ) {
return (dram_esr_inject(1, sp, mask, errp));
}
EIR_DEFINITION( dram_b2_esr ) {
return (dram_esr_inject(2, sp, mask, errp));
}
EIR_DEFINITION( dram_b3_esr ) {
return (dram_esr_inject(3, sp, mask, errp));
}
bool_t dram_esr_inject (int bank, EIR_ARGS) {
ss_proc_t *rpp;
sparcv9_cpu_t *v9p;
ss_strand_t *rsp;
uint64_t reg;
uint64_t l2_esr_mask; /* error bits to be set in L2$ ESR */
bool_t new_trap;
mcu_bank_t *mbankp;
int l2_bank;
int err_name_len;
rpp = (ss_proc_t *)(sp->config_procp->procp);
v9p = (sparcv9_cpu_t *)(sp->specificp);
rsp = v9p->impl_specificp;
mbankp = &(rpp->mbankp[bank]);
pthread_mutex_lock(&rpp->ss_err_state.err_lock);
reg = mbankp->error_status;
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dram_b%d_esr. old value 0x%llx\n", bank, reg);
#endif
/*
* See Register diagram in the register
* access routine for dram_esr.
*
* Checking only for existing errors. See
* N2 PRM Table 12-31.
*
*/
switch (mask) {
case DRAM_DAC_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEC_bit;
else if ((reg & DRAM_DSC_bit) | (reg & DRAM_DAC_bit) | (reg & DRAM_FBR_bit))
reg |= DRAM_MEC_bit;
else /* existing error == DBU or no existing error */
reg |= DRAM_DAC_bit;
l2_esr_mask = BIT(42);
break;
case DRAM_DAU_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEU_bit;
else /* existing error == (DBU | DSC | DAC | FBR) or no existing error */
reg |= DRAM_DAU_bit;
l2_esr_mask = BIT(41);
break;
case DRAM_DSC_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEC_bit;
else if ((reg & DRAM_DSC_bit) | (reg & DRAM_DAC_bit) | (reg & DRAM_FBR_bit))
reg |= DRAM_MEC_bit;
else /* existing error == DBU or no existing error */
reg |= DRAM_DSC_bit;
l2_esr_mask = BIT(38);
break;
case DRAM_DSU_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEU_bit;
else /* existing error == (DBU | DSC | DAC | FBR) or no existing error */
reg |= DRAM_DSU_bit;
l2_esr_mask = BIT(37);
break;
case DRAM_DBU_bit:
if (reg & DRAM_DBU_bit)
reg |= DRAM_MEB_bit;
else /* existing error == (DSU | DAU | FBU | DSC | DAC | FBR) or no existing error */
reg |= DRAM_DBU_bit;
break;
case DRAM_FBU_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEU_bit;
else /* existing error == (DBU | DSC | DAC | FBR) or no existing error */
reg |= DRAM_FBU_bit;
break;
case DRAM_FBR_bit:
if ((reg & DRAM_DSU_bit) | (reg & DRAM_DAU_bit) | (reg & DRAM_FBU_bit))
reg |= DRAM_MEC_bit;
else if ((reg & DRAM_DSC_bit) | (reg & DRAM_DAC_bit) | (reg & DRAM_FBR_bit))
reg |= DRAM_MEC_bit;
else /* existing error == DBU or no existing error */
reg |= DRAM_FBR_bit;
break;
default:
EXEC_WARNING( ("Invalid dram_b%d_esr mask = 0x%llx \n", bank, mask) );
}
#if (ERROR_TRAP_GEN > 1)
lprintf(sp->gid, "ERROR_TRAP_GEN: injecting dram_b%d_esr. new value 0x%llx\n", bank, reg);
#endif
mbankp->error_status = reg;
/* The DRAM error info is also captured in the L2$ ESRs and ultimately
* presented to the core as L2C error (for correctable errors). The l2_esr_inject
* code will try to grab this lock so releasing it here.
*/
pthread_mutex_unlock(&rpp->ss_err_state.err_lock);
/* Mapping dram banks to the L2$ banks*/
err_name_len = strlen(errp->error_name);
l2_bank = *(errp->error_name + err_name_len -1) -'0';
l2_esr_inject(l2_bank, sp, l2_esr_mask, errp);
/*
* The trap has already been posted as L2C error trap.
* Hence setting new_trap to false
*/
new_trap = false;
return (new_trap);
}
#endif /* } ERROR_TRAP_GEN */
bool_t n2_sp_interrupt(simcpu_t * sp, uint64_t intr_level, char * error_name) {
FIXME_WARNING(("SP interrupts not supported on Niagara2\n" \
"\terror name = %s, intr_level = %d\n",
error_name, intr_level));
return false;
}
int no_niagara2_error_trap_gen;