summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C')
-rw-r--r--src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C800
1 files changed, 694 insertions, 106 deletions
diff --git a/src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C b/src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C
index 5e52c1d4f..9fb6ba757 100644
--- a/src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C
+++ b/src/usr/hwpf/hwp/utility_procedures/mss_unmask_errors.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_unmask_errors.C,v 1.6 2014/03/11 03:07:42 gollub Exp $
+// $Id: mss_unmask_errors.C,v 1.8 2014/04/08 16:15:56 gollub Exp $
//------------------------------------------------------------------------------
// Don't forget to create CVS comments when you check in your changes!
//------------------------------------------------------------------------------
@@ -38,6 +38,32 @@
// | | | to use cmd complete attention instead.
// 1.5 | 10/31/13 | gollub | For DD1 use MBSPA[8], for DD2 using MBSPA[0].
// 1.6 | 10/03/14 | gollub | Unmkask MBS_FIR_REG[15]: dir_ce for DD2 only
+// 1.7 |07-APR-14 | gollub | Added mss_unmask_pervasive_errors
+// | | | TP_PERV_LFIR: 0,13,14 change to recoverable unmask
+// | | | NEST_PERV_LFIR: 0 changed to recoverable unmask
+// | | | MEM_PERV_LFIR: 0 changed to recoverable unmask
+// | | |
+// | | | MBS_FIR_REG: 29,30 change to recoverable unmask
+// | | | MBECCFIR: 48,50,51 change to recoverable unmask
+// | | | MBSFIR: 15,16 change to recoverable unmask
+// | | | SCAC_LFIR: 35,35 change to recoverable unmask
+// | | | MBAFIR 7 changed to channel checkstop
+// | | | MBAFIR 15,16 change to recoverable unmask
+// | | | DDRPHY_FIR_REG 53 change to recoverable unmask
+// | | | MBACALFIR 19,20,21 change to recoverable unmask
+// | | |
+// | | | MBS_FIR_REG 6 changed to channel checkstop
+// | | | MBSFIR 0 changed to channel checkstop
+// | | | MBAFIR 3,5 changed to channel checkstop
+// | | | MBACALFIR 13,18 changed to channel checkstop
+// | | |
+// | | | New DD2: MBS_FIR_REG 29 recoverable masked
+// | | | New DD2: MBS_FIR_REG 30 channel checkstop unmasked
+// | | | New DD2: MBSFIR 2 recoverable masked
+// | | | New DD2: MBSFIR 3 recoverable masked
+// | | | New DD2: MBAFIR 8 channel checkstop unmasked
+// | | | New DD2: MBACALFIR 20,21,22 recoverable masked
+// 1.8 |08-APR-14 | gollub | Removed debug trace
//------------------------------------------------------------------------------
// Includes
@@ -54,6 +80,384 @@ using namespace fapi;
//------------------------------------------------------------------------------
+// mss_unmask_pervasive_errors
+//------------------------------------------------------------------------------
+
+fapi::ReturnCode mss_unmask_pervasive_errors( const fapi::Target & i_target,
+ fapi::ReturnCode i_bad_rc )
+
+{
+
+ FAPI_INF("ENTER mss_unmask_pervasive_errors()");
+
+ fapi::ReturnCode l_rc;
+ uint32_t l_ecmd_rc = 0;
+
+ //*************************
+ //*************************
+ // TP_PERV_LFIR
+ //*************************
+ //*************************
+
+ ecmdDataBufferBase l_tp_perv_lfir_mask_or(64);
+ ecmdDataBufferBase l_tp_perv_lfir_mask_and(64);
+ ecmdDataBufferBase l_tp_perv_lfir_action0(64);
+ ecmdDataBufferBase l_tp_perv_lfir_action1(64);
+
+ // TODO: Here is where I could clear bits that were bogus, before I unmask
+ // them. But typically we are expecting the bit set at this point
+ // to be valid errors for PRD to log.
+
+
+ //(Action0, Action1, Mask)
+ //
+ // (0,0,0) = checkstop
+ // (0,1,0) = recoverable error
+ // (1,0,0) = report unused
+ // (1,1,0) = machine check
+ // (x,x,1) = error is masked
+
+
+ // Read action0
+ l_rc = fapiGetScom_w_retry(i_target, TP_PERV_LFIR_ACT0_0x01040010, l_tp_perv_lfir_action0);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Read action1
+ l_rc = fapiGetScom_w_retry(i_target, TP_PERV_LFIR_ACT1_0x01040011, l_tp_perv_lfir_action1);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ l_ecmd_rc |= l_tp_perv_lfir_mask_or.flushTo0();
+ l_ecmd_rc |= l_tp_perv_lfir_mask_and.flushTo1();
+
+ // 0 CFIR internal parity error recoverable unmask
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(0);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(0);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_and.clearBit(0);
+
+ // 1 GPIO (PCB error) recoverable mask (forever)
+ // 2 CC (PCB error) recoverable mask (forever)
+ // 3 CC (OPCG, parity, scan collision) recoverable mask (forever)
+ // 4 PSC (PCB error) recoverable mask (forever)
+ // 5 PSC (parity error) recoverable mask (forever)
+ // 6 Thermal (parity error) recoverable mask (forever)
+ // 7 Thermal (PCB error) recoverable mask (forever)
+ // 8 Thermal (critical Trip error) recoverable mask (forever)
+ // 9 Thermal (fatal Trip error) recoverable mask (forever)
+ // 10 Thermal (Voltage trip error) recoverable mask (forever)
+ // 11 Trace Array recoverable mask (forever)
+ // 12 Trace Array recoverable mask (forever)
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(1,12);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(1,12);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_or.setBit(1,12);
+
+ // 13 ITR recoverable unmask
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(13);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(13);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_and.clearBit(13);
+
+ // 14 ITR recoverable unmask
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(14);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(14);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_and.clearBit(14);
+
+
+ // 15 ITR (itr_tc_pcbsl_slave_fir_err) recoverable mask (forever)
+ // 16 PIB recoverable mask (forever)
+ // 17 PIB recoverable mask (forever)
+ // 18 PIB recoverable mask (forever)
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(15,4);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(15,4);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_or.setBit(15,4);
+
+
+ // NOTE: 19 and 20 already cleared and unmasked in cen_mem_pll_setup.C
+ // 19 nest PLLlock recoverable unmask
+ // 20 mem PLLlock recoverable unmask
+
+ // 21:39 unused local errors recoverable mask (forever)
+ // 40 local xstop in another chiplet recoverable mask (forever)
+ l_ecmd_rc |= l_tp_perv_lfir_action0.clearBit(21,20);
+ l_ecmd_rc |= l_tp_perv_lfir_action1.setBit(21,20);
+ l_ecmd_rc |= l_tp_perv_lfir_mask_or.setBit(21,20);
+
+ // 41:63 Reserved not implemented, so won't touch these
+
+
+ if(l_ecmd_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+
+ l_rc.setEcmdError(l_ecmd_rc);
+ return l_rc;
+ }
+
+ // Write action0
+ l_rc = fapiPutScom_w_retry(i_target, TP_PERV_LFIR_ACT0_0x01040010, l_tp_perv_lfir_action0);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write action1
+ l_rc = fapiPutScom_w_retry(i_target, TP_PERV_LFIR_ACT1_0x01040011, l_tp_perv_lfir_action1);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ // Write mask OR
+ l_rc = fapiPutScom_w_retry(i_target, TP_PERV_LFIR_MASK_OR_0x0104000F, l_tp_perv_lfir_mask_or);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write mask AND
+ l_rc = fapiPutScom_w_retry(i_target, TP_PERV_LFIR_MASK_AND_0x0104000E, l_tp_perv_lfir_mask_and);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ //*************************
+ //*************************
+ // NEST_PERV_LFIR
+ //*************************
+ //*************************
+
+ ecmdDataBufferBase l_nest_perv_lfir_mask_or(64);
+ ecmdDataBufferBase l_nest_perv_lfir_mask_and(64);
+ ecmdDataBufferBase l_nest_perv_lfir_action0(64);
+ ecmdDataBufferBase l_nest_perv_lfir_action1(64);
+
+ // TODO: Here is where I could clear bits that were bogus, before I unmask
+ // them. But typically we are expecting the bit set at this point
+ // to be valid errors for PRD to log.
+
+
+ //(Action0, Action1, Mask)
+ //
+ // (0,0,0) = checkstop
+ // (0,1,0) = recoverable error
+ // (1,0,0) = report unused
+ // (1,1,0) = machine check
+ // (x,x,1) = error is masked
+
+ l_ecmd_rc |= l_nest_perv_lfir_action0.flushTo0();
+ l_ecmd_rc |= l_nest_perv_lfir_action1.flushTo0();
+ l_ecmd_rc |= l_nest_perv_lfir_mask_or.flushTo0();
+ l_ecmd_rc |= l_nest_perv_lfir_mask_and.flushTo1();
+
+ // 0 CFIR internal parity error recoverable unmask
+ l_ecmd_rc |= l_nest_perv_lfir_action0.clearBit(0);
+ l_ecmd_rc |= l_nest_perv_lfir_action1.setBit(0);
+ l_ecmd_rc |= l_nest_perv_lfir_mask_and.clearBit(0);
+
+ // 1 GPIO (PCB error) recoverable mask (forever)
+ // 2 CC (PCB error) recoverable mask (forever)
+ // 3 CC (OPCG, parity, scan collision) recoverable mask (forever)
+ // 4 PSC (PCB error) recoverable mask (forever)
+ // 5 PSC (parity error) recoverable mask (forever)
+ // 6 Thermal (parity error) recoverable mask (forever)
+ // 7 Thermal (PCB error) recoverable mask (forever)
+ // 8 Thermal (critical Trip error) recoverable mask (forever)
+ // 9 Thermal (fatal Trip error) recoverable mask (forever)
+ // 10 Thermal (Voltage trip error) recoverable mask (forever)
+ // 11 Trace Array recoverable mask (forever)
+ // 12 Trace Array recoverable mask (forever)
+ // 13:39 unused local errors recoverable mask (forever)
+ // 40 local xstop in another chiplet recoverable mask (forever)
+ l_ecmd_rc |= l_nest_perv_lfir_action0.clearBit(1,40);
+ l_ecmd_rc |= l_nest_perv_lfir_action1.setBit(1,40);
+ l_ecmd_rc |= l_nest_perv_lfir_mask_or.setBit(1,40);
+
+ // 41:63 Reserved not implemented, so won't touch these
+
+
+ if(l_ecmd_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+
+ l_rc.setEcmdError(l_ecmd_rc);
+ return l_rc;
+ }
+
+ // Write action0
+ l_rc = fapiPutScom_w_retry(i_target, NEST_PERV_LFIR_ACT0_0x02040010, l_nest_perv_lfir_action0);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write action1
+ l_rc = fapiPutScom_w_retry(i_target, NEST_PERV_LFIR_ACT1_0x02040011, l_nest_perv_lfir_action1);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ // Write mask OR
+ l_rc = fapiPutScom_w_retry(i_target, NEST_PERV_LFIR_MASK_OR_0x0204000F, l_nest_perv_lfir_mask_or);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write mask AND
+ l_rc = fapiPutScom_w_retry(i_target, NEST_PERV_LFIR_MASK_AND_0x0204000E, l_nest_perv_lfir_mask_and);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ //*************************
+ //*************************
+ // MEM_PERV_LFIR
+ //*************************
+ //*************************
+
+ ecmdDataBufferBase l_mem_perv_lfir_mask_or(64);
+ ecmdDataBufferBase l_mem_perv_lfir_mask_and(64);
+ ecmdDataBufferBase l_mem_perv_lfir_action0(64);
+ ecmdDataBufferBase l_mem_perv_lfir_action1(64);
+
+ // TODO: Here is where I could clear bits that were bogus, before I unmask
+ // them. But typically we are expecting the bit set at this point
+ // to be valid errors for PRD to log.
+
+
+ //(Action0, Action1, Mask)
+ //
+ // (0,0,0) = checkstop
+ // (0,1,0) = recoverable error
+ // (1,0,0) = report unused
+ // (1,1,0) = machine check
+ // (x,x,1) = error is masked
+
+ l_ecmd_rc |= l_mem_perv_lfir_action0.flushTo0();
+ l_ecmd_rc |= l_mem_perv_lfir_action1.flushTo0();
+ l_ecmd_rc |= l_mem_perv_lfir_mask_or.flushTo0();
+ l_ecmd_rc |= l_mem_perv_lfir_mask_and.flushTo1();
+
+ // 0 CFIR internal parity error recoverable unmask
+ l_ecmd_rc |= l_mem_perv_lfir_action0.clearBit(0);
+ l_ecmd_rc |= l_mem_perv_lfir_action1.setBit(0);
+ l_ecmd_rc |= l_mem_perv_lfir_mask_and.clearBit(0);
+
+ // 1 GPIO (PCB error) recoverable mask (forever)
+ // 2 CC (PCB error) recoverable mask (forever)
+ // 3 CC (OPCG, parity, scan collision) recoverable mask (forever)
+ // 4 PSC (PCB error) recoverable mask (forever)
+ // 5 PSC (parity error) recoverable mask (forever)
+ // 6 Thermal (parity error) recoverable mask (forever)
+ // 7 Thermal (PCB error) recoverable mask (forever)
+ // 8 Thermal (critical Trip error) recoverable mask (forever)
+ // 9 Thermal (fatal Trip error) recoverable mask (forever)
+ // 10 Thermal (Voltage trip error) recoverable mask (forever)
+ // 11 mba01 Trace Array recoverable mask (forever)
+ // 12 mba01 Trace Array recoverable mask (forever)
+ // 13 mba23 Trace Array recoverable mask (forever)
+ // 14 mba23 Trace Array recoverable mask (forever)
+ // 15:39 unused local errors recoverable mask (forever)
+ // 40 local xstop in another chiplet recoverable mask (forever)
+ l_ecmd_rc |= l_mem_perv_lfir_action0.clearBit(1,40);
+ l_ecmd_rc |= l_mem_perv_lfir_action1.setBit(1,40);
+ l_ecmd_rc |= l_mem_perv_lfir_mask_or.setBit(1,40);
+
+ // 41:63 Reserved not implemented, so won't touch these
+
+
+ if(l_ecmd_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+
+ l_rc.setEcmdError(l_ecmd_rc);
+ return l_rc;
+ }
+
+ // Write action0
+ l_rc = fapiPutScom_w_retry(i_target, MEM_PERV_LFIR_ACT0_0x03040010, l_mem_perv_lfir_action0);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write action1
+ l_rc = fapiPutScom_w_retry(i_target, MEM_PERV_LFIR_ACT1_0x03040011, l_mem_perv_lfir_action1);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+ // Write mask OR
+ l_rc = fapiPutScom_w_retry(i_target, MEM_PERV_LFIR_MASK_OR_0x0304000F, l_mem_perv_lfir_mask_or);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+ // Write mask AND
+ l_rc = fapiPutScom_w_retry(i_target, MEM_PERV_LFIR_MASK_AND_0x0304000E, l_mem_perv_lfir_mask_and);
+ if(l_rc)
+ {
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
+
+
+
+ FAPI_INF("EXIT mss_unmask_pervasive_errors()");
+
+ return i_bad_rc;
+}
+
+
+
+
+//------------------------------------------------------------------------------
// mss_unmask_inband_errors
//------------------------------------------------------------------------------
@@ -62,7 +466,7 @@ fapi::ReturnCode mss_unmask_inband_errors( const fapi::Target & i_target,
{
- FAPI_INF("ENTER mss_unmask_inband_errors()");
+ FAPI_INF("ENTER mss_unmask_inband_errors()");
fapi::ReturnCode l_rc;
uint32_t l_ecmd_rc = 0;
@@ -79,6 +483,18 @@ fapi::ReturnCode mss_unmask_inband_errors( const fapi::Target & i_target,
ecmdDataBufferBase l_mbs_fir_action0(64);
ecmdDataBufferBase l_mbs_fir_action1(64);
+ uint8_t l_dd2_fir_bit_defn_changes = 0;
+
+ // Get attribute that tells us if mbspa 0 cmd complete attention is fixed for dd2
+ l_rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES, &i_target, l_dd2_fir_bit_defn_changes);
+ if(l_rc)
+ {
+ FAPI_ERR("Error getting ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES");
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
// Read mask
l_rc = fapiGetScom_w_retry(i_target, MBS_FIR_MASK_REG_0x02011403, l_mbs_fir_mask);
if(l_rc)
@@ -136,9 +552,10 @@ fapi::ReturnCode mss_unmask_inband_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbs_fir_action1.setBit(5);
l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(5);
- // 6 int_buffer_ue recoverable unmask
+ // 6 int_buffer_ue channel checkstop unmask
+ // HW278850: 8B ecc UE from SRB,PFB not transformed to SUE when allocating into L4
l_ecmd_rc |= l_mbs_fir_action0.clearBit(6);
- l_ecmd_rc |= l_mbs_fir_action1.setBit(6);
+ l_ecmd_rc |= l_mbs_fir_action1.clearBit(6);
l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(6);
// 7 int_buffer_sue recoverable mask (forever)
@@ -252,17 +669,55 @@ fapi::ReturnCode mss_unmask_inband_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbs_fir_action1.setBit(28);
l_ecmd_rc |= l_mbs_fir_mask_or.setBit(28);
- // 29 internal_scom_error recoverable mask (tbd)
- l_ecmd_rc |= l_mbs_fir_action0.clearBit(29);
- l_ecmd_rc |= l_mbs_fir_action1.setBit(29);
- l_ecmd_rc |= l_mbs_fir_mask_or.setBit(29);
+ if (l_dd2_fir_bit_defn_changes)
+ {
+ // 29 dir_purge_ce recoverable mask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(29);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(29);
+ l_ecmd_rc |= l_mbs_fir_mask_or.setBit(29);
+
+ // 30 proximal_ce_ue channel checkstop mask (until unmask_fetch_errors)
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(30);
+ l_ecmd_rc |= l_mbs_fir_action1.clearBit(30);
+ l_ecmd_rc |= l_mbs_fir_mask_or.setBit(30);
+
+ // 31 spare recoverable mask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(31);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(31);
+ l_ecmd_rc |= l_mbs_fir_mask_or.setBit(31);
+
+ // 32 spare recoverable mask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(32);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(32);
+ l_ecmd_rc |= l_mbs_fir_mask_or.setBit(33);
+
+ // 33 internal_scom_error recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(33);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(33);
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(33);
+
+ // 34 internal_scom_error_copy recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(34);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(34);
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(34);
+
+ // 35:63 Reserved not implemented, so won't touch these
+ }
+
+ else
+ {
+ // 29 internal_scom_error recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(29);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(29);
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(29);
- // 30 internal_scom_error_copy recoverable mask (tbd)
- l_ecmd_rc |= l_mbs_fir_action0.clearBit(30);
- l_ecmd_rc |= l_mbs_fir_action1.setBit(30);
- l_ecmd_rc |= l_mbs_fir_mask_or.setBit(30);
+ // 30 internal_scom_error_copy recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_action0.clearBit(30);
+ l_ecmd_rc |= l_mbs_fir_action1.setBit(30);
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(30);
- // 31:63 Reserved not implemented, so won't touch these
+ // 31:63 Reserved not implemented, so won't touch these
+ }
if(l_ecmd_rc)
{
@@ -418,10 +873,10 @@ fapi::ReturnCode mss_unmask_ddrphy_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_ddrphy_fir_action1.setBit(52);
l_ecmd_rc |= l_ddrphy_fir_mask_and.clearBit(52);
- // 53 ddr01_fir_parity_err recoverable mask (forever)
+ // 53 ddr01_fir_parity_err recoverable unmask
l_ecmd_rc |= l_ddrphy_fir_action0.clearBit(53);
l_ecmd_rc |= l_ddrphy_fir_action1.setBit(53);
- l_ecmd_rc |= l_ddrphy_fir_mask_or.setBit(53);
+ l_ecmd_rc |= l_ddrphy_fir_mask_and.clearBit(53);
// 54 Reserved recoverable mask (forever)
l_ecmd_rc |= l_ddrphy_fir_action0.clearBit(54);
@@ -561,6 +1016,27 @@ fapi::ReturnCode mss_unmask_ddrphy_errors( const fapi::Target & i_target,
ecmdDataBufferBase l_mbafir_action0(64);
ecmdDataBufferBase l_mbafir_action1(64);
+ uint8_t l_dd2_fir_bit_defn_changes = 0;
+ fapi::Target l_targetCentaur;
+
+ // Get Centaur target for the given MBA
+ l_rc = fapiGetParentChip(i_target, l_targetCentaur);
+ if(l_rc)
+ {
+ FAPI_ERR("Error getting Centaur parent target for the given MBA");
+ return l_rc;
+ }
+
+ // Get attribute that tells us if mbspa 0 cmd complete attention is fixed for dd2
+ l_rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES, &l_targetCentaur, l_dd2_fir_bit_defn_changes);
+ if(l_rc)
+ {
+ FAPI_ERR("Error getting ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES");
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
// Read mask
l_rc = fapiGetScom_w_retry(i_target,
@@ -607,9 +1083,9 @@ fapi::ReturnCode mss_unmask_ddrphy_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbafir_action1.setBit(2);
l_ecmd_rc |= l_mbafir_mask_or.setBit(2);
- // 3 Internal_fsm_error recoverable unmask
+ // 3 Internal_fsm_error channel checkstop unmask
l_ecmd_rc |= l_mbafir_action0.clearBit(3);
- l_ecmd_rc |= l_mbafir_action1.setBit(3);
+ l_ecmd_rc |= l_mbafir_action1.clearBit(3);
l_ecmd_rc |= l_mbafir_mask_and.clearBit(3);
// 4 MCBIST_Error recoverable mask (forever)
@@ -617,9 +1093,9 @@ fapi::ReturnCode mss_unmask_ddrphy_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbafir_action1.setBit(4);
l_ecmd_rc |= l_mbafir_mask_or.setBit(4);
- // 5 scom_cmd_reg_pe recoverable unmask
+ // 5 scom_cmd_reg_pe channel checkstop unmask
l_ecmd_rc |= l_mbafir_action0.clearBit(5);
- l_ecmd_rc |= l_mbafir_action1.setBit(5);
+ l_ecmd_rc |= l_mbafir_action1.clearBit(5);
l_ecmd_rc |= l_mbafir_mask_and.clearBit(5);
// 6 channel_chkstp_err channel checkstop unmask
@@ -627,25 +1103,40 @@ fapi::ReturnCode mss_unmask_ddrphy_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbafir_action1.clearBit(6);
l_ecmd_rc |= l_mbafir_mask_and.clearBit(6);
- // 7 wrd_caw2_data_ce_ue_err recoverable masked (until mss_unmask_maint_errors)
+ // 7 wrd_caw2_data_ce_ue_err channel checkstop masked (until mss_unmask_maint_errors)
l_ecmd_rc |= l_mbafir_action0.clearBit(7);
- l_ecmd_rc |= l_mbafir_action1.setBit(7);
+ l_ecmd_rc |= l_mbafir_action1.clearBit(7);
l_ecmd_rc |= l_mbafir_mask_or.setBit(7);
- // 8:14 RESERVED recoverable mask (forever)
- l_ecmd_rc |= l_mbafir_action0.clearBit(8,7);
- l_ecmd_rc |= l_mbafir_action1.setBit(8,7);
- l_ecmd_rc |= l_mbafir_mask_or.setBit(8,7);
+ if (l_dd2_fir_bit_defn_changes)
+ {
+ // 8 maint_1hot_st_error_dd2 channel checkstop unmask
+ l_ecmd_rc |= l_mbafir_action0.clearBit(8);
+ l_ecmd_rc |= l_mbafir_action1.clearBit(8);
+ l_ecmd_rc |= l_mbafir_mask_and.clearBit(8);
+ }
+ else
+ {
+ // 8 RESERVED recoverable mask (forever)
+ l_ecmd_rc |= l_mbafir_action0.clearBit(8);
+ l_ecmd_rc |= l_mbafir_action1.setBit(8);
+ l_ecmd_rc |= l_mbafir_mask_or.setBit(8);
+ }
+
+ // 9:14 RESERVED recoverable mask (forever)
+ l_ecmd_rc |= l_mbafir_action0.clearBit(9,6);
+ l_ecmd_rc |= l_mbafir_action1.setBit(9,6);
+ l_ecmd_rc |= l_mbafir_mask_or.setBit(9,6);
- // 15 internal scom error recoverable mask (tbd)
+ // 15 internal scom error recoverable unmask
l_ecmd_rc |= l_mbafir_action0.clearBit(15);
l_ecmd_rc |= l_mbafir_action1.setBit(15);
- l_ecmd_rc |= l_mbafir_mask_or.setBit(15);
+ l_ecmd_rc |= l_mbafir_mask_and.clearBit(15);
- // 16 internal scom error clone recoverable mask (tbd)
+ // 16 internal scom error clone recoverable unmask
l_ecmd_rc |= l_mbafir_action0.clearBit(16);
l_ecmd_rc |= l_mbafir_action1.setBit(16);
- l_ecmd_rc |= l_mbafir_mask_or.setBit(16);
+ l_ecmd_rc |= l_mbafir_mask_and.clearBit(16);
// 17:63 RESERVED not implemented, so won't touch these
@@ -770,6 +1261,28 @@ fapi::ReturnCode mss_unmask_draminit_errors( const fapi::Target & i_target,
ecmdDataBufferBase l_mbacalfir_mask_and(64);
ecmdDataBufferBase l_mbacalfir_action0(64);
ecmdDataBufferBase l_mbacalfir_action1(64);
+
+ uint8_t l_dd2_fir_bit_defn_changes = 0;
+ fapi::Target l_targetCentaur;
+
+ // Get Centaur target for the given MBA
+ l_rc = fapiGetParentChip(i_target, l_targetCentaur);
+ if(l_rc)
+ {
+ FAPI_ERR("Error getting Centaur parent target for the given MBA");
+ return l_rc;
+ }
+
+ // Get attribute that tells us if mbspa 0 cmd complete attention is fixed for dd2
+ l_rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES, &l_targetCentaur, l_dd2_fir_bit_defn_changes);
+ if(l_rc)
+ {
+ FAPI_ERR("Error getting ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES");
+ // Log passed in error before returning with new error
+ if (i_bad_rc) fapiLogError(i_bad_rc);
+ return l_rc;
+ }
+
// Read mask
@@ -799,17 +1312,17 @@ fapi::ReturnCode mss_unmask_draminit_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbacalfir_mask_or.flushTo0();
l_ecmd_rc |= l_mbacalfir_mask_and.flushTo1();
- // 0 MBA Recoverable Error recoverable mask
+ // 0 MBA Recoverable Error recoverable mask (until after draminit_training)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(0);
l_ecmd_rc |= l_mbacalfir_action1.setBit(0);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(0);
- // 1 MBA Nonrecoverable Error channel checkstop mask
+ // 1 MBA Nonrecoverable Error channel checkstop mask (until after draminit_mc)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(1);
l_ecmd_rc |= l_mbacalfir_action1.clearBit(1);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(1);
- // 2 Refresh Overrun recoverable mask
+ // 2 Refresh Overrun recoverable mask (until after draminit_mc)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(2);
l_ecmd_rc |= l_mbacalfir_action1.setBit(2);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(2);
@@ -825,12 +1338,12 @@ fapi::ReturnCode mss_unmask_draminit_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbacalfir_action1.setBit(4);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(4);
- // 5 ddr0_cal_timeout_err recoverable mask
+ // 5 ddr0_cal_timeout_err recoverable mask (until after draminit_mc)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(5);
l_ecmd_rc |= l_mbacalfir_action1.setBit(5);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(5);
- // 6 ddr1_cal_timeout_err recoverable mask
+ // 6 ddr1_cal_timeout_err recoverable mask (until after draminit_mc)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(6);
l_ecmd_rc |= l_mbacalfir_action1.setBit(6);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(6);
@@ -842,79 +1355,114 @@ fapi::ReturnCode mss_unmask_draminit_errors( const fapi::Target & i_target,
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(7);
- // 8 mbx to mba par error channel checkstop mask
+ // 8 mbx to mba par error channel checkstop mask (until after draminit_training_adv)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(8);
l_ecmd_rc |= l_mbacalfir_action1.clearBit(8);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(8);
- // 9 mba_wrd ue recoverable mask
+ // 9 mba_wrd ue recoverable mask (until mainline traffic)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(9);
l_ecmd_rc |= l_mbacalfir_action1.setBit(9);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(9);
- // 10 mba_wrd ce recoverable mask
+ // 10 mba_wrd ce recoverable mask (until mainline traffic)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(10);
l_ecmd_rc |= l_mbacalfir_action1.setBit(10);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(10);
- // 11 mba_maint ue recoverable mask
+ // 11 mba_maint ue recoverable mask (until after draminit_training_adv)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(11);
l_ecmd_rc |= l_mbacalfir_action1.setBit(11);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(11);
- // 12 mba_maint ce recoverable mask
+ // 12 mba_maint ce recoverable mask (until after draminit_training_adv)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(12);
l_ecmd_rc |= l_mbacalfir_action1.setBit(12);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(12);
- // 13 ddr_cal_reset_timeout channel checkstop mask
- // TODO: Leaving masked until I find proper spot to unmask this
+ // 13 ddr_cal_reset_timeout channel checkstop unmask
l_ecmd_rc |= l_mbacalfir_action0.clearBit(13);
l_ecmd_rc |= l_mbacalfir_action1.clearBit(13);
- l_ecmd_rc |= l_mbacalfir_mask_or.setBit(13);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(13);
- // 14 wrq_data_ce recoverable mask
+ // 14 wrq_data_ce recoverable mask (until mainline traffic)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(14);
l_ecmd_rc |= l_mbacalfir_action1.setBit(14);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(14);
- // 15 wrq_data_ue recoverable mask
+ // 15 wrq_data_ue recoverable mask (until mainline traffic)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(15);
l_ecmd_rc |= l_mbacalfir_action1.setBit(15);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(15);
- // 16 wrq_data_sue recoverable mask
+ // 16 wrq_data_sue recoverable mask (forever)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(16);
l_ecmd_rc |= l_mbacalfir_action1.setBit(16);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(16);
- // 17 wrq_rrq_hang_err recoverable mask
+ // 17 wrq_rrq_hang_err recoverable mask (until after draminit_training_adv)
l_ecmd_rc |= l_mbacalfir_action0.clearBit(17);
l_ecmd_rc |= l_mbacalfir_action1.setBit(17);
l_ecmd_rc |= l_mbacalfir_mask_or.setBit(17);
- // 18 sm_1hot_err recoverable unmask
+ // 18 sm_1hot_err channel checkstop unmask
l_ecmd_rc |= l_mbacalfir_action0.clearBit(18);
- l_ecmd_rc |= l_mbacalfir_action1.setBit(18);
+ l_ecmd_rc |= l_mbacalfir_action1.clearBit(18);
l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(18);
- // 19 wrd_scom_error recoverable mask (tbd)
+ // 19 wrd_scom_error recoverable unmask
l_ecmd_rc |= l_mbacalfir_action0.clearBit(19);
l_ecmd_rc |= l_mbacalfir_action1.setBit(19);
- l_ecmd_rc |= l_mbacalfir_mask_or.setBit(19);
-
- // 20 internal_scom_error recoverable mask (tbd)
- l_ecmd_rc |= l_mbacalfir_action0.clearBit(20);
- l_ecmd_rc |= l_mbacalfir_action1.setBit(20);
- l_ecmd_rc |= l_mbacalfir_mask_or.setBit(20);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(19);
- // 21 internal_scom_error_copy recoverable mask (tbd)
- l_ecmd_rc |= l_mbacalfir_action0.clearBit(21);
- l_ecmd_rc |= l_mbacalfir_action1.setBit(21);
- l_ecmd_rc |= l_mbacalfir_mask_or.setBit(21);
+ if (l_dd2_fir_bit_defn_changes)
+ {
+ // 20 rhmr_prim_reached_max recoverable mask (forever)
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(20);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(20);
+ l_ecmd_rc |= l_mbacalfir_mask_or.setBit(20);
+
+ // 21 rhmr_sec_reached_max recoverable mask (forever)
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(21);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(21);
+ l_ecmd_rc |= l_mbacalfir_mask_or.setBit(21);
+
+ // 22 rhmr_sec_already_full recoverable mask (forever)
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(22);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(22);
+ l_ecmd_rc |= l_mbacalfir_mask_or.setBit(22);
+
+ // 23 Reserved recoverable mask (forever)
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(23);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(23);
+ l_ecmd_rc |= l_mbacalfir_mask_or.setBit(23);
+
+ // 24 internal_scom_error recoverable unmask
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(24);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(24);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(24);
+
+ // 25 internal_scom_error_copy recoverable unmask
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(25);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(25);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(25);
+
+ // 26-63 Reserved not implemented, so won't touch these
+ }
+ else
+ {
+ // 20 internal_scom_error recoverable unmask
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(20);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(20);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(20);
- // 22-63 Reserved not implemented, so won't touch these
+ // 21 internal_scom_error_copy recoverable unmask
+ l_ecmd_rc |= l_mbacalfir_action0.clearBit(21);
+ l_ecmd_rc |= l_mbacalfir_action1.setBit(21);
+ l_ecmd_rc |= l_mbacalfir_mask_and.clearBit(21);
+ // 22-63 Reserved not implemented, so won't touch these
+ }
if(l_ecmd_rc)
{
@@ -1297,9 +1845,9 @@ fapi::ReturnCode mss_unmask_draminit_training_advanced_errors(
l_ecmd_rc |= l_mbsfir_mask_or.flushTo0();
l_ecmd_rc |= l_mbsfir_mask_and.flushTo1();
- // 0 scom_par_errors recoverable unmask
+ // 0 scom_par_errors channel checkstop unmask
l_ecmd_rc |= l_mbsfir_action0.clearBit(0);
- l_ecmd_rc |= l_mbsfir_action1.setBit(0);
+ l_ecmd_rc |= l_mbsfir_action1.clearBit(0);
l_ecmd_rc |= l_mbsfir_mask_and.clearBit(0);
// 1 mbx_par_errors channel checkstop unmask
@@ -1307,20 +1855,37 @@ fapi::ReturnCode mss_unmask_draminit_training_advanced_errors(
l_ecmd_rc |= l_mbsfir_action1.clearBit(1);
l_ecmd_rc |= l_mbsfir_mask_and.clearBit(1);
+ // 2 DD1: reserved recoverable mask (forever)
+ // 2 DD2: dram_eventn_bit0 recoverable mask (forever)
+ l_ecmd_rc |= l_mbsfir_action0.clearBit(2);
+ l_ecmd_rc |= l_mbsfir_action1.setBit(2);
+ l_ecmd_rc |= l_mbsfir_mask_or.setBit(2);
+
+ // 3 DD1: reserved recoverable mask (forever)
+ // 3 DD2: dram_eventn_bit1 recoverable mask (forever)
+ l_ecmd_rc |= l_mbsfir_action0.clearBit(3);
+ l_ecmd_rc |= l_mbsfir_action1.setBit(3);
+ l_ecmd_rc |= l_mbsfir_mask_or.setBit(3);
+
+ // 4:14 RESERVED recoverable mask (forever)
+ l_ecmd_rc |= l_mbsfir_action0.clearBit(4,11);
+ l_ecmd_rc |= l_mbsfir_action1.setBit(4,11);
+ l_ecmd_rc |= l_mbsfir_mask_or.setBit(4,11);
+
// 2:14 RESERVED recoverable mask (forever)
l_ecmd_rc |= l_mbsfir_action0.clearBit(2,13);
l_ecmd_rc |= l_mbsfir_action1.setBit(2,13);
l_ecmd_rc |= l_mbsfir_mask_or.setBit(2,13);
- // 15 internal scom error recoverable mask (tbd)
+ // 15 internal scom error recoverable unmask
l_ecmd_rc |= l_mbsfir_action0.clearBit(15);
l_ecmd_rc |= l_mbsfir_action1.setBit(15);
- l_ecmd_rc |= l_mbsfir_mask_or.setBit(15);
+ l_ecmd_rc |= l_mbsfir_mask_and.clearBit(15);
- // 16 internal scom error clone recoverable mask (tbd)
+ // 16 internal scom error clone recoverable unmask
l_ecmd_rc |= l_mbsfir_action0.clearBit(16);
l_ecmd_rc |= l_mbsfir_action1.setBit(16);
- l_ecmd_rc |= l_mbsfir_mask_or.setBit(16);
+ l_ecmd_rc |= l_mbsfir_mask_and.clearBit(16);
// 17:63 RESERVED not implemented, so won't touch these
@@ -1654,7 +2219,7 @@ fapi::ReturnCode mss_unmask_maint_errors(const fapi::Target & i_target,
l_ecmd_rc |= l_mbafir_mask_and.clearBit(2);
- // 7 wrd_caw2_data_ce_ue_err recoverable unmask
+ // 7 wrd_caw2_data_ce_ue_err channel checkstop unmask
l_ecmd_rc |= l_mbafir_mask_and.clearBit(7);
if(l_ecmd_rc)
@@ -1974,25 +2539,25 @@ fapi::ReturnCode mss_unmask_maint_errors(const fapi::Target & i_target,
l_ecmd_rc |= l_mbeccfir_action1.clearBit(47);
l_ecmd_rc |= l_mbeccfir_mask_and.clearBit(47);
- // 48 Maskable reg parity error recoverable mask (forever)
+ // 48 Maskable reg parity error recoverable unmask
l_ecmd_rc |= l_mbeccfir_action0.clearBit(48);
l_ecmd_rc |= l_mbeccfir_action1.setBit(48);
- l_ecmd_rc |= l_mbeccfir_mask_or.setBit(48);
+ l_ecmd_rc |= l_mbeccfir_mask_and.clearBit(48);
// 49 ecc datapath parity error channel checkstop unmask
l_ecmd_rc |= l_mbeccfir_action0.clearBit(49);
l_ecmd_rc |= l_mbeccfir_action1.clearBit(49);
l_ecmd_rc |= l_mbeccfir_mask_and.clearBit(49);
- // 50 internal scom error recovereble mask
+ // 50 internal scom error recovereble unmask
l_ecmd_rc |= l_mbeccfir_action0.clearBit(50);
l_ecmd_rc |= l_mbeccfir_action1.setBit(50);
- l_ecmd_rc |= l_mbeccfir_mask_or.setBit(50);
+ l_ecmd_rc |= l_mbeccfir_mask_and.clearBit(50);
- // 51 internal scom error clone recovereble mask
+ // 51 internal scom error clone recovereble unmask
l_ecmd_rc |= l_mbeccfir_action0.clearBit(51);
l_ecmd_rc |= l_mbeccfir_action1.setBit(51);
- l_ecmd_rc |= l_mbeccfir_mask_or.setBit(51);
+ l_ecmd_rc |= l_mbeccfir_mask_and.clearBit(51);
// 52:63 Reserved not implemented, so won't touch these
@@ -2294,15 +2859,15 @@ fapi::ReturnCode mss_unmask_fetch_errors(const fapi::Target & i_target,
l_ecmd_rc |= l_scac_lfir_action1.setBit(34);
l_ecmd_rc |= l_scac_lfir_mask_or.setBit(34);
- // 35 internal_scom_error recoverable masked (tbd)
+ // 35 internal_scom_error recoverable unmask
l_ecmd_rc |= l_scac_lfir_action0.clearBit(35);
l_ecmd_rc |= l_scac_lfir_action1.setBit(35);
- l_ecmd_rc |= l_scac_lfir_mask_or.setBit(35);
+ l_ecmd_rc |= l_scac_lfir_mask_and.clearBit(35);
- // 36 internal_scom_error_clone recoverable masked (tbd)
+ // 36 internal_scom_error_clone recoverable unmask
l_ecmd_rc |= l_scac_lfir_action0.clearBit(36);
l_ecmd_rc |= l_scac_lfir_action1.setBit(36);
- l_ecmd_rc |= l_scac_lfir_mask_or.setBit(36);
+ l_ecmd_rc |= l_scac_lfir_mask_and.clearBit(36);
// 37:63 Reserved
// Can we write to these bits?
@@ -2402,9 +2967,10 @@ fapi::ReturnCode mss_unmask_fetch_errors(const fapi::Target & i_target,
ecmdDataBufferBase l_mbs_fir_mask(64);
- ecmdDataBufferBase l_mbs_fir_mask_and(64);
-
+ ecmdDataBufferBase l_mbs_fir_mask_and(64);
uint8_t l_dd2_fir_bit_defn_changes = 0;
+ std::vector<fapi::Target> l_L4_vector;
+ bool l_L4_functional = false;
l_rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_DD2_FIR_BIT_DEFN_CHANGES, &i_target, l_dd2_fir_bit_defn_changes);
if(l_rc)
@@ -2414,7 +2980,19 @@ fapi::ReturnCode mss_unmask_fetch_errors(const fapi::Target & i_target,
if (i_bad_rc) fapiLogError(i_bad_rc);
return l_rc;
}
-
+
+ // Check if L4 is functional
+ l_rc = fapiGetChildChiplets(i_target, fapi::TARGET_TYPE_L4, l_L4_vector, fapi::TARGET_STATE_FUNCTIONAL);
+ if (l_rc)
+ {
+ FAPI_ERR("Error from fapiGetChildChiplets getting L4 target");
+ return l_rc;
+ }
+ if (l_L4_vector.size() > 0)
+ {
+ l_L4_functional = true;
+ }
+
// Read mask
l_rc = fapiGetScom_w_retry(i_target, MBS_FIR_MASK_REG_0x02011403, l_mbs_fir_mask);
if(l_rc)
@@ -2439,39 +3017,43 @@ fapi::ReturnCode mss_unmask_fetch_errors(const fapi::Target & i_target,
// 4 internal_timeout channel checkstop unmask
l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(4);
- // 9 cache_srw_ce recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(9);
- // 10 cache_srw_ue recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(10);
+ if (l_L4_functional)
+ {
+ // 9 cache_srw_ce recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(9);
- // 12 cache_co_ce recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(12);
+ // 10 cache_srw_ue recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(10);
- // 13 cache_co_ue recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(13);
+ // 12 cache_co_ce recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(12);
- // 15 dir_ce
- if (l_dd2_fir_bit_defn_changes)
- {
- // NOTE: SW248520: Known DD1 problem - higher temp causes
- // L4 Dir CEs. Want to ignore. Unmask for DD2 only
-
- // recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(15);
- }
-
- // 16 dir_ue channel checkstop unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(16);
+ // 13 cache_co_ue recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(13);
+
+ // 15 dir_ce
+ if (l_dd2_fir_bit_defn_changes)
+ {
+ // NOTE: SW248520: Known DD1 problem - higher temp causes
+ // L4 Dir CEs. Want to ignore. Unmask for DD2 only
+
+ // recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(15);
+ }
- // 18 dir_all_members_deleted channel checkstop unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(18);
+ // 16 dir_ue channel checkstop unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(16);
- // 19 lru_error recoverable unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(19);
+ // 18 dir_all_members_deleted channel checkstop unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(18);
- // 20 eDRAM error channel checkstop unmask
- l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(20);
+ // 19 lru_error recoverable unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(19);
+
+ // 20 eDRAM error channel checkstop unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(20);
+ }
// 26 srb_buffer_ce recoverable unmask
l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(26);
@@ -2479,6 +3061,12 @@ fapi::ReturnCode mss_unmask_fetch_errors(const fapi::Target & i_target,
// 27 srb_buffer_ue recoverable unmask
l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(27);
+ if (l_dd2_fir_bit_defn_changes && l_L4_functional)
+ {
+ // 30 proximal_ce_ue channel checkstop unmask
+ l_ecmd_rc |= l_mbs_fir_mask_and.clearBit(30);
+ }
+
if(l_ecmd_rc)
{
// Log passed in error before returning with new error
OpenPOWER on IntegriCloud