diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2014-09-17 17:24:12 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-10-22 21:15:36 -0500 |
commit | 9a62334a2994f20012af8ff1dc62a74d950d2807 (patch) | |
tree | 19428bcb977f4ed71335087d2891ca4156d691af | |
parent | 16a06e51cae32e6cb0b345002385aad27d933be9 (diff) | |
download | talos-hostboot-9a62334a2994f20012af8ff1dc62a74d950d2807.tar.gz talos-hostboot-9a62334a2994f20012af8ff1dc62a74d950d2807.zip |
PRD: Fixed redundant MBA GARD messages for MCS channel fails
Change-Id: Ia9b797de7cd3fd9782010767264e4a75d10dc00a
CQ: SW275771
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/13460
Tested-by: Jenkins Server
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Squashed: I66cd9f28bed52bf2100b97ddfaed78c3bb02abe9
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14125
4 files changed, 38 insertions, 5 deletions
diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule index 77ac6bae9..003ef4320 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule @@ -1277,7 +1277,7 @@ group gPbCentFir filter singlebit (PbCentFir, bit(10)) ? forceMpIpl; /** PBCENTFIR[11] - * PB_CENT_FIR_SPARE_0 + * Programming Error */ (PbCentFir, bit(11)) ? calloutProcLevel2MedThr1; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.C index d94582a52..c6a0f1812 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMemUtils.C @@ -30,6 +30,7 @@ #include <prdfCenMemUtils.H> #include <prdfExtensibleChip.H> #include <prdfCenMbaDataBundle.H> +#include <prdfP8McsDataBundle.H> #include <prdfPlatServices.H> #include <prdfCenMembufDataBundle.H> #include <prdfParserUtils.H> @@ -373,6 +374,17 @@ int32_t checkMcsChannelFail( ExtensibleChip * i_mcsChip, io_sc.service_data->SetCauseAttentionType(UNIT_CS); io_sc.service_data->SetThresholdMaskId(0); + // Indicate that cleanup is required. + P8McsDataBundle * mcsdb = getMcsDataBundle( i_mcsChip ); + ExtensibleChip * membChip = mcsdb->getMembChip(); + if ( NULL == membChip ) + { + PRDF_ERR( PRDF_FUNC"getMembChip() returned NULL" ); + o_rc = FAIL; break; + } + CenMembufDataBundle * mbdb = getMembufDataBundle( membChip ); + mbdb->iv_doChnlFailCleanup = true; + } while (0); if ( SUCCESS != o_rc ) @@ -407,10 +419,13 @@ int32_t chnlCsCleanup( ExtensibleChip *i_mbChip, (CHECK_STOP == i_sc.service_data->GetAttentionType()) ) break; + CenMembufDataBundle * mbdb = getMembufDataBundle( i_mbChip ); + if ( !mbdb->iv_doChnlFailCleanup ) + break; // Cleanup has already been done. + // Set it as SUE generation point. i_sc.service_data->SetFlag( ServiceDataCollector::UERE ); - CenMembufDataBundle * mbdb = getMembufDataBundle(i_mbChip); ExtensibleChip * mcsChip = mbdb->getMcsChip(); if ( NULL == mcsChip ) { @@ -513,8 +528,14 @@ int32_t chnlCsCleanup( ExtensibleChip *i_mbChip, } } } - }while(0); + + // Clean up complete an is no longer required. + mbdb->iv_doChnlFailCleanup = false; + + } while(0); + return o_rc; + #undef PRDF_FUNC } diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C index 98860b224..070a0d40b 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembuf.C @@ -267,6 +267,9 @@ int32_t PreAnalysis( ExtensibleChip * i_mbChip, STEP_CODE_DATA_STRUCT & i_sc, // Set the cause attention type i_sc.service_data->SetCauseAttentionType(UNIT_CS); + // Indicate that cleanup is required. + mbdb->iv_doChnlFailCleanup = true; + } while (0); return o_rc; diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembufDataBundle.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembufDataBundle.H index 163efc7e4..96f6c99c8 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembufDataBundle.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMembufDataBundle.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2014 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -46,7 +48,7 @@ class CenMembufDataBundle : public DataBundle /** @brief Constructor */ CenMembufDataBundle( ExtensibleChip * i_membChip ) : iv_membChip(i_membChip), iv_mcsChip(NULL), - iv_analyzeMba1Starvation(false) + iv_analyzeMba1Starvation(false), iv_doChnlFailCleanup(false) { for ( uint32_t i = 0; i < MAX_MBA_PER_MEMBUF; i++ ) iv_mbaChips[i] = NULL; @@ -121,6 +123,13 @@ class CenMembufDataBundle : public DataBundle // Toggles to solve MBA1 starvation issue bool iv_analyzeMba1Starvation; + + /** The channel fail cleanup function is called in both the MCS and MEMBUF + * PostAnalysis() plugins. It is possible in some cases that both plugins + * are called in the same analysis path. In this case the cleanup will be + * called twice. To circumvent this we will use this bool to determine if + * the cleanup has been done or needs to be done. */ + bool iv_doChnlFailCleanup; }; /** |