summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/attn/ipl/test/attnfakeprd.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/diag/attn/ipl/test/attnfakeprd.C')
-rw-r--r--src/usr/diag/attn/ipl/test/attnfakeprd.C68
1 files changed, 65 insertions, 3 deletions
diff --git a/src/usr/diag/attn/ipl/test/attnfakeprd.C b/src/usr/diag/attn/ipl/test/attnfakeprd.C
index 0f4bd9a3d..5c9bd6340 100644
--- a/src/usr/diag/attn/ipl/test/attnfakeprd.C
+++ b/src/usr/diag/attn/ipl/test/attnfakeprd.C
@@ -1,11 +1,11 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/diag/attn/hostboot/test/attnfakeprd.C $ */
+/* $Source: src/usr/diag/attn/ipl/test/attnfakeprd.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -32,6 +32,7 @@
#include "attninject.H"
#include "../../common/attnops.H"
#include "../../common/attnlist.H"
+#include "../../common/attntrace.H"
#include <sys/time.h>
using namespace PRDF;
@@ -73,7 +74,68 @@ struct Clear
errlHndl_t FakePrd::callPrd(const AttentionList & i_attentions)
{
- return i_attentions.forEach(Clear(*iv_injectSink)).err;
+ errlHndl_t l_elog = i_attentions.forEach(Clear(*iv_injectSink)).err;
+
+ AttnList l_attnList;
+ i_attentions.getAttnList(l_attnList);
+
+ // -----------------------------------------------------
+ // asdf bjs @TODO: RTC:151004 (this is FAKE code only)
+ // If you do the EC/MODEL check, it crashes in CXX testcase.
+ // Kind of thinking some library missing that is needed when
+ // adding these calls, For now, I will just leave them out
+ // and we could probably scrap this test now that it runs
+ // successfully (see attntestproc.H)
+ // (Maybe add to 'fake target service' for these ATTRs)
+ // -----------------------------------------------------
+ // For the initial NIMBUS chip, there is a HW issue
+ // which requires us to clear the "Combined Global
+ // interrupt register" on recoverable errors.
+ // This also affects Checkstop/Special Attns, but
+ // the FSP handles those and already clears the reg.
+ // The issue does not apply to host/unit cs attns.
+// uint8_t l_ecLevel = 0;
+ AttnList::iterator l_attnIter = l_attnList.begin();
+
+ // Shouldn't be mixing NIMBUS with CUMULUS,etc...
+ // so probably don't need to repeat this call per chip.
+// bool l_isNimbus = ( (*l_attnIter).targetHndl->
+// getAttr<ATTR_MODEL>() == MODEL_NIMBUS );
+
+ // Iterate thru all chips in case PRD handled
+ // a chip other than the first one.
+ while(l_attnIter != l_attnList.end())
+ {
+// l_ecLevel = (*l_attnIter).targetHndl->getAttr<ATTR_EC>();
+
+
+ if ( (RECOVERABLE == (*l_attnIter).attnType)
+// && (true == l_isNimbus) && (l_ecLevel < 0x11)
+ )
+ {
+ errlHndl_t l_scomErr = NULL;
+ uint64_t l_clrAllBits = 0;
+
+ l_scomErr = putScom( (*l_attnIter).targetHndl,
+ PIB_INTR_TYPE_REG,
+ l_clrAllBits
+ );
+
+ if (NULL != l_scomErr)
+ {
+ ATTN_ERR("Clear PibIntrReg failed, HUID:0X%08X",
+ get_huid( (*l_attnIter).targetHndl) );
+ errlCommit(l_scomErr, ATTN_COMP_ID);
+ } // failed to clear PIB intr reg
+
+ } // if recoverable attn
+
+ ++l_attnIter;
+
+ } // end while looping thru attn list
+
+
+ return l_elog;
}
FakePrd::FakePrd(InjectSink & i_injectSink) :
OpenPOWER on IntegriCloud